HBase中应该如何合理设置客户端Write Buffer

HBase客户端API提供了Write Buffer的方式,即批量提交一批Put对象到HBase服务端。本文将结合HBase相关源码,对其进行深入介绍,分析如何在实际项目中合理设置和使用它。 1. 什么时候需要Write Buffer?

默认情况下,一次Put操作即要与Region Server执行一次RPC操作,其执行过程可以被拆分为以下三个部分:

T1:RTT(Round-Trip Time),即网络往返时延,它指从客户端发送数据开始,到客户端收到来自服务端的确认,总共经历的时延,不包括数据传输的时间;

T2:数据传输时间,即Put所操作的数据在客户端与服务端之间传输所消耗的时间开销,当数据量大的时候,T2的时间开销不容忽略;    T3:服务端处理时间,对于Put操作,即写入WAL日志(如果设置了WAL标识为true)、更新MemStore等。

其中,T2和T3都是不可避免的时间开销,那么能不能减少T1呢?假设我们将多次Put操作打包起来一次性提交到服务端,则可以将T1部分的总时间从T1 * N降低为T1,其中T1指的是单次RTT时间,N为Put的记录条数。

正是出于上述考虑,HBase为用户提供了客户端缓存批量提交的方式(即Write Buffer)。假设RTT的时间较长,如1ms,则该种方式能够显著提高整个集群的写入性能。

那么,什么场景下适用于该种模式呢?下面简单分析一下:

如果Put提交的是小数据(如KB级别甚至更小)记录,那么T2很小,因此,通过该种模式减少T1的开销,能够明显提高写入性能。    如果Put提交的是大数据(如MB级别)记录,那么T2可能已经远大于T1,此时T1与T2相比可以被忽略,因此,使用该种模式并不能得到很好的性能提升,不建议通过增大Write Buffer大小来使用该种模式。

2. 如何配置使用Write Buffer?

如果要启动Write Buffer模式,则调用HTable的以下API将auto flush设置为false:

void setAutoFlush(boolean autoFlush)

默认配置下,Write Buffer大小为2MB,可以根据应用实际情况,通过以下任意方式进行自定义:

1)调用HTable接口设置,仅对该HTable对象起作用:

void setWriteBufferSize(long writeBufferSize) throws IOException

2)在hbase-site.xml中配置,所有HTable都生效(下面设置为5MB):

<property> <name>hbase.client.write.buffer</name> <value>5242880</value> </property>

该种模式下向服务端提交的时机分为显式和隐式两种情况:

1)显式提交:用户调用flushCommits()进行提交;

2)隐式提交:当Write Buffer满了,客户端会自动执行提交;或者调用了HTable的close()方法时无条件执行提交操作。

3. 如何确定每次flushCommits()时实际的RPC次数?

客户端提交后,所有的Put操作可能涉及不同的行,然后客户端负责将这些Put对象根据row key按照 region server分组,再按region server打包后提交到region server,每个region server做一次RPC请求。如下图所示:

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/extra/

时间: 2024-09-28 16:11:36

HBase中应该如何合理设置客户端Write Buffer的相关文章

HBase中的一些注意事项

1. 安装集群前 配置SSH无密码登陆 DNS.HBase使用本地 hostname 才获得IP地址,正反向的DNS都是可以的.你还可以设置 hbase.regionserver.dns.interface 来指定主接口,设置hbase.regionserver.dns.nameserver 来指定nameserver,而不使用系统带的 安装NTP服务,并配置和检查crontab是否生效 操作系统调优,包括最大文件句柄,nproc hard 和 soft limits等等 conf/hdfs-s

IDH HBase中实现的一些特性

IDH为Intel's Distribution of Hadoop的简称,中文为英特尔Hadoop发行版,目前应该没有人在维护该产品了.这里简单介绍一下IDH HBase中实现的一些特性. 以下部分内容摘自IDH官方的一些文档,部分内容来自我的整理: 1. 单调数据的加盐处理 对于写入的rowkey是基本单调的(例如时序数据),IDH引入了一个新的接口:SaltedTableInterface 提高近乎透明的"加盐",方便使用 封装了get.scan.put.delete等操作 2.

ZooKeeper原理及其在Hadoop和HBase中的应用

ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁和分布式队列等功能. 简介 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁

HBase的scan源码分析客户端部分之整体流程(一)

        scan的调用代码示例如下: // 创建HBase配置config Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "192.168.1.226");// zookeeper部署的服务器IP config.set("hbase.zookeeper.property.clientPort", "

jquery-用JS如何取到,input中由session对象设置的id

问题描述 用JS如何取到,input中由session对象设置的id 用JS能取到这样的id吗 <input id=""${questionNaireQuestion.serialnumber}2"" name=""${questionNaireQuestion.serialnumber}"" type=""checkbox"" value=""${questi

如何在 Ubuntu 中更改默认浏览器和 Email 客户端

Ubuntu 自带了一些已经预装的默认应用程序,包括非常流行的 Mozilla 火狐浏览器和 Thunderbird 的 e-mail 客户端. 尽管这两个应用都有它们自己的粉丝,但是没有一个应用能符合每个人的口味和需要.我们经常收到邮件或者推文,询问我们可以怎样在 Ubuntu 上更改默认浏览器或者设置处理邮件链接为不同的电子邮件客户端等. 我们在这里不仅讨论如何安装不同的软件,还包括如何给一个特定的文件,链接或者内容类型设置其系统处理应用. 在 Ubuntu 中更改默认应用程序,包括浏览器.

采用MapReduce作业如何在HBase中加载大数据 - 产品和技术

采用MapReduce作业如何在http://www.aliyun.com/zixun/aggregation/13713.html">HBase中加载大数据 发布时间:2012.04.16 14:51      来源:博客     作者:博客 一.概述 HBase有很多种方法将数据加载到表中,最简单直接的方法就是通过MapReduce调用TableOutputFormat方法,或者在client上调用API写入数据.但是,这都不是最有效的方式. 这篇文档将向你描述如何在HBase中加载大

浏览器缓存-在 HTTP 标头中为静态资源设置过期日期或最长存在时间

问题描述 在 HTTP 标头中为静态资源设置过期日期或最长存在时间 用gogole的优化工具检测出 "在 HTTP 标头中为静态资源设置过期日期或最长存在时间,可指示浏览器从本地磁盘中加载以前下载的资源,而不是通过网络加载." 请问需要在IIS怎么配置,求详细步骤. 平台是 windows2008+iis7.5 解决方案 Image and Flash content Caching for One Month Header set Cache-Control "max-ag

Hive整合HBase:通过Hive读/写 HBase中的表

写在前面一: 本文将Hive与HBase整合在一起,使Hive可以读取HBase中的数据,让Hadoop生态系统中最为常用的两大框架互相结合,相得益彰. 写在前面二: 使用软件说明 约定所有软件的存放目录: /home/yujianxin 一.Hive整合HBase原理 Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler-0.9.0.jar工具类,如下图 Hive与HBase通信示意图 二.具体步骤 安装前说明 1.关