【问题标题】:Approach to upload multiple interconnected csv files to HBase将多个相互关联的 csv 文件上传到 HBase 的方法
【发布时间】:2017-09-08 16:32:50
【问题描述】:

我是 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 任务。

任何帮助都会非常感激!

【问题讨论】:

    标签: hadoop hbase hdfs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2016-10-19
      • 1970-01-01
      相关资源
      最近更新 更多