将键值对数据批量加载到hbase中

iezvtpos  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(328)

我正在评估hbase,以处理每行具有可变列数的非常宽的数据集。在原始形式中,“我的数据”有一个变量列表,其中列出了每行的参数名和值。在其转换形式中,它以键值对的形式提供。
我要将此数据加载到hbase中。将我的键值对处理过的数据转换成单独的“put”语句以获取数据是非常容易的。然而,我需要大量加载,因为我有1000列和数百万行,导致数十亿个单独的键值对,需要数十亿个“put”语句。此外,列(a、b、c、d……)的列表还没有提前完全知道。到目前为止,我调查了以下选项:
importtsv:无法使用,因为这需要提前将数据从行透视到列,并且要导入一组固定的已知列。
用于生成hfile的配置单元:此选项也要求提前指定列名,并将配置单元表中的每一列Map到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
uajslkp6

uajslkp61#

您几乎可以肯定地希望使用客户m/r作业+增量加载(也称为批量加载)。
一般流程如下:
提交已使用配置的m/r作业 HFileOutputFormat.configureIncrementalLoad Map原始数据并写入hbase的put
使用以下命令将作业的输出加载到表中:
sudo-u hdfs hdfs dfs-chown-rhbase:hbase /path/to/job/output
sudo-u hbase hbase org.apache.hadoop.hbase.mapreduce.loadincrementalhfiles/path/to/job/output表名
有很多方法可以从java加载,但这意味着要模拟hbase。这里比较棘手的部分是确保文件归hbase所有,并且运行增量加载的用户也是hbase。这篇cloudera博客文章更多地讨论了这些细节。
总的来说,我建议看一看这个gh回购,它似乎涵盖了这个过程的基本知识。

相关问题