首页 > 代码库 > 读书笔记-HBase in Action-第四部分-(1)部署
读书笔记-HBase in Action-第四部分-(1)部署
最后一部分了。。。分两章吧。HBase和Hadoop紧密相关,更为具体的部署和运维内容推荐Hadoop Operations和HBase Administration Cookbook。本文粗粒度列出一些HBase部署运维的最佳实践和基本原则。
集群规划
一个完整的HBase集群包含HBase Master,ZooKeeper,RegionServers和Hadoop相关组件。生产集群按照规模大小可分为小型(10-20个节点)、中型(50个节点)和大型(超过50个节点)。集群规划需要为这些组件选择合适的硬件配置和部署分布:
- Hadoop Master Nodes:HDFS包括NameNode,SecondaryNameNode,建议单独服务器部署。软件架构上可以使用Hadoop 2.0 NameNode HA增强可用性,硬件上也可以考虑一定的冗余,比如双电源、RAID硬盘等。因为NameNode通过内存提供元数据服务,所以服务器的内存大小至关重要。MapReduce方面,如果HBase集群主要用于提供低延迟数据服务,由于MapReduce任务占用资源,那么建议完全不部署MapReduce相关组建,至少不部署在RegionServer节点上(缺点是牺牲数据本地性)
- RegionServer和DataNode:并行部署。RegionServer比较吃内存,一般来讲,10-15G堆大小的内存工作良好,但是更大的内存可能导致GC耗时过长,会加大HBase的延迟。
- ZooKeeper和HBaseMaster:这两都是比较轻量级的,可以部署在一起,使用奇数台服务器。值得注意的是,ZooKeeper对时间延迟更敏感,所以最好使用单独的硬盘用于持久化。
另外,从性价比和易用性角度来讲,可以考虑Amazon提供的AWS云服务。
部署工具&发行版本
自动化部署工具一般使用Puppet或者Chef。Apache提供了Whirr帮助在云端部署HBase,其他发行版也有自己专门的部署管理工具。
据我所知,基本还没有公司在生产环境使用Apache Hadoop原生发行版,要么自己改改(大公司,比如狼厂),要么使用Cloudera的CDH发行版或者Hortonworks的HDP平台(中小企业)。CDH等版本的优点是在Apache发行版的基础上打了不少patches(patches本身一般也会在Apache代码库中,但还不在当前发行版中)修正bug,经过更严格的测试,稳定性和性能方面都会有所改善。
配置参数
HBase所有配置参数请参考主页文档http://hbase.apache.org/book/configuration.html。这节会列出部分重要参数,在下一章的性能调优相关章节还会继续介绍一些重要参数。
HBase配置参数分两部分,一部分是环境变量配置在hbase-env.sh,另一部分在hbase-site.xml中。Hbase-evn.sh中的环境变量被Master和RegionServer的启动脚本读取,比如Java堆大小、垃圾回收设置等参数。以HBASE_REGIONSERVER_OPTS为例:
-Xmx8g -Xms8g -Xmn128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70
- 堆大小一般小于15G。
- 年轻代128M,默认的新生代太小,会频繁触发GC,占用CPU,影响HBase实时性能。
- 年轻代使用并行收集器。年轻代使用stop-the-world垃圾回收算法,暂停时间不能太长,否则超过ZooKeeper会话超时事件,ZooKeeper收不到RegionServer心跳信息会认为RegionServer已经下线。
- 年老代使用CMS收集器,强调低延迟。另外,因为RegionServer的堆内存由BlockCache(20%)和MemStore(40%)组成,所以设置成70%比例为启动参数,这个参数可以根据基准测试的结果进行调整。
与HBase相关的Hadoop的配置参数要注意dfs.datanode.max.xcievers,代表DataNode上HDFS客户端读写数据的最大线程数,默认的256太低了,可以设置成4096;操作系统方面,需要修改ulimit最大打开文件数量,保持文件打开让HBase不用每次读写操作都打开关闭文件,另外一个是swap交换行为,在RegionServer上发生交换严重影响性能
$ sysctl -w vm.swappiness=0
守护进程管理
hbase-daemon.sh脚本通过ssh管理各个节点上的守护进程:
$HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ start master $HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ start regionserver $HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ start master- backup $HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ stop master $HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ stop regionserver $HBASE_HOME/bin/hbase-daemon.sh --config$HBASE_HOME/conf/ stop master-backup
通过HBase Shell或者HBase Master带的Web UI可以查看系统状态
读书笔记-HBase in Action-第四部分-(1)部署