读书笔记-HBase in Action-第四部分-(1)部署
来源:互联网 发布:云计算 erp 标题 编辑:程序博客网 时间:2024/05/01 13:37
最后一部分了。。。分两章吧。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)部署
- 读书笔记-HBase in Action-第四部分-(2)运维
- 读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB
- 读书笔记-HBase in Action-第一部分 HBase fundamentals
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- 读书笔记-HBase in Action-第三部分应用-(2)GIS系统
- 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端
- Netty In Action 读书笔记 - 第四章 传输
- 试译《Ajax in Action》第四部分(二)
- 试译《Ajax in Action》第四部分(六)
- 《JUnit In Action》读书笔记 1
- Groovy in action读书笔记1
- 试译《Ajax in Action》第四部分(一)
- 试译《Ajax in Action》第四部分(三)
- 试译《Ajax in Action》第四部分(四)
- 试译《Ajax in Action》第四部分(五)
- 试译《Ajax in Action》第四部分(七)
- 解决Eclipse中文乱码
- HDU 5025 - Saving Tang Monk(状压 + BFS)
- 用FireDAC连接oracle
- C#使用Mutex实现程序单实例运行
- 并查集(查找优化——加权法则)
- 读书笔记-HBase in Action-第四部分-(1)部署
- Unix下五种I/O模型
- codevs1166 矩阵取数游戏
- iOS开发者之IRC
- Effective C++:条款45:运用成员函数模板接受所有兼容类型
- python urlparse库将application/x-www-form-urlencoded转换为字典
- 【HIVE】join
- 在CentOS 6.3中安装与配置SVN的方法
- demux mp4