我正在评估HBASE处理每行可变列数的非常宽的数据集。在其原始形式中,我的数据具有参数名称的变量列表和每行的值。在其转换形式中,它以键值对的形式提供。
我想将这些数据加载到HBASE中。将我的键值对处理数据转换为单独的" put"获取数据的语句。然而,我需要批量加载,因为我有1000列和数百万行,导致数十亿个单独的键值对,需要数十亿" put"声明。此外,列(a,b,c,d,...)列表未提前完全知晓。到目前为止,我调查了以下选项:
我唯一的选择似乎是解析一大块数据,将其转换为一组已知列,然后批量加载。这看起来很浪费,因为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
答案 0 :(得分:0)
您几乎肯定希望使用客户M / R作业+增量加载(也称为批量加载)。
一般过程将是:
HFileOutputFormat.configureIncrementalLoad
使用以下命令将作业输出加载到表中:
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
有一些方法可以从java加载,但这意味着模仿HBase。这里棘手的部分是确保文件归HBase所有,运行增量加载的用户也是HBase。这个http://www.computerhope.com/unix/wget.htm更多地讨论了这些细节。
一般情况下,我建议您查看此Cloudera Blog Post,这似乎涵盖了流程的基础知识。