现在我有了这个问题,可能需要人们的一些投入。
我有一个传统的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/