批量加载键值对数据到HBASE

时间:2016-10-18 19:55:07

标签: hadoop hbase bigdata nosql

我正在评估HBASE处理每行可变列数的非常宽的数据集。在其原始形式中,我的数据具有参数名称的变量列表和每行的值。在其转换形式中,它以键值对的形式提供。

我想将这些数据加载到HBASE中。将我的键值对处理数据转换为单独的" put"获取数据的语句。然而,我需要批量加载,因为我有1000列和数百万行,导致数十亿个单独的键值对,需要数十亿" put"声明。此外,列(a,b,c,d,...)列表未提前完全知晓。到目前为止,我调查了以下选项:

  • importtsv :无法使用,因为这需要提前将数据从行转移到列,并且要导入一组固定的已知列。
  • HIVE生成HFile :此选项也需要提前指定列名,并将hive表中的每一列映射到hbase中的列。

我唯一的选择似乎是解析一大块数据,将其转换为一组已知列,然后批量加载。这看起来很浪费,因为HBASE无论如何都会把它吹成键值对。确实应该有一种更简单有效的批量加载键值对的方法吗?

原始数据格式:

rowkey1, {a:a1, b:b1}
rowkey2, {a:a2, c:c2}
rowkey3, {a:a3, b:b3, c:c3, d:d3}

已处理的数据格式:

rowkey1, a, a1
rowkey1, b, b1
rowkey2, a, a2
rowkey2, c, c2
rowkey3, a, a3
rowkey3, b, b3
rowkey3, c, c3
rowkey3, d, d3

1 个答案:

答案 0 :(得分:0)

您几乎肯定希望使用客户M / R作业+增量加载(也称为批量加载)。

一般过程将是:

  1. 提交使用HFileOutputFormat.configureIncrementalLoad
  2. 配置的M / R作业
  3. 映射原始数据并为HBase写入PUT
  4. 使用以下命令将作业输出加载到表中:

    sudo -u hdfs hdfs dfs -chown -R hbase:hbase / path / to / job / output

    sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles / path / to / job / output table-name-here

  5. 有一些方法可以从java加载,但这意味着模仿HBase。这里棘手的部分是确保文件归HBase所有,运行增量加载的用户也是HBase。这个http://www.computerhope.com/unix/wget.htm更多地讨论了这些细节。

    一般情况下,我建议您查看此Cloudera Blog Post,这似乎涵盖了流程的基础知识。