database - Hive或HBase或任何其他选项?

标签 database hadoop hive hbase hdfs

现在我有了这个问题,可能需要人们的一些投入。

我有一个传统的rdbms(例如sql server)存储每天更新的数据。而且我想利用Hadoop生态系统,因此第一步可能是将数据从我们的rdbms导出到Hadoop数据存储中。我还想对数据存储进行增量更新,可能是每晚进行一次。我不确定要使用哪个。

当我们考虑进行增量更新时,Hive似乎不是正确的选择(如果此假设不正确,请纠正我),那么HBase或其他合适的选择呢?

最佳答案

Hadoop生态系统包括一个名为Sqoop的工具,该工具旨在完全解决您所描述的问题:将数据从RDBMS拉入Hadoop。它支持几种进行增量更新的方法。它需要到数据库的JBDC或JNDI连接,并且对于某些数据库来说可以使用高性能的选项。它是Hadoop中更好的工具之一。

当我说“进入Hadoop”时,这可能意味着几件事,但通常是a)作为存储在Hadoop分布式文件系统(HDFS)上的一组文件,或者b)存储在hBase中的数据。从技术上讲,hBase只是在HDFS上存储文件的另一种方式。

Hive是HDFS之上的一层,它使您可以将导出到HDFS文件的RDBMS表视为仍在SQL Server数据库中。好吧Hive可以使用类似SQL的语言查询多种文件格式。

HDFS有一个您需要了解的特殊挑战:与常规数据库一样,无法更新行。 HDFS文件是“一次写入多次读取”的设计。通常,您可以沿某个自然分区将数据集分割成多个文件,这样,如果您确实需要更新记录,则只需要重写与该分区关联的文件-年+月是常见的分区方案。

因此,如果要对记录从未更改过的数据库进行Sqoop处理,则只需将其附加到HDFS文件中即可。这对于事务,日志或类似的其他数据来说很好,因为它通常不会更改。但是更新的记录(例如,客户名称或电子邮件)会带来更困难的问题。

hBase通过透明地管理对​​现有记录的更新,消除了HDFS的限制。但是hBase是键值存储数据库。该键可以是您RDBMS的主键,而值必须是记录的其余部分。这并不可怕,但是可能很麻烦。

我相信Hive的最新版本(或可能与Impive功能相似的Impala)允许更新,同时仍以更灵活的格式存储数据。

因此,Sqoop是您想要的工具,但请仔细考虑一旦将数据放入Hadoop后将要处理的数据-这与可以变得很大的数据库完全不同。

关于database - Hive或HBase或任何其他选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824684/

相关文章:

hadoop - 可以使用XML创建Hive表,但查询时出现错误

mysql - 在mysql中,如何根据不同的表动态创建 View ?

sql - 查找配置单元中每个ID的平均小时数

python - Hadoop沙盒上的Os X流上的python客户端

azure - 文件未在 HDInsights 群集中使用 Spark 保存在 Azure blob 中

hadoop - Apache Solr 支持 ORC 文件格式

mysql - 如果表按日期排序,如何在 MySQL 上选择特定行之前的行?

database - 与祖先一起设计数据存储模型

mysql - 如何选择 count() 和 LIMIT?

sql - Hive中哪一个更快? “in”或 “or”?