现在我有一个问题,可能需要一些人的意见。我有一个传统的rdbms(例如sql server)存储每天更新的数据。我想利用hadoop生态系统,所以第一步可能是将数据从rdbms导出到hadoop数据存储。我还想对数据存储进行增量更新,可能是每夜更新一次。我不知道该用哪一个。当我们考虑增量更新时,hive似乎不是正确的选项(如果这个假设不正确,请纠正我),那么hbase或任何其他合适的选项呢?
lh80um4z1#
1) 数据摄取:您可以考虑使用sqoop2) 增量更新:可以通过配置单元外部表(hbase存储处理程序)使用hbase进行增量更新。请看https://cwiki.apache.org/confluence/display/hive/hbaseintegration也看看这个我的答案像impala这样的选项是特定于平台的(cloudera),它可以重用hive元存储。但在查询处理方面比配置单元更快。Impala 有一些关键的特征使得它的速度很快。它不使用map/reduce,这在单独的jvm中是非常昂贵的。它运行单独的impala守护进程,该守护进程拆分查询并并行运行它们,最后合并结果集。它在内存中执行大部分操作。它使用hdfs来存储大文件,速度很快。它尽可能多地缓存从查询到结果再到数据。它支持像parquet这样的新文件格式,即柱状文件格式。因此,如果您使用这种格式,那么对于大多数时间只访问少数列的查询,它会更快。
4xrmg8kj2#
hadoop生态系统包括一个名为sqoop的工具,该工具的设计目的正是为了解决您描述的问题:将rdbms中的数据拉入hadoop。它支持几种进行增量更新的方法。它需要到数据库的jbdc或jndi连接,对于某些数据库,它可以使用高性能选项。它是hadoop中更好的工具之一。当我说“into hadoop”时,这可能意味着几件事,但通常是a)存储在hadoop分布式文件系统(hdfs)上的一组文件,或者b)存储在hbase中的数据。从技术上讲,hbase只是在hdfs上存储文件的另一种方式。hive是hdfs之上的一层,它允许您将导出到hdfs文件的rdbms表视为仍在sqlserver数据库中。嗯,有点。hive可以使用类似sql的语言查询多种文件格式。hdfs有一个您需要了解的特殊挑战:无法像常规数据库那样更新行。hdfs文件是一种“一次写入多次读取”的设计。通常,您可以将一个数据集沿着某个自然分区分割成多个文件,这样,如果确实需要更新一个记录,您只需重写与该分区关联的文件——年+月是一种常见的分区方案。因此,如果您使用的是一个记录永远不会更改的数据库,那么您可以简单地附加到hdfs文件中。这对于事务、日志或其他类似的数据来说是很好的,因为它通常不会被更改。但是更新的记录(例如客户姓名或电子邮件)会带来更大的问题。hbase通过透明地管理对现有记录的更新,消除了hdfs的限制。但hbase是一个键值存储数据库;这个键可以是rdbms的主键,值必须是记录的其余部分。这并不可怕,但也可能很麻烦。我相信hive上的最新版本(或者可能是impala,它在功能上与hive类似)允许更新,同时仍然以更灵活的格式存储数据。所以sqoop是你想要的工具,但是仔细想想,一旦数据进入hadoop,你想对它做什么——这是一件非常非常不同的事情,而不仅仅是一个可以变得非常大的数据库。
2条答案
按热度按时间lh80um4z1#
1) 数据摄取:您可以考虑使用sqoop
2) 增量更新:
可以通过配置单元外部表(hbase存储处理程序)使用hbase进行增量更新。
请看https://cwiki.apache.org/confluence/display/hive/hbaseintegration
也看看这个我的答案
像impala这样的选项是特定于平台的(cloudera),它可以重用hive元存储。但在查询处理方面比配置单元更快。
Impala 有一些关键的特征使得它的速度很快。
它不使用map/reduce,这在单独的jvm中是非常昂贵的。它运行单独的impala守护进程,该守护进程拆分查询并并行运行它们,最后合并结果集。
它在内存中执行大部分操作。
它使用hdfs来存储大文件,速度很快。它尽可能多地缓存从查询到结果再到数据。
它支持像parquet这样的新文件格式,即柱状文件格式。因此,如果您使用这种格式,那么对于大多数时间只访问少数列的查询,它会更快。
4xrmg8kj2#
hadoop生态系统包括一个名为sqoop的工具,该工具的设计目的正是为了解决您描述的问题:将rdbms中的数据拉入hadoop。它支持几种进行增量更新的方法。它需要到数据库的jbdc或jndi连接,对于某些数据库,它可以使用高性能选项。它是hadoop中更好的工具之一。
当我说“into hadoop”时,这可能意味着几件事,但通常是a)存储在hadoop分布式文件系统(hdfs)上的一组文件,或者b)存储在hbase中的数据。从技术上讲,hbase只是在hdfs上存储文件的另一种方式。
hive是hdfs之上的一层,它允许您将导出到hdfs文件的rdbms表视为仍在sqlserver数据库中。嗯,有点。hive可以使用类似sql的语言查询多种文件格式。
hdfs有一个您需要了解的特殊挑战:无法像常规数据库那样更新行。hdfs文件是一种“一次写入多次读取”的设计。通常,您可以将一个数据集沿着某个自然分区分割成多个文件,这样,如果确实需要更新一个记录,您只需重写与该分区关联的文件——年+月是一种常见的分区方案。
因此,如果您使用的是一个记录永远不会更改的数据库,那么您可以简单地附加到hdfs文件中。这对于事务、日志或其他类似的数据来说是很好的,因为它通常不会被更改。但是更新的记录(例如客户姓名或电子邮件)会带来更大的问题。
hbase通过透明地管理对现有记录的更新,消除了hdfs的限制。但hbase是一个键值存储数据库;这个键可以是rdbms的主键,值必须是记录的其余部分。这并不可怕,但也可能很麻烦。
我相信hive上的最新版本(或者可能是impala,它在功能上与hive类似)允许更新,同时仍然以更灵活的格式存储数据。
所以sqoop是你想要的工具,但是仔细想想,一旦数据进入hadoop,你想对它做什么——这是一件非常非常不同的事情,而不仅仅是一个可以变得非常大的数据库。