将键值对数据批量加载到 HBASE
Posted
技术标签:
【中文标题】将键值对数据批量加载到 HBASE【英文标题】:Bulk Loading Key-value pair data into HBASE 【发布时间】:2016-10-18 19:55:06 【问题描述】:我正在评估 HBASE 以处理每行列数可变的非常宽的数据集。在其原始形式中,我的数据有一个变量列表,其中包含每行的参数名称和值。在其转换后的形式中,它以键值对的形式提供。
我想将此数据加载到 HBASE 中。将我的键值对处理数据转换为单独的“放置”语句以获取数据非常容易。但是我需要批量加载,因为我有 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】:您几乎肯定希望使用客户 M/R 作业 + 增量装载(也称为批量装载)。
一般流程如下:
-
提交已使用
HFileOutputFormat.configureIncrementalLoad
配置的 M/R 作业
映射原始数据并为 HBase 写入 PUT
使用以下命令将作业的输出加载到表中:
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。这个Cloudera Blog Post 更多地讨论了这些细节。
一般来说,我建议您看一下这个GH Repo,它似乎涵盖了该过程的基础知识。
【讨论】:
以上是关于将键值对数据批量加载到 HBASE的主要内容,如果未能解决你的问题,请参考以下文章
PDO fetchAll 将键值对分组到 assoc 数组中
javascript 将键值对添加到JavaScript对象