我是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中的数据,我将通过pythonapi编写mapreduce任务。
任何帮助都是非常感谢的!
1条答案
按热度按时间brccelvz1#
模式设计是正确的,还要记住hbase在扫描期间加载整个列族,因此如果您一次需要所有数据,最好将所有数据都放在一个列族中。
加载数据的一个简单方法是与客户一起扫描第一个文件,然后动态地从第二个文件中获取数据。批量csv加载可以加快执行时间,但您将花费更多时间编写代码。
也许您还需要考虑行键,因为hbase按字母顺序存储数据。如果您有大量数据,最好使用给定的拆分键创建表,而不是让hbase进行拆分,因为这样会导致区域不平衡。