gpt4 book ai didi

hadoop - 批量加载键值对数据到HBASE

转载 作者:可可西里 更新时间:2023-11-01 15:59:10 28 4
gpt4 key购买 nike

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

我想将此数据加载到 HBASE 中。将我的键值对处理数据转换为单独的“put”语句以获取数据非常容易。但是我需要批量加载,因为我有数千列和数百万行,导致数十亿个单独的键值对,需要数十亿个“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

最佳答案

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

一般流程是:

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

    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这似乎涵盖了流程的基础知识。

关于hadoop - 批量加载键值对数据到HBASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40116953/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com