节点 | 角色 |
---|---|
node1 | HMaster, HRegionServer |
node2 | HMaster, HRegionServer |
node3 | HMaster, HRegionServer |
下列配置以三台服务器组成hbase高可用集群为例, 实际生产环境中管理节点和工作节点应尽量分离, master在小型集群(几十台以内)中有3台即可, 大型集群配置5台管理节点
解压文件夹
tar zxvf hbase-2.3.7-bin.tar.gz -C /opt/
配置
cd /opt/hbase-2.3.7/conf
vim hbase-env.sh
# 堆外内存大小,用来缓存数据
HBASE_OFFHEAPSIZE=32G
# 确定本机的jdk实际路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
# 不使用hbase内置的zookeeper
export HBASE_MANAGES_ZK=false
# hadoop配置文件路径
export HBASE_CLASSPATH=/opt/hadoop-3.1.3/etc/hadoop/
# hmaster堆内存大小
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx8g"
# regionserver堆内存大小, MaxDirectMemorySize要大于等于HBASE_OFFHEAPSIZE, 老年代占比0.7开始回收
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:CMSInitiatingOccupancyFraction=70 -Xms30g -Xmx30g -XX:MaxDirectMemorySize=32g"
hbase内存使用要根据实际硬件衡量修改, 上述配置需要 8 + 32 + 30 = 70g内存, 保证实际可用物理内存不能低于该值, 若硬件资源不足, 可以考虑先调小堆外用来缓存实际数据的内存(HBASE_OFFHEAPSIZE和-XX:MaxDirectMemorySize), 再调小堆内存
vim hbase-site.xml
<configuration>
<!-- 开启分布式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- zookeeper集群 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>180000</value>
<description>hbase和zookeeper连接的超时时间, 需要zookeeper配置zoo.cnf中的maxSessionTimeout大于等于该值时才会生效, 否则仍然以zookeeper中的事件为准</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hdfscluster/hbase</value>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
<description>单个region的大小, 超过该值将split成2个</description>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>100</value>
<description>regionserver监听rpc的线程数</description>
</property>
<property>
<name>hbase.bucketcache.ioengine</name>
<value>offheap</value>
<description>BucketCache使用堆外内存,缓存data block</description>
</property>
<!-- 此值不能大于hbase-env.sh中的HBASE_OFFHEAPSIZE, 单位mb-->
<property>
<name>hbase.bucketcache.size</name>
<value>30720</value>
<description>bucketcache使用堆外内存大小</description>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.40</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.40</value>
</property>
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>128</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>16</value>
</property>
<property>
<name>hbase.hstore.blockingwaittime</name>
<value>30000</value>
</property>
<property>
<name>hbase.hstore.flusher.count</name>
<value>4</value>
</property>
<property>
<name>hbase.regionserver.max.logs</name>
<value>160</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>multiwal</value>
<description>一个regionserver一个wal,更改为一个region一个wal</description>
</property>
</configuration>
vim backup-masters
此文件conf目录中没有, 需要新建
node1
node2
node3
vim regionservers
node1
node2
node3
分发到其他节点
scp -r hbase-2.3.7 node2:$PWD
scp -r hbase-2.3.7 node2:$PWD
添加hadoop库软连接
由于hbase安装包中并不含有LZ4压缩所需的依赖库, 所以将hadoop中内置的依赖软连接到hbase, 这样hbase创建表时即可使用LZ4压缩
cd /opt/hbase-2.3.7/lib && mkdir native && ln -s ${HADOOP_HOME}/lib/native native/Linux-amd64-64
启动集群
/opt/hbase-2.3.7/bin/start-hbase.sh
查看状态
jps查看进程
web页面查看 http://node1:16010
进入控制台: /opt/hbase-2.3.7/bin/hbase shell
停止集群: stop-hbase.sh