我是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任务。
任何帮助都会非常有用!
答案 0 :(得分:1)
您对模式设计是正确的,还要记住hbase在扫描期间加载整个列族,因此如果您一次需要所有数据,那么最好将所有数据放在一个列族中。
加载数据的一种简单方法是与客户一起扫描第一个文件,然后立即从第二个文件中获取数据。批量CSV加载的执行时间可能更快,但您将花费更多时间编写代码。
也许您还需要考虑行键,因为HBase按字母顺序存储数据。如果你有很多数据,你最好用给定的分裂键创建表,而不是让HBase进行分割,因为它最终可能会出现不平衡的区域。