Database Hive、HBase或任何其他选项?

Database Hive、HBase或任何其他选项?,database,hadoop,hive,hbase,hdfs,Database,Hadoop,Hive,Hbase,Hdfs,现在我得到了这个问题,可能需要大家的一些意见 我有一个传统的rdbms(例如sql server)存储每天更新的数据。我想利用Hadoop生态系统,所以第一步可能是将数据从rdbms导出到Hadoop数据存储。我还想对数据存储进行增量更新,可能是每夜更新一次。我不知道该用哪一个 当我们考虑增量更新时,蜂巢不是正确的选择(如果这个假设不正确,请纠正我),那么HBASE或其他合适的选项是什么? < P> 1数据摄取:< /强>可以考虑 2)增量更新: 您可以将hbase与配置单元外部表(hbase

现在我得到了这个问题,可能需要大家的一些意见

我有一个传统的rdbms(例如sql server)存储每天更新的数据。我想利用Hadoop生态系统,所以第一步可能是将数据从rdbms导出到Hadoop数据存储。我还想对数据存储进行增量更新,可能是每夜更新一次。我不知道该用哪一个

当我们考虑增量更新时,蜂巢不是正确的选择(如果这个假设不正确,请纠正我),那么HBASE或其他合适的选项是什么?

< P> <强> 1数据摄取:< /强>可以考虑

2)增量更新:

您可以将hbase与配置单元外部表(hbase存储处理程序)一起用于增量更新

请看

也看看这个

像Impala这样的选项是特定于平台的(cloudera),可以重用hive元存储。但查询处理速度比配置单元快

黑斑羚有一些关键特性使其速度更快

  • 它不使用map/reduce,这是非常昂贵的 单独的JVM。它运行单独的Impala守护进程来分割查询 并并行运行它们,最后合并结果集

  • 它在内存中执行大部分操作

  • 它使用hdfs作为其存储,这对于大型文件来说是快速的。信息技术 尽可能多地缓存查询、结果和数据

  • 它支持新的文件格式,如parquet,它是柱状文件 格式。因此,如果您使用这种格式,在以下情况下进行查询会更快: 您只能访问少数列 大多数时候


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

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

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

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

    因此,如果您正在Sqoop一个记录从未更改的数据库,那么您可以简单地附加到HDFS文件中。这对于事务、日志或其他类似的数据很好,因为它通常不会被更改。但更新的记录(例如客户姓名或电子邮件)会带来更大的问题

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

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


    因此,Sqoop是您想要的工具,但请仔细考虑一旦数据进入Hadoop,您将要对其执行什么操作——这是一件非常非常不同的事情,而不仅仅是一个可以变得非常大的数据库。

    像impala这样的选项是特定于平台的。我建议你做一个POC,看看哪个最适合你。请看我的最新答案。