- 浏览: 250313 次
- 性别:
文章分类
最新评论
hadoop master web端口 50070
hadoop slave web端口 50075
hbase master web端口 60010 通讯端口 60000
hbase regionserver web端口 60030 通讯端口 60020
hbase rest web端口 8085 通讯端口 8080
hbase thrift web端口 9095 通讯端口 9090
zookeeper 通讯端口 2181
数据迁移
从mysql中导入数据到hbase中,mysql中的每一个变量对应hbase中的一个列
使用importtsv导入(直接导入或者分两步导入)
分两步导入需要completebulkload 命令配合,具体参加《HBase权威指南》12章的介绍
编写自定义的MapReduce来导入数据,实际上importtsv也是用mapreduce来完成导入的
HBase提供了一个TableOutputFormat类,可以在MapReducce任务中奖数据写入到HBase表中
还可以用HFileOutputFormat生成一些HBase内部的HFile格式,然后用completebulkload导入
在导入数据前,可以预创建一些region
./hbase org.apache.hadoop.hbase.util.RegionSplitter
如
.....RegionSplitter -c 10 -f n my_table
-c表示预先创建多少region,-f是列名
使用管理工具
close_region 'regionname' 关闭一个region
move 'encode_regionname' 'hostname' encodename是一个md5码,可以在webUI上查到
如:move '19247542e256f063a714cda044685102','vm11080115,60020,1378462477076'
flush 'table_name' 将存在于memstore中的数据刷新到磁盘中
split 'region_name' 对一个region 进行分割
compact 'test_table' 合并一个表
major_compact 'table_name' 进行主合并
count 'table_name' 统计表行数
在hbase shell中导入需要的java类
import java.util.Date
创建这个类
Date.new(100).toString()
scan中使用过滤器
scan 'table_name',{FILTER=>AAFilter.new(10)}
使用map reduce统计行数
hadoop jar $HBASE_HOME\hbase.jar rowcounter table_name 需要先运行map reduce
hbase hbck检查region的完整性
hbase -fix修改错误的reion
hbase hfile 查看hfile信息
hbase hlog 查看wal日志信息,注意传入的文件size必须是大于0的
维护和安全
webUI界面支持动态调整日志级别
如进入日志界面,设置:
org.apache.hadoop.ipc 为DEBUG级别
也可以通过命令设置
./hadoop daemonlog -getlevel localhost:60010 org.apache.hadoop.hbase
./hadoop daemonlog -setlevel localhost:60010 org.apache.hadoop.hbase INFO
平稳节点停机
./graceful_stop.sh hostname
这个脚本会先关闭负载均衡功能,之后将hostname上的所有region迁移到其他机器上,再关闭这个服务器,最后将zookeeper上对应该服务器的znode删除,这样master就知道该服务器下线了。
为集群添加节点
在备用节点上启动master进程:
./hbase-daemon.sh start master --backup
在master节点的conf/regionservers 文件中增加一个新host的地址
在master节点上启动./start-hbase.sh,它会过滤掉已经启动的server,单独启动新server
或者在新的server上单独启动,./hbase-daemon.sh start regionserver
最后开启负载均衡
./hbase shell
balance_switch true
balancer
滚动重启
hbck检查,重启master节点,禁用负载均衡,优雅的重启region server
使用脚本管理HBase集群的进程(这是通过SSH的方式实现的)
简单化的部署
这是通过rsync实现的
for rs in 'cat $HBASE_HOME/conf/regionservers'
do
echo "deploying to $rs:"
rsync -avz --delete --exclude=log $HBASE_HOME
$rs:$HBASE_HOME
echo
sleep 1
done
echo "done"
还可以通过pupper,Chef管理,apache提供了一个工具
bigtop,用来构建和部署hadoop和hbase
安全机制,主要是通过kerberos实现的
故障排除
Cluster SSH工具可以方便管理小型集群,可以在多台机器执行同一命令
ps命令有一个k选项,可以用来指定结果的排序顺序,用-rss格式说明符(根据内存大小排序)
同时打开文件超过上限,配置hdfs-site.xml
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
处理打开文件过多的错误
vim /etc/security/limits.conf 增加设置
username soft nofile 65535 软限制是操作系统内核强制的可打开的进程数值
username hard nofile 65535 硬限制则是软限制的上限
vim /etc/pam.d/login 增加设置
session required pam_limits.so
使用命令查看ulimit -n
查看当前用户打开了多少文件
lsof -u username | wc -l
无法创建新本地线程错误
vim /etc/security/limits.conf 增加配置
username soft nproc 32000
username hard nproc 32000
vim /etc/pam.d/login 增加配置
session required pam_limits.so
使用命令查看 ulimit -u
查看当前用户进程打开的线程数量
ps -o pid,comm,user,thcount -u root
处理HBase忽略了HDFS的客户端配置问题
HDFS的配置信息在hdfs-site.xml中,若要使HDFS客户端配置对HBase生效,需要增加一个软链接
ln -s $HADOOP_HOME/conf/hdfs-site.xml $HBASE_HOME/conf/hdfs-site.xml
Zookeeper客户端链接错误
java.io.IOException: Connection reset by peer
因为zookeeper限制客户端链接的并发数,每个HBase的region server也相当于一个客户端
修改配置$ZOOKEEPER_HOME/conf/zoo.cfg,从3.4.0开始,这个值已经改成了60
maxClientCnxns=60
查看某一个IP连接到zookeeper的数量
echo "cons" | nc localhost 2181 | grep "IP地址" | wc -l
Zookeeper会话过期错误
KeeperErrorCode = Session expired for /hbase/rs/region_server_name
如果失去了与zookeeper的连接,主服务器或region server会自行关闭
出现这个错误的原因是与zookeeper连接的客户端没有在指定的时间内与zookeeper通讯,
包括master进程和region server进程,可能的原因是:
1.长时间的JVM GC暂停 如果堆配置太大,一次GC可能很长时间完成,也有可能导致超时
2.所配置的时间太短
jstat查看gc信息
vmstat 查看si(换入)和so(换出)的信息
region server需要有足够的cpu资源,map-reduce可能会消耗很多cpu资源,top来查看
调整map-reduce配置
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
加大zookeeper超时时间,配置hbase-site.xml
<name>zookeeper.session.timeout</name>
<value>120000</value> (秒为单位)
加大每个zookeeper仲裁节点的zookeeper会话最大超时时间,配置zoo.cfg文件
maxSessionTimeout=120000
基本性能调整
配置jbod(just a bunch of disks 磁盘簇)
将datanode写入到每个磁盘中,如:
<name>dfs.data.dir</name>
<value>/mnt/d0/dfs/data,/mnt/d1/dfs/data,/mnt/d3/dfs/data</value>
加入机架感知
<name>topology.script.file.name</name>
<value>xx.sh脚本文件路径</value>
以noatime和nodiratime属性方式装载磁盘
sudo vim /etc/fstab
/dev/xvdc /mnt/is1 ext3 defaults,noatime,nodiratime 0 0
卸载磁盘
sudo umount /dev/xvdc
sudo mount /dev/xvdc
最后用mount命令来检查
还可以去掉磁盘百分比检查
sudo tune2fs -m 1 /dev/xvdc
设置vm.swappiness避免换出
下面命令到下一次重启后才生效
sysctl -w vm.swappiness=0
vm.swappiness = 0
下面命令系统每次重启都会设置
echo "vm.swappiness = 0" >> /etc/sysctl.conf
增加GC日志输出
-verbose:gc -XX:+PrintGCDetails -XX:+PringGCTimeStamps -Xloggc:/home/test/gc.log
格式:
<timestamp>:[GC[collector>:<starting occupancy1> -> <ending occupancy1>,
<pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3>
secs] {Times: <user time> <system time>, <real time>]
<timestamp> 是GC发生的时间,这是一个相对于应用程序启动后的时间
<collector> 是次回收所使用回收算法的内部名称
<starting occupancy1> 是回收前年轻代占用空间的大小
<ending occupancy1> 是回收后年轻代占用空间的大小
<pause time1> 是次回收的展厅时间(秒为单位)
<starting occupancy3> 是回收前整个堆占用空间的大小
<ending occupancy3> 是回收后整个堆占用空间的大小
<pause time3> 是整个垃圾回收过程中的暂停时间,这将包括一个主回收的时间
[Time} 解释GC的时间都花在了那些方面,用户时间,系统时间和实际
花费的时间
使用压缩
HBase支持LZO和gzip,LZO速度更快,LZO是gpl协议,需要单独下载
LZO是用本地代码实现的,所以需要下载本地库
次合并(minor compaction)
hdfs上有很多store file,hbase自动合并一些小的store file,重写为一个大的store file
主合并(major compaction)
删除那些过期的cell,并将所有store file重写到一个store file,默认每天一次
主合并对影响很大,关闭:
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
使用脚本的方式管理主合并
echo "major_compaction 'region_name'" | ./hbase shell
也可以通过HBaseAdmin管理
自动分隔
<name>hbase.hregion.max.filesize</name>
<value>number</value>
只有当region的大小超过定义的值时才分隔
类似主合并的方式,也可以通过脚本管理
echo "split 'region_name'" | ./hbase shell
或者通过HBaseAdmin的方式管理
遭遇0.92的版本,可以启动mem store本地分配缓冲区来防止写负载重时的老年代碎片问题
<name>hbase.hregion.memstore.mslab.enabled</name>
<value>true</value>
高级配置和调整
hbase自带的性能测试
./hbase org.apache.hadoop.hbase.PerformanceEvaluation
使用YCSB(yahoo cloud serving benchmark雅虎云服务基准)
测试集群的总体吞吐量(美妙的操作数)
集群的平均延迟时间
最大,最小延迟
操作延迟的分部情况
增加区域服务器的处理线程数
<name>hbase.regionserver.handler.count</name>
<value>num</value>
这是服务端控制RPC监听程序的线程数
使用自定义算法预创建region
避免写秘籍集群中的更新阻塞,调整配置
<name>hbase.hregion.memstore.block.multiplier</name>
<value>num</value>
调整block store file属性:
<name>hbase.hstoreblockingStoreFiles</name>
<value>num</value>
为了防止合并/分隔的时间过长导致内存耗尽的错误
当某一个region的mem store大小达到一定的阀值时,hbase就会阻塞更新,定义为:
hbase.hregion.memstore.flush.size 乘以 hbase.hregion.memstore.block.multiplier
hbase.hregion.memstore.flush.size指定了memstore达到何值时被写入到磁盘中
如果任何一个store的store file超过了hbase.hstore.blockingStroeFiles的值,那么该
region的更新就会被阻塞,直到合并完成,或者超过了
hbase.hstore.blockingWaitTime所指定的时间为止(秒为单位)
调整mem store内存比列大小,下面配置定义了一个region中所有memstroe的占堆的比列
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.45</value>
下面值定义了何时对memstore强制写入磁盘,当memstore占总内存比列低于这个值时停止
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.4</value>
低延迟系统的客户端调节
让客户端在两次重试之间休眠的时间
<name>hbase.client.pause</name>
<value>20</value> (默认为1秒)
最大重试的次数
<name>hbase.client.retries.number</name>
<value>11</value>
两次重试之间的休眠时间可按下面这个公式计算得出
pause_time = hbase.client.pause * RETRY_BACKOFF[retries]
RETRY_BACKOFF是一个重试系数表(使用指数退避算法)
{1,1,1,2,2,4,4,8,16,32}
禁用tcp nodelay算法
<name>hbase.ipc.client.tcpnodelay</name>
<value>true</value>
ping超时时间
<name>ipc.ping.interval</name>
<value>4000</value> (毫秒为单位)
以上这些配置可以通过Configuration定义
配置列簇的块缓存
create 'table1',{NAME=>'f1',IN_MEMORY=>'true'},{NAME=>'f2',BLOCKCACHE=>'false'}
HBase块缓存优先级为:
1.单次存取
2.多次存取
3.内存中存取
单次存取占内存25%
夺取存取占内存50%
内存中内存占内存25%
也可以通过alter命令修改
调高读密集集群的块缓存大小
region server上块缓存的总空间配置为:
<name>hfile.block.cache.size</name>
<value>0.3</value>
memstore 和 块缓存加一起通常会消耗region server堆空间的60%-70%
webUI上可以观察到块相关信息:
blockCacheCount 块数量
blockCacheHitCount 块命中数量
blockCacheMissCount 块未命中数量
blockCacheEvictedCount 块被驱逐数量
blockCacheHitRatio 缓存命中比列,包括setCacheBlocks(false)的
blockCacheHitCachingRatio 普通命中比列,不包括设置了setCacheBlocks(false)的
客户端扫描类设置
一次scan的next()可以读取的行数
<name>hbase.client.scanner.caching</name>
<value>500</value>
防止将扫描类扫描过的块放入缓存中
Scan#setCacheBlocks(false)
也可以通过代码设置,下面表示每次调用next()方法时都会一次读取1000行
Scan#setCaching(1000)
调整块大小来提高寻到性能
通过./hbase hfile来分析hfile的平均key长度和平均value长度
创建表,并设置块缓存(16K),也可以通过alter命令设置
create 'table1',{NAME=>'f1',BLOCKSIZE=>'16384'}
较小的块对于随即存取更快,但是块索引变大,也会消耗更多内存
较大的快对于顺序读取更好
启用Bloom过滤器提高整体吞吐量
HBase的Bloom过滤器是一种用于测试没偶个StoreFile是否包含指定的行或行-列单元格的空间-效率机制
确定某StoreFile是否包含某一行键的唯一办法就是检查该StoreFile的块索引,因为那里存储了该StoreFile的每个块的开始行键,但这样有可能会扫描多个StoreFile的块索引,Bloom过滤器可以做到不用扫描多余的StoreFile
create 'table1',{NAME=>'f1',BLOOMFILTER=>'ROW'},{NAME=>'f2',BLOOMFILTER=>'ROWCOL'}
使用Bloom的目的是:
使HBase能搞笑滴找出一个StroeFile是否包含指定的行或单元格,而无需真正的加载该文件扫描数据块
Bloom可能出现假阳性,也就是某行包含在文件中,但实际上并没有包含
但Bloom不允许出现假阴性,也就是某个不在文件中,那该行就绝不会在该文件中
通常情况下错误率是0.01(由io.storefile.bloo,.error.reate来配置)
使用Bloom过滤器的另一个优点是:
它可以改善块缓存比,在启用Bloom过滤器后,因为无需加载不必要的块,所以那些含有
客户端真正要查询的数据的块留在块缓存中的机会就更大,这就提升了整个集群的性能
如果一行的大多数单元格会在一起更新,那么用行过滤器就更合适
如果要分散更新多列值的话,行列过滤器就更合适
Bloom过滤器中的每个条目都要占用1字节的存储空间,如键值占20字节,那么Bloom过滤器将在文件中占1/20,如果单元格大小为1KB,Bloom过滤器只占文件的1/1000,。
因此在小型单元格中禁用bloom,在大型单元格中一直启用bloom过滤器
hadoop slave web端口 50075
hbase master web端口 60010 通讯端口 60000
hbase regionserver web端口 60030 通讯端口 60020
hbase rest web端口 8085 通讯端口 8080
hbase thrift web端口 9095 通讯端口 9090
zookeeper 通讯端口 2181
数据迁移
从mysql中导入数据到hbase中,mysql中的每一个变量对应hbase中的一个列
使用importtsv导入(直接导入或者分两步导入)
分两步导入需要completebulkload 命令配合,具体参加《HBase权威指南》12章的介绍
编写自定义的MapReduce来导入数据,实际上importtsv也是用mapreduce来完成导入的
HBase提供了一个TableOutputFormat类,可以在MapReducce任务中奖数据写入到HBase表中
还可以用HFileOutputFormat生成一些HBase内部的HFile格式,然后用completebulkload导入
在导入数据前,可以预创建一些region
./hbase org.apache.hadoop.hbase.util.RegionSplitter
如
.....RegionSplitter -c 10 -f n my_table
-c表示预先创建多少region,-f是列名
使用管理工具
close_region 'regionname' 关闭一个region
move 'encode_regionname' 'hostname' encodename是一个md5码,可以在webUI上查到
如:move '19247542e256f063a714cda044685102','vm11080115,60020,1378462477076'
flush 'table_name' 将存在于memstore中的数据刷新到磁盘中
split 'region_name' 对一个region 进行分割
compact 'test_table' 合并一个表
major_compact 'table_name' 进行主合并
count 'table_name' 统计表行数
在hbase shell中导入需要的java类
import java.util.Date
创建这个类
Date.new(100).toString()
scan中使用过滤器
scan 'table_name',{FILTER=>AAFilter.new(10)}
使用map reduce统计行数
hadoop jar $HBASE_HOME\hbase.jar rowcounter table_name 需要先运行map reduce
hbase hbck检查region的完整性
hbase -fix修改错误的reion
hbase hfile 查看hfile信息
hbase hlog 查看wal日志信息,注意传入的文件size必须是大于0的
维护和安全
webUI界面支持动态调整日志级别
如进入日志界面,设置:
org.apache.hadoop.ipc 为DEBUG级别
也可以通过命令设置
./hadoop daemonlog -getlevel localhost:60010 org.apache.hadoop.hbase
./hadoop daemonlog -setlevel localhost:60010 org.apache.hadoop.hbase INFO
平稳节点停机
./graceful_stop.sh hostname
这个脚本会先关闭负载均衡功能,之后将hostname上的所有region迁移到其他机器上,再关闭这个服务器,最后将zookeeper上对应该服务器的znode删除,这样master就知道该服务器下线了。
为集群添加节点
在备用节点上启动master进程:
./hbase-daemon.sh start master --backup
在master节点的conf/regionservers 文件中增加一个新host的地址
在master节点上启动./start-hbase.sh,它会过滤掉已经启动的server,单独启动新server
或者在新的server上单独启动,./hbase-daemon.sh start regionserver
最后开启负载均衡
./hbase shell
balance_switch true
balancer
滚动重启
hbck检查,重启master节点,禁用负载均衡,优雅的重启region server
使用脚本管理HBase集群的进程(这是通过SSH的方式实现的)
简单化的部署
这是通过rsync实现的
for rs in 'cat $HBASE_HOME/conf/regionservers'
do
echo "deploying to $rs:"
rsync -avz --delete --exclude=log $HBASE_HOME
$rs:$HBASE_HOME
echo
sleep 1
done
echo "done"
还可以通过pupper,Chef管理,apache提供了一个工具
bigtop,用来构建和部署hadoop和hbase
安全机制,主要是通过kerberos实现的
故障排除
Cluster SSH工具可以方便管理小型集群,可以在多台机器执行同一命令
ps命令有一个k选项,可以用来指定结果的排序顺序,用-rss格式说明符(根据内存大小排序)
同时打开文件超过上限,配置hdfs-site.xml
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
处理打开文件过多的错误
vim /etc/security/limits.conf 增加设置
username soft nofile 65535 软限制是操作系统内核强制的可打开的进程数值
username hard nofile 65535 硬限制则是软限制的上限
vim /etc/pam.d/login 增加设置
session required pam_limits.so
使用命令查看ulimit -n
查看当前用户打开了多少文件
lsof -u username | wc -l
无法创建新本地线程错误
vim /etc/security/limits.conf 增加配置
username soft nproc 32000
username hard nproc 32000
vim /etc/pam.d/login 增加配置
session required pam_limits.so
使用命令查看 ulimit -u
查看当前用户进程打开的线程数量
ps -o pid,comm,user,thcount -u root
处理HBase忽略了HDFS的客户端配置问题
HDFS的配置信息在hdfs-site.xml中,若要使HDFS客户端配置对HBase生效,需要增加一个软链接
ln -s $HADOOP_HOME/conf/hdfs-site.xml $HBASE_HOME/conf/hdfs-site.xml
Zookeeper客户端链接错误
java.io.IOException: Connection reset by peer
因为zookeeper限制客户端链接的并发数,每个HBase的region server也相当于一个客户端
修改配置$ZOOKEEPER_HOME/conf/zoo.cfg,从3.4.0开始,这个值已经改成了60
maxClientCnxns=60
查看某一个IP连接到zookeeper的数量
echo "cons" | nc localhost 2181 | grep "IP地址" | wc -l
Zookeeper会话过期错误
KeeperErrorCode = Session expired for /hbase/rs/region_server_name
如果失去了与zookeeper的连接,主服务器或region server会自行关闭
出现这个错误的原因是与zookeeper连接的客户端没有在指定的时间内与zookeeper通讯,
包括master进程和region server进程,可能的原因是:
1.长时间的JVM GC暂停 如果堆配置太大,一次GC可能很长时间完成,也有可能导致超时
2.所配置的时间太短
jstat查看gc信息
vmstat 查看si(换入)和so(换出)的信息
region server需要有足够的cpu资源,map-reduce可能会消耗很多cpu资源,top来查看
调整map-reduce配置
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
加大zookeeper超时时间,配置hbase-site.xml
<name>zookeeper.session.timeout</name>
<value>120000</value> (秒为单位)
加大每个zookeeper仲裁节点的zookeeper会话最大超时时间,配置zoo.cfg文件
maxSessionTimeout=120000
基本性能调整
配置jbod(just a bunch of disks 磁盘簇)
将datanode写入到每个磁盘中,如:
<name>dfs.data.dir</name>
<value>/mnt/d0/dfs/data,/mnt/d1/dfs/data,/mnt/d3/dfs/data</value>
加入机架感知
<name>topology.script.file.name</name>
<value>xx.sh脚本文件路径</value>
以noatime和nodiratime属性方式装载磁盘
sudo vim /etc/fstab
/dev/xvdc /mnt/is1 ext3 defaults,noatime,nodiratime 0 0
卸载磁盘
sudo umount /dev/xvdc
sudo mount /dev/xvdc
最后用mount命令来检查
还可以去掉磁盘百分比检查
sudo tune2fs -m 1 /dev/xvdc
设置vm.swappiness避免换出
下面命令到下一次重启后才生效
sysctl -w vm.swappiness=0
vm.swappiness = 0
下面命令系统每次重启都会设置
echo "vm.swappiness = 0" >> /etc/sysctl.conf
增加GC日志输出
-verbose:gc -XX:+PrintGCDetails -XX:+PringGCTimeStamps -Xloggc:/home/test/gc.log
格式:
<timestamp>:[GC[collector>:<starting occupancy1> -> <ending occupancy1>,
<pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3>
secs] {Times: <user time> <system time>, <real time>]
<timestamp> 是GC发生的时间,这是一个相对于应用程序启动后的时间
<collector> 是次回收所使用回收算法的内部名称
<starting occupancy1> 是回收前年轻代占用空间的大小
<ending occupancy1> 是回收后年轻代占用空间的大小
<pause time1> 是次回收的展厅时间(秒为单位)
<starting occupancy3> 是回收前整个堆占用空间的大小
<ending occupancy3> 是回收后整个堆占用空间的大小
<pause time3> 是整个垃圾回收过程中的暂停时间,这将包括一个主回收的时间
[Time} 解释GC的时间都花在了那些方面,用户时间,系统时间和实际
花费的时间
使用压缩
HBase支持LZO和gzip,LZO速度更快,LZO是gpl协议,需要单独下载
LZO是用本地代码实现的,所以需要下载本地库
次合并(minor compaction)
hdfs上有很多store file,hbase自动合并一些小的store file,重写为一个大的store file
主合并(major compaction)
删除那些过期的cell,并将所有store file重写到一个store file,默认每天一次
主合并对影响很大,关闭:
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
使用脚本的方式管理主合并
echo "major_compaction 'region_name'" | ./hbase shell
也可以通过HBaseAdmin管理
自动分隔
<name>hbase.hregion.max.filesize</name>
<value>number</value>
只有当region的大小超过定义的值时才分隔
类似主合并的方式,也可以通过脚本管理
echo "split 'region_name'" | ./hbase shell
或者通过HBaseAdmin的方式管理
遭遇0.92的版本,可以启动mem store本地分配缓冲区来防止写负载重时的老年代碎片问题
<name>hbase.hregion.memstore.mslab.enabled</name>
<value>true</value>
高级配置和调整
hbase自带的性能测试
./hbase org.apache.hadoop.hbase.PerformanceEvaluation
使用YCSB(yahoo cloud serving benchmark雅虎云服务基准)
测试集群的总体吞吐量(美妙的操作数)
集群的平均延迟时间
最大,最小延迟
操作延迟的分部情况
增加区域服务器的处理线程数
<name>hbase.regionserver.handler.count</name>
<value>num</value>
这是服务端控制RPC监听程序的线程数
使用自定义算法预创建region
避免写秘籍集群中的更新阻塞,调整配置
<name>hbase.hregion.memstore.block.multiplier</name>
<value>num</value>
调整block store file属性:
<name>hbase.hstoreblockingStoreFiles</name>
<value>num</value>
为了防止合并/分隔的时间过长导致内存耗尽的错误
当某一个region的mem store大小达到一定的阀值时,hbase就会阻塞更新,定义为:
hbase.hregion.memstore.flush.size 乘以 hbase.hregion.memstore.block.multiplier
hbase.hregion.memstore.flush.size指定了memstore达到何值时被写入到磁盘中
如果任何一个store的store file超过了hbase.hstore.blockingStroeFiles的值,那么该
region的更新就会被阻塞,直到合并完成,或者超过了
hbase.hstore.blockingWaitTime所指定的时间为止(秒为单位)
调整mem store内存比列大小,下面配置定义了一个region中所有memstroe的占堆的比列
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.45</value>
下面值定义了何时对memstore强制写入磁盘,当memstore占总内存比列低于这个值时停止
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.4</value>
低延迟系统的客户端调节
让客户端在两次重试之间休眠的时间
<name>hbase.client.pause</name>
<value>20</value> (默认为1秒)
最大重试的次数
<name>hbase.client.retries.number</name>
<value>11</value>
两次重试之间的休眠时间可按下面这个公式计算得出
pause_time = hbase.client.pause * RETRY_BACKOFF[retries]
RETRY_BACKOFF是一个重试系数表(使用指数退避算法)
{1,1,1,2,2,4,4,8,16,32}
禁用tcp nodelay算法
<name>hbase.ipc.client.tcpnodelay</name>
<value>true</value>
ping超时时间
<name>ipc.ping.interval</name>
<value>4000</value> (毫秒为单位)
以上这些配置可以通过Configuration定义
配置列簇的块缓存
create 'table1',{NAME=>'f1',IN_MEMORY=>'true'},{NAME=>'f2',BLOCKCACHE=>'false'}
HBase块缓存优先级为:
1.单次存取
2.多次存取
3.内存中存取
单次存取占内存25%
夺取存取占内存50%
内存中内存占内存25%
也可以通过alter命令修改
调高读密集集群的块缓存大小
region server上块缓存的总空间配置为:
<name>hfile.block.cache.size</name>
<value>0.3</value>
memstore 和 块缓存加一起通常会消耗region server堆空间的60%-70%
webUI上可以观察到块相关信息:
blockCacheCount 块数量
blockCacheHitCount 块命中数量
blockCacheMissCount 块未命中数量
blockCacheEvictedCount 块被驱逐数量
blockCacheHitRatio 缓存命中比列,包括setCacheBlocks(false)的
blockCacheHitCachingRatio 普通命中比列,不包括设置了setCacheBlocks(false)的
客户端扫描类设置
一次scan的next()可以读取的行数
<name>hbase.client.scanner.caching</name>
<value>500</value>
防止将扫描类扫描过的块放入缓存中
Scan#setCacheBlocks(false)
也可以通过代码设置,下面表示每次调用next()方法时都会一次读取1000行
Scan#setCaching(1000)
调整块大小来提高寻到性能
通过./hbase hfile来分析hfile的平均key长度和平均value长度
创建表,并设置块缓存(16K),也可以通过alter命令设置
create 'table1',{NAME=>'f1',BLOCKSIZE=>'16384'}
较小的块对于随即存取更快,但是块索引变大,也会消耗更多内存
较大的快对于顺序读取更好
启用Bloom过滤器提高整体吞吐量
HBase的Bloom过滤器是一种用于测试没偶个StoreFile是否包含指定的行或行-列单元格的空间-效率机制
确定某StoreFile是否包含某一行键的唯一办法就是检查该StoreFile的块索引,因为那里存储了该StoreFile的每个块的开始行键,但这样有可能会扫描多个StoreFile的块索引,Bloom过滤器可以做到不用扫描多余的StoreFile
create 'table1',{NAME=>'f1',BLOOMFILTER=>'ROW'},{NAME=>'f2',BLOOMFILTER=>'ROWCOL'}
使用Bloom的目的是:
使HBase能搞笑滴找出一个StroeFile是否包含指定的行或单元格,而无需真正的加载该文件扫描数据块
Bloom可能出现假阳性,也就是某行包含在文件中,但实际上并没有包含
但Bloom不允许出现假阴性,也就是某个不在文件中,那该行就绝不会在该文件中
通常情况下错误率是0.01(由io.storefile.bloo,.error.reate来配置)
使用Bloom过滤器的另一个优点是:
它可以改善块缓存比,在启用Bloom过滤器后,因为无需加载不必要的块,所以那些含有
客户端真正要查询的数据的块留在块缓存中的机会就更大,这就提升了整个集群的性能
如果一行的大多数单元格会在一起更新,那么用行过滤器就更合适
如果要分散更新多列值的话,行列过滤器就更合适
Bloom过滤器中的每个条目都要占用1字节的存储空间,如键值占20字节,那么Bloom过滤器将在文件中占1/20,如果单元格大小为1KB,Bloom过滤器只占文件的1/1000,。
因此在小型单元格中禁用bloom,在大型单元格中一直启用bloom过滤器
发表评论
-
Hadoop技术内幕 深入解析MapReduce架构设计与实现原理
2017-05-03 15:14 853Hadoop的一些重大改进 1.append,HD ... -
MySql Innodb存储引擎--表
2017-04-27 11:26 413表,页,段,记录 页的格式分析 ... -
MySql Innodb存储引擎--备份和优化
2017-04-24 17:07 797备份的目的 做灾难恢复:对损坏的数据进行恢复和还原 ... -
MySql Innodb存储引擎--锁和事务
2017-04-21 17:20 909lock和latch的比较 ... -
MySql Innodb存储引擎--文件和索引
2017-03-27 18:03 408MySql架构图 M ... -
MySql Innodb存储引擎--架构和引擎介绍
2017-03-23 10:40 656Mysql架构图 1 Con ... -
计算机程序的构造和解释
2017-02-15 18:02 542创建一个有理数 (define (ma ... -
破坏之王
2016-03-30 21:44 347不同阶段DDos攻击事件的特点 时期 ... -
UNIX网络编程 广播
2015-12-09 13:29 0........ -
UNIX网络编程 密钥管理套接字
2015-12-09 13:28 580... -
UNIX网络编程 路由套接字
2015-12-09 13:27 604.. -
UNIX网络编程 ioctl操作
2015-12-09 13:25 777.............. -
UNIX网络编程 非阻塞式I/O
2015-12-09 13:25 629....... -
UNIX网络编程 高级IO函数
2015-12-02 15:13 604套接字超时 在设计套接字的IO操作上设置超时的方法 ... -
UNIX网络编程 守护进程和inetd超级服务器
2015-11-24 20:37 542守护进程(daemon)是在后台运行且不与任何控制终 ... -
UNIX网络编程 名字与地址转换
2015-11-24 20:12 568...... ........ -
UNIX网络编程 基本UDP套接字编程
2015-11-24 20:05 1049..... ......... -
UNIX网络编程 套接字选项
2015-11-17 12:38 1423影响套接字选项的函数 getsockop 和 se ... -
UNIX网络编程 I/O复用 select和poll函数
2015-11-17 12:14 468................ -
UNIX网络编程 TCP客户/服务器程序示例
2015-11-17 12:13 474...............
相关推荐
通过Veritas NetBackup 8.3.0.1 for HBase管理指南,用户可以深入理解如何有效地保护和管理HBase环境中的数据,确保业务的稳定运行,并在必要时迅速恢复服务。同时,Veritas Services and Operations Readiness ...
《HBase权威指南》是一本深入探讨分布式大数据存储系统HBase的专业书籍,其源代码的提供为读者提供了更直观的学习材料。HBase是基于Apache Hadoop的非关系型数据库(NoSQL),它在大规模数据存储方面表现卓越,尤其...
### HBase权威指南知识点概述 #### 一、引言与背景 - **大数据时代的来临**:随着互联网技术的发展,人类社会产生了前所未为的数据量。这些数据不仅数量巨大,而且种类繁多,传统的数据库系统难以应对这样的挑战。 ...
《HBase权威指南》是HBase领域的经典著作,旨在深入解析这款分布式大数据存储系统的方方面面。随书提供的源代码是理解书中理论与实践结合的关键。在本文中,我们将围绕HBase的核心概念、架构以及如何通过源代码学习...
《HBase权威指南》是一本深入探讨Apache HBase这一分布式列式数据库的著作,源码则是作者为了辅助读者理解书中理论知识而提供的实践材料。HBase是构建在Hadoop文件系统(HDFS)之上的开源数据库,专为处理大规模数据...
《HBase权威指南》是Hadoop生态中关于分布式列式数据库HBase的重要参考资料,它深入浅出地介绍了如何利用HBase构建大规模数据存储系统。这本书与《Hadoop权威指南》一起,构成了理解大数据处理和存储的关键知识体系...
《HBase权威指南》是一本深入探讨分布式列式数据库HBase的专业书籍,其配套源码提供了书中所提及的示例代码和实践案例,方便读者更好地理解和应用HBase。以下将详细解析HBase的相关知识点。 HBase是建立在Apache ...
《HBase权威指南中文版》是一本深入探讨大数据领域中分布式数据库HBase的专著。这本书旨在帮助读者理解和掌握如何有效地使用HBase处理大规模数据存储和检索问题。HBase是建立在Apache Hadoop之上,一个面向列的、...
HBase的表设计策略是学习的重点之一,书中的内容可能涵盖如何选择合适的行键和列族,以及如何利用时间戳来管理版本化数据。此外,还会有关于数据分布和负载均衡的策略,以确保数据的均匀分布和系统性能。 监控和...
VERITAS NetBackup 8.1.2 中文 HBase 管理指南 VERITAS NetBackup 8.1.2 中文 HBase 管理指南是 VERITAS Technologies LLC 为 UNIX、Windows 和 Linux 版本 8.1.2 提供的 HBase 管理指南。本指南旨在帮助用户了解...
接着,书中深入讨论了HBase的部署与管理,包括集群配置、区域服务器的分配、故障恢复机制等。读者将了解到如何规划和调整HBase集群以适应不同的工作负载,并掌握监控和调优的方法。 在操作和使用HBase方面,书中...
总的来说,《HBase权威指南》为数据库管理员和开发者提供了一套全面的HBase学习资料,从基础的数据模型到集群的监控、性能优化和实际业务场景应用,全方位地介绍了HBase的特性和最佳实践。对于那些希望通过HBase构建...
《HBase编程指南》是深入理解与掌握HBase这一分布式数据库系统的关键资源,尤其对于那些在云计算领域寻求专业技能提升的IT专业人士来说,它提供了一套全面而细致的学习材料。以下是从该指南中提炼出的核心知识点,...
- **HBase工具与实用程序**:列举常用的HBase管理工具。 - **Region管理**:介绍Region管理的相关知识。 以上内容为《HBase权威指南》中文版中的核心知识点梳理,涵盖了从HBase的基础概念到高级应用的各个方面,...
《HBase权威指南》是大数据领域的一本经典著作,它深入浅出地介绍了HBase这一分布式列存储系统。HBase是构建在Hadoop生态系统之上的,用于处理大规模数据的NoSQL数据库,尤其适合实时读写操作。这本书的示例代码提供...