- Hbase 总体架构
Hbase 总体架构图如下图
HMaster作用
1. 管理HRegionServer,实现其负载均衡。
2. 管理和分配HRegion,比如在HRegion split 时分配新的HRegion;在HRegionServer 退出时迁移其内的
HRegion 到其他HRegionServer 上。
3. 实现DDL 操作(Data Definition Language,namespace 和table 的增删改,column familiy 的增删改等)。
4. 管理namespace 和table 的元数据(实际存储在HDFS 上)。
5. 权限控制(ACL)。
HRegionServer作用
1. 存放和管理本地HRegion。
2. 读写HDFS,管理Table 中的数据。
3. Client 直接通过HRegionServer 读写数据(从HMaster 中获取元数据, 找到RowKey 所在的HRe-
gion/HRegionServer 后)
ZooKeeper
1. 存放整个HBase 集群的元数据以及集群的状态信息。
2. 实现HMaster 主从节点的failover。
操作系统部分
ulimit 调整
登录操作系统后用当前用户执行如下命令
[hadoop@10 root]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15209
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 300001
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 15209
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
其中ulimit 参数说明如下
-H 设置硬资源限制,一旦设置不能增加。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
-a 显示当前所有的limit 信息。
-c 最大的core 文件的大小, 以blocks 为单位。
-d 进程最大的数据段的大小,以Kbytes 为单位。
-f 进程可以创建文件的最大值,以blocks 为单位。
-l 最大可加锁内存大小,以Kbytes 为单位。
-m 最大内存大小,以Kbytes 为单位。
-n Linux 操作系统对一个进程可以打开最大文件描述符的数量。
-p 管道缓冲区的大小,以Kbytes 为单位。
-s 线程栈大小,以Kbytes 为单位。
-t 最大的CPU 占用时间,以秒为单位。
-u 用户最大可用的进程数。
-v 进程最大可用的虚拟内存,以Kbytes 为单位。
本教程以hadoop 为例,根据自己的实际情况调整ulimit 限制
liunx 内核网络参数调整
在linux 中所有的TCP/IP 参数都位于/proc/sys/net 目录下(请注意,对/proc/sys/net 目录下内容的修改都是临
时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数:
/etc/sysctl.conf 是一个允许你改变正在运行中的Linux 系统的接口。它包含一些TCP/IP 堆栈和虚拟内存系统
的高级选项,可用来控制Linux 网络配置,由于/proc/sys/net 目录内容的临时性,建议把TCPIP 参数的修改添加
到/etc/sysctl.conf 文件, 然后保存文件,使用命令“/sbin/sysctl –p”使之立即生效,样例参数
net.core.rmem_default = 256960
net.core.rmem_max = 513920
net.core.wmem_default = 256960
net.core.wmem_max = 513920
net.core.netdev_max_backlog = 2000
net.core.somaxconn = 2048
net.core.optmem_max = 81920
net.ipv4.tcp_mem = 131072 262144 524288
net.ipv4.tcp_rmem = 8760 256960 4088000
net.ipv4.tcp_wmem = 8760 256960 4088000
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65000
HDFS 参数优化
Hbase 参数优化
RPC 参数优化
hbase.regionserver.handler.count RPC 处理线程数 默认值为30
Memstore 参数优化
bucketcache
打开Hbase 的堆外cache 需要做如下操作, 在hbase-site.xml 中添加如下内容
<property>
<name>hbase.block.data.cachecompressed</name>
<value>true</value>
</property>
<property>
<name>hbase.bucketcache.combinedcache.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.bucketcache.ioengine</name>
<value>offheap</value>
</property>
<property>
<name>hbase.bucketcache.percentage.in.combinedcache</name>
<value>0.8984</value>
</property>
<property>
<name>hbase.bucketcache.size</name>
<value>8192</value>
</property>
注意事项如下:
• 参数hbase.bucketcache.size 单位为MB
• 同时需要在JVM 参数中加入-XX:MaxDirectMemorySize=10240m
• hbase.bucketcache.size 设置要略小于MaxDirectMemorySize
Hbase 内存管理为堆内存的80% 一半给memstore 使用一半给blockcache 使用,通过如下两个参数进行控制:
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
如果您开启了堆外内存作为bucketcache 使用那么可以适当提高hbase.regionserver.global.memstore.size 而降低
hfile.block.cache.size
JVM 优化
JVM 建议使用JDK7 版本的JDK,如果堆内存小于4G 建议使用CMSGC,如果大于4G 建议使用G1 垃圾回收