将多个互连的csv文件上载到HBase

时间:2017-09-08 16:32:50

标签: hadoop hbase hdfs

我是HBase的新手,仍然不确定我将在我的案例中使用哪个Hadoop生态系统组件,以及如何在以后分析我的数据,以便只是探索选项。

我有一张Excel表格,其中包含所有这类客户的摘要,但≈400列:

CustomerID    Country    Age    E-mail
251648        Russia     27     boo@yahoo.com
487985        USA        30     foo@yahoo.com   
478945        England    15     lala@yahoo.com
789456        USA        25     nana@yahoo.com

另外,我为每个客户单独创建了.xls文件,其中包含有关他的信息(一个客户=一个.xls文件),每个文件中的列数和列名相同。这些文件中的每一个都以CustomerID命名。一个看起来像这样:

'customerID_251648.xls':

feature1 feature2   feature3   feature4
0        33,878     yes        789,598
1        48,457     yes        879,594
1        78,495     yes        487,457
0        94,589     no         787,475

我已将所有这些文件转换为.csv格式,现在我觉得我应该使用Hadoop生态系统的哪个组件来存储和查询这些数据。

我的最终目标是查询一些customerID并从所有文件中获取有关客户的所有信息。

我认为HBase非常适合这种情况,因为我可以创建这样的架构:

row key timestamp   Column Family 1                   Column Family 2           
251648             Country Age  E-Mail      Feature1 Feature2 Feature3 Feature4

在HBase中上传和查询此类数据的最佳方法是什么?我应该首先结合来自不同来源的客户信息,然后将其上传到HBase吗?或者我可以为每个客户保留不同的.csv文件,当上传到HBase时,选择哪种.csv用于形成列族?

为了查询存储在HBase中的数据,我将通过Python API编写MapReduce任务。

任何帮助都会非常有用!

1 个答案:

答案 0 :(得分:1)

您对模式设计是正确的,还要记住hbase在扫描期间加载整个列族,因此如果您一次需要所有数据,那么最好将所有数据放在一个列族中。

加载数据的一种简单方法是与客户一起扫描第一个文件,然后立即从第二个文件中获取数据。批量CSV加载的执行时间可能更快,但您将花费更多时间编写代码。

也许您还需要考虑行键,因为HBase按字母顺序存储数据。如果你有很多数据,你最好用给定的分裂键创建表,而不是让HBase进行分割,因为它最终可能会出现不平衡的区域。