我是hbase的新员工。将文本文件中的数据批量加载到hbase时,我遇到了一个问题。假设我有下表:
Key_id | f1:c1 | f2:c2
row1 'a' 'b'
row1 'x' 'y'
当我解析2条记录并同时将其放入hbase(相同的时间戳)时,只有版本 {row1 'x' 'y'}
已更新。解释如下:
将数据放入hbase时,需要时间戳。时间戳可以由regionserver自动生成,也可以由您提供。时间戳对于给定单元格的每个版本都必须是唯一的,因为时间戳标识了版本。例如,要修改单元格的早期版本,您需要为数据本身发出一个具有不同值但时间戳相同的put。
我在考虑指定时间戳的想法,但我不知道如何为批量加载自动设置时间戳,这会影响加载性能吗??我需要最快和安全的大数据导入过程。
我试图解析每个记录并将其放入表中,但是速度非常慢…所以另一个问题是:在放入hbase之前,应该批处理多少记录/数据大小(我写了一个简单的java程序来放。它比我使用importsv工具通过命令导入要慢得多。我不知道这个工具的批量大小…)
谢谢你的建议!
2条答案
按热度按时间mo49yndu1#
q1:hbase使用时间戳维护版本。如果您不提供它将采取默认提供的hbase系统。
在put请求中,如果您有这样的要求,也可以更新自定义时间。它不会影响性能。
问题2:你可以用两种方法来做。
简单的java客户机和批处理技术如下所示。
mapreduce importtsv(批处理客户端)
例如:#1个带有批处理技术的简单java客户机。
我使用hbase放入100000条记录的批处理列表对象来解析json(类似于您的独立csv客户机)
下面是我实现这一点的代码片段。在解析其他格式时也可以做同样的事情)
可能你需要在两个地方调用这个方法
1) 一批10万条记录。
2) 用于处理批量记录小于100000的提醒
注:批量大小由内部控制
hbase.client.write.buffer
如下面的一个配置XML中所示它的默认值是2mb大小。一旦您的缓冲区被填满,那么它将刷新所有的put以实际插入到您的表中。
此外,mapreduce客户机或单机客户机都可以使用批处理技术。批处理由上述缓冲区属性控制
bihw5rsg2#
如果需要覆盖记录,可以将hbase表配置为只记住一个版本。
本页介绍如何以最大可能的速度批量加载到hbase:
如何使用hbase批量加载及其原因