大数据高可用集群环境安装与配置(07)——安装HBase高可用集群
1. 下载安装包
登录官网获取HBase安装包下载地址 https://hbase.apache.org/downloads.html
2. 执行命令下载并安装
cd /usr/local/src/ wget http://archive.apache.org/dist/hbase/2.0.0/hbase-2.0.0-bin.tar.gz tar -zxvf hbase-2.0.0-bin.tar.gz mv hbase-2.0.0 /usr/local/hbase/
PS:Phoenix5.0只支持HBase2.0版本,HBase即使用了更高一点的小版本,在创建二级索引时也会出现异常。当然不使用二级索引的话,2.1.8版也可以正常使用
3. 修改服务器系统环境变量
所有服务器都需要按要求修改配置
vi /etc/profile
在尾部添加下面配置(内存设置需要根据实际情况进行调整)
export JAVA_HOME=/usr/local/java/jdk export HBASE_MANAGES_ZK=false export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx3g -Xms3g -Xmn256m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:-CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80" export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx5g -Xms5g -Xmn256m -XX:+HeapDumpOnOutOfMemoryError -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80 -Xloggc:/data/logs/hbase/gc-$(hostname)-`date +'%Y%m%d'`.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:SurvivorRatio=2 -XX:+PrintTenuringDistribution"
保存退出后,运行命令,让配置马上生效
source /etc/profile
4. 配置HBase的Java安装路径
vi /usr/local/hbase/conf/hbase-env.sh
在尾部添加下面配置
export JAVA_HOME=/usr/local/java/jdk export HBASE_MANAGES_ZK=false
5. 配置hbase-site.xml
官方文档配置说明:https://hbase.apache.org/book.html
vi /usr/local/hbase/conf/hbase-site.xml
在配置中添加下面代码
<configuration> <!-- hbase在hadoop的HDFS中的存储路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://nameservice/hbase</value> </property> <!-- 设置zookeeper集群地址 --> <property> <name>hbase.zookeeper.quorum</name> <value>master,master-backup</value> </property> <!-- 设置zookeeper的数据存放目录 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/zookeeper</value> </property> <!-- 是否开启完全分布式配置 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管 --> <property> <name>zookeeper.session.timeout</name> <value>240000</value> </property> <!-- 设置regionserver节点故障自动重启恢复 --> <property> <name>hbase.regionserver.restart.on.zk.expire</name> <value>true</value> <description> Zookeeper sessionexpired will force regionserver exit. Enable this will makethe regionserver restart. </description> </property> <!-- Client端与zk发送心跳的时间间隔 --> <property> <name>hbase.zookeeper.property.tickTime</name> <value>6000</value> </property> <!-- 在当前ReigonServer上单个Reigon的最大存储空间,单个Region超过该值时,这个Region会被自动split成更小的region --> <property> <name>hbase.hregion.max.filesize</name> <value>5368709120</value> </property> <!-- 在flush时,当一个region中的Store(Coulmn Family)内有超过7个storefile时,则block所有的写请求进行compaction,以减少storefile数量。 --> <property> <name>hbase.hstore.blockingStoreFiles</name> <value>30</value> </property> <!-- block的等待时间 --> <property> <name>hbase.hstore.blockingWaitTime</name> <value>90000</value> </property> <!-- 减少因内存碎片导致的Full GC,提高整体性能 --> <property> <name>hbase.hregion.memstore.mslab.enabled</name> <value>true</value> </property> <!-- memstore大小,当达到该值则会flush到外存设备 --> <property> <name>hbase.hregion.memstore.flush.size</name> <value>268435456</value> </property> <!-- 强制刷新之前,RegionServer中所有memstore的最大大小(默认值为:hbase.regionserver.global.memstore.size 的95%),当由于内存限制而导致更新被阻塞时,系统会以尽可能小的刷新量刷新数据,此值中的默认值特意设置为空,以遵守旧的 hbase.regionserver.global.memstore.lowerLimit 属性 --> <property> <name>hbase.regionserver.global.memstore.size.lower.limit</name> <value>0.36</value> </property> <!-- hbase.hregion.memstore.flush.size 这个参数的作用是当单个Region内所有的memstore大小总和超过指定值时,flush该region的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。这个参数的作用是防止内存占用过大,当ReigonServer内所有region的memstores所占用内存总和达到heap的40%时,HBase会强制block所有的更新并flush这些region以释放所有memstore占用的内存。 --> <property> <name>hbase.regionserver.global.memstore.upperLimit</name> <value>0.4</value> </property> <!-- 堆内存占比设置,需要注意调的过高也很容易引发OOM --> <property> <name>hfile.block.cache.size</name> <value>0.3</value> </property> <!-- 当一个region里的memstore占用内存大小超过hbase.hregion.memstore.flush.size两倍的大小时,block该region的所有请求,进行flush,释放内存。虽然我们设置了region所占用的memstores总内存大小,比如64M,但想象一下,在最后63.9M的时候,我Put了一个200M的数据,此时memstore的大小会瞬间暴涨到超过预期的hbase.hregion.memstore.flush.size的几倍。这个参数的作用是当memstore的大小增至超过hbase.hregion.memstore.flush.size 2倍时,block所有请求,遏制风险进一步扩大 --> <property> <name>hbase.hregion.memstore.block.multiplier:</name> <value>2</value> </property> <!-- RegionServer的请求处理IO线程数 --> <property> <name>hbase.regionserver.handler.count</name> <value>100</value> </property> <!-- 每次获取行锁的超时时间,默认为30s --> <property> <name>hbase.rowlock.wait.duration</name> <value>90000</value> </property> <!-- rpc超时时间 --> <property> <name>hbase.rpc.timeout</name> <value>900000</value> </property> <!-- 客户端每次scan|get的超时时间 --> <property> <name>hbase.client.scanner.timeout.period</name> <value>900000</value> </property> <!-- 客户端每次scan的一个next,获得多少行,默认1 --> <property> <name>hbase.client.scanner.caching</name> <value>1000</value> </property> <!-- RegionServer端开启的RPC监听器实例个数,也即RegionServer能够处理的IO请求线程数(处理场景消耗内存要求不同配置值需要做出相应调整,单次请求内存消耗高或内存比较紧张的场景,设置相对要小一些) --> <property> <name>hbase.regionserver.handler.count</name> <value>150</value> </property> <!-- 最小thrift工作线程 --> <property> <name>hbase.thrift.minWorkerThreads</name> <value>1000</value> </property> <property> <name>hbase.thrift.maxWorkerThreads</name> <value>10000</value> </property> <!-- thrift查询超时时间(如果有需要直接使用thrift查询大批量数据,需要调大这个配置) --> <property> <name>hbase.thrift.server.socket.read.timeout</name> <value>3000000</value> <description>eg:milisecond</description> </property> <property> <name>hbase.regionserver.thrift.maxreadlength</name> <value>0</value> <description>0:not check data length</description> </property> </configuration>
6.设置HBase日志配置
vi /usr/local/hbase/conf/log4j.properties
修改下面配置(HBase长期运行日志会增涨的很快,实际上出现问题时都会及时查看,所以只需要保留5个备份就够了)
hbase.log.maxfilesize=100MB hbase.log.maxbackupindex=5
7. 配置节点服务器地址
vi /usr/local/hbase/conf/regionservers
修改为下面配置
node1
node2
node3
8. 复制hdfs-site.xml到HBase的配置路径下
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf/
9. 创建backup-masters
echo 'master-backup' > /usr/local/hbase/conf/backup-masters
10. 配置Phoenix方式访问hbase
cd /usr/local/src/ wget http://www.apache.org/dyn/closer.lua/phoenix/apache-phoenix-5.0.0-HBase-2.0/bin/apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz mv apache-phoenix-5.0.0-HBase-2.0-bin /usr/local/phoenix cd /usr/local/phoenix # 复制phoenix服务插件到hbase目录下 cp phoenix-5.0.0-HBase-2.0-server.jar /usr/local/hbase/lib/ cp phoenix-core-5.0.0-HBase-2.0.jar /usr/local/hbase/lib/ cp phoenix-5.0.0-HBase-2.0-queryserver.jar /usr/local/hbase/lib/ # 修改phoneix配置 vi /usr/local/phoenix/bin/hbase-site.xml
# 在配置中添加下面内容 <!-- 开启phoenix命名空间配置 --> <property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property> <!-- phoenix二级索引配置 --> <property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property> <property> <name>hbase.region.server.rpc.scheduler.factory.class</name> <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property> <property> <name>hbase.rpc.controllerfactory.class</name> <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property>
11.将hbase同步到其他服务器
rsync -avz /usr/local/hbase/ master-backup:/usr/local/hbase/ rsync -avz /usr/local/hbase/ node1:/usr/local/hbase/ rsync -avz /usr/local/hbase/ node2:/usr/local/hbase/ rsync -avz /usr/local/hbase/ node3:/usr/local/hbase/
12.配置Phoenix主节点
在master和master-backup节点的hbase-site.xml添加下面配置
vi /usr/local/hbase/conf/hbase-site.xml
在配置中添加下面代码
<property> <name>hbase.master.loadbalancer.class</name> <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value> </property> <property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value> </property>
13. 让hbase支持LZ4压缩,减少磁盘空间的占用
每台服务器都运行下面代码,安装lz4
yum install lz4 yum install lz4-devel -y mkdir /usr/local/hbase/lib/native ln -s /usr/local/hadoop/lib/native /usr/local/hbase/lib/native/Linux-amd64-64
14. 启动服务
在master服务器启动HBase服务
/usr/local/hbase/bin/start-hbase.sh
关闭服务
/usr/local/hbase/bin/stop-hbase.sh
15. 检查服务是否已正常启动
在master与master-backup中输入
jps
如果显示下面服务,则表示服务已正常启动
4669 HMaster
在各个node节点服务器中输入jps,检查是否已运行下面服务
11224 HRegionServer
打开浏览器,检查hbase是否启动成功
- master
http://192.168.10.90:16010/master-status
- backup-master
http://192.168.10.91:16010/master-status
版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
作者博客:http://www.cnblogs.com/EmptyFS/
只有将自己置空,才能装进更多的东西!我是陈焕,资深IT码农,爱分享爱学习,一位奔跑在求知路上的践行者。