hadoop—将多个相互连接的csv文件上载到hbase的方法

zi8p0yeb  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(333)

我是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任务。
任何帮助都是非常感谢的!

brccelvz

brccelvz1#

模式设计是正确的,还要记住hbase在扫描期间加载整个列族,因此如果您一次需要所有数据,最好将所有数据都放在一个列族中。
加载数据的一个简单方法是与客户一起扫描第一个文件,然后动态地从第二个文件中获取数据。批量csv加载可以加快执行时间,但您将花费更多时间编写代码。
也许您还需要考虑行键,因为hbase按字母顺序存储数据。如果您有大量数据,最好使用给定的拆分键创建表,而不是让hbase进行拆分,因为这样会导致区域不平衡。

相关问题