HBase批量投入产出(列表<;投入>;)是否比投入产出(投入)快?Put对象的容量是多少?
我正在处理一个批处理作业,通过HTableInterface将一批Put对象处理到HBase中。有两种API方法,HTableInterface.put(List)和HTableInterface.put(put) 我想知道,对于相同数量的Put对象,批量Put是否比逐个Put更快HBase批量投入产出(列表<;投入>;)是否比投入产出(投入)快?Put对象的容量是多少?,hbase,Hbase,我正在处理一个批处理作业,通过HTableInterface将一批Put对象处理到HBase中。有两种API方法,HTableInterface.put(List)和HTableInterface.put(put) 我想知道,对于相同数量的Put对象,批量Put是否比逐个Put更快 另一个问题是,我正在放置一个非常大的Put对象,这导致作业失败。Put对象的大小似乎有限制。它能有多大?对于批处理put,最好先构造一个put列表,然后调用HTableInterface.put(list put),
另一个问题是,我正在放置一个非常大的Put对象,这导致作业失败。Put对象的大小似乎有限制。它能有多大?对于批处理put,最好先构造一个put列表,然后调用
HTableInterface.put(list put)
,因为它使用单个RPC调用提交批处理,但是,根据列表写入缓冲区的大小,可能会将其全部刷新或不刷新与使用put(列表puts)方法一个RPC请求相比,您肯定会节省多个RPC请求的开销
关于超大Put对象:默认情况下,最大KeyValue大小有10MB的限制。我认为你必须增加它来存储更大的键值对象
hbase.client.keyvalue.maxsize
指定KeyValue实例的组合最大允许大小。这是为存储文件中保存的单个条目设置上限。由于它们不能被分割,这有助于避免由于数据太大而无法进一步分割区域。将其设置为最大区域大小的一小部分似乎是明智的。将其设置为零或更小将禁用检查
默认值:10485760如果键值大小较大,则使用PUT列表可能存在客户端缓冲区大小问题
<property>
<name>hbase.client.write.buffer</name>
<value>20971520</value>
</property>
hbase.client.write.buffer
20971520
默认情况下,客户端收集最多2mb的数据,然后进行刷新。因此,您还必须增加该值put(列表put)
或put(put aPut)
在发动机罩下是相同的。它们都调用doPut(List-put)
重要的是@ozhang提到的缓冲区大小。e、 g.默认值为2MB
<property>
<name>hbase.client.write.buffer</name>
<value>2097152</value>
</property>
hbase.client.write.buffer
2097152
每次写入缓冲区填满并触发
flushCommits()
时,将有1个RPC。因此,如果您的应用程序经常刷新到,因为您的对象相对较大,那么尝试增加写入缓冲区大小将解决问题。请注意,这是不推荐的
p?p?p p?p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p?u u u,t p p p p?u,p p p p p p p p?p p p p p p p,t,t t,t t,t 8222222克克克奈奈奈蒂蒂,p,p p p p p?t,p p p p p p,t,t,p γγγγγγγγγγγγγγγ,p γγγγγγγγγ,对对蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂蒂8.0万万美元的厄克奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈奈t,h,c,a,L,L,d,o,p,u,t(L,i,s,t,p,u,t)
现在有了新的工具。
org.apache.hadoop.hbase.client.AsyncRequestFutureImpl.SingleServerRequestRunnable\run
MultiServerCallable
Callable,处理针对单个regionserver的多方法调用
所以我认为你第一个问题的答案是肯定的
我会在某个时候通过基准测试来验证它。构建一个卖出列表,然后调用
put(list-put)
不会有任何不同put(put aPut)
和put(List put)
在引擎盖下是相同的。它们都使用doPut(List put)
。20971520是20 MiB而不是2 MiB任何人都可以查找put(List)
和put(put)
相同的证据:。请记住将autoFlush
设置为false。默认配置显示的值为2097152,而不是10倍大