首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HBase批量put(List<Put>)比put( put )快吗?Put对象的容量是多少?

HBase批量put(List<Put>)比put( put )快吗?Put对象的容量是多少?
EN

Stack Overflow用户
提问于 2015-02-27 06:33:13
回答 5查看 7.9K关注 0票数 7

我正在处理一个批处理作业,通过HTableInterface将一批Put对象处理到HBase中。接口方法有两种:HTableInterface.put(列表)和HTableInterface.put(Put)。

我想知道,对于相同数量的Put对象,批量put是否比逐个put更快?

另一个问题是,我放置了一个非常大的Put对象,这导致作业失败。Put对象的大小似乎有一个限制。它能有多大?

EN

回答 5

Stack Overflow用户

发布于 2015-11-07 03:36:03

put(List<Put> puts)put(Put aPut)在引擎盖下是相同的。他们都给doPut(List<Put> puts)打电话。

重要的是@ozhang提到的缓冲区大小。例如,默认值为2MB。

代码语言:javascript
复制
<property>   
     <name>hbase.client.write.buffer</name>
     <value>2097152</value> 
</property>

每次写入缓冲区被填满并触发flushCommits()时,都会有1rpc。因此,如果您的应用程序因为对象相对较大而经常刷新,那么尝试增加写缓冲区大小可以解决这个问题。

票数 4
EN

Stack Overflow用户

发布于 2015-03-01 06:04:09

如果你的键值很大,那么使用puts列表可能会有客户端缓冲区大小的问题。

代码语言:javascript
复制
<property>   
    <name>hbase.client.write.buffer</name>
    <value>20971520</value> 
</property>

默认情况下,客户端最多收集2mb数据,然后将其刷新。因此,您还必须增加此值

票数 2
EN

Stack Overflow用户

发布于 2015-02-28 06:20:12

对于批处理but,最好先构造一个but列表,然后调用HTableInterface.put(List<Put> puts),因为它使用单个RPC调用来提交批处理,但根据列表的大小,写缓冲区可能会将其全部刷新,也可能不会

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28754077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档