读书笔记-HBase in Action-第四部分-(1)部署

最后一部分了。。。分两章吧。HBase和Hadoop紧密相关,更为具体的部署和运维内容推荐Hadoop OperationsHBase
Administration Cookbook
。本文粗粒度列出一些HBase部署运维的最佳实践和基本原则。

集群规划

一个完整的HBase集群包含HBase Master,ZooKeeper,RegionServers和Hadoop相关组件。生产集群按照规模大小可分为小型(10-20个节点)、中型(50个节点)和大型(超过50个节点)。集群规划需要为这些组件选择合适的硬件配置和部署分布:

  1. Hadoop Master Nodes:HDFS包括NameNode,SecondaryNameNode,建议单独服务器部署。软件架构上可以使用Hadoop 2.0 NameNode HA增强可用性,硬件上也可以考虑一定的冗余,比如双电源、RAID硬盘等。因为NameNode通过内存提供元数据服务,所以服务器的内存大小至关重要。MapReduce方面,如果HBase集群主要用于提供低延迟数据服务,由于MapReduce任务占用资源,那么建议完全不部署MapReduce相关组建,至少不部署在RegionServer节点上(缺点是牺牲数据本地性)
  2. RegionServer和DataNode:并行部署。RegionServer比较吃内存,一般来讲,10-15G堆大小的内存工作良好,但是更大的内存可能导致GC耗时过长,会加大HBase的延迟。
  3. 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
  1. 堆大小一般小于15G。
  2. 年轻代128M,默认的新生代太小,会频繁触发GC,占用CPU,影响HBase实时性能。
  3. 年轻代使用并行收集器。年轻代使用stop-the-world垃圾回收算法,暂停时间不能太长,否则超过ZooKeeper会话超时事件,ZooKeeper收不到RegionServer心跳信息会认为RegionServer已经下线。
  4. 年老代使用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可以查看系统状态

时间: 2024-08-05 13:39:20

读书笔记-HBase in Action-第四部分-(1)部署的相关文章

读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB

OpenTSDB是基于HBase的开源监控系统,可以支持上万规模集群监控和上亿数据点采集.其中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了相当多的优化工作. 架构Overview 概念上OpenTSDB由三部分组成:tcollector数据采集.tsd数据服务和HBase数据存储. 数据采集流程 如上图,tcollector后台进程运行在每台被监控的服务器上,管理数据收集脚本,定期执行,失败时重启,确保所有的监控数据发送给OpenTSD

读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端

HBase Shell HBase shell使用起来最方便,进入HBase shell控制台即可使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表)/put(插入或更新数据)/get(根据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(根据rowkey删除整行数据)/disable&drop(禁用表之后再删除). 基于数据库的项目,往往会在某个目录下存储专门的sql脚本,记录每次迭代数据库变更:同理,HBas

读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不只包括创建表时指定项,还应该综合考虑Column families/Column qualifier/Cell value/Versions/Rowkey等相关内容. 灵活的Schema&简单的存储视图 Schema设计和数据存储及访问模式关系密切,先回顾下HBase数据模型,有几个要点: 被索引的部分包括Row Key+Col Fam+Col Qual+Time Stamp 由于HBase的

读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor

Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor,可以将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coprocessor分为两种:Observer和Endpoint.Observer能修改扩展已有的客户端操作功能,而Endpoint能引入新的客户端操作. Observer Observer的作用类似于数据库的触发器或者AOP中的advice.下图为Put操作增加Observer,其中1-2-4-6是一次正常的

[读书笔记]了不起的node.js(四)

这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站.主要是遇到了一下几个问题. 1.mongodb版本过低 npm ERR! Not compatible with your operating system or architecture: [email protected] 0.9.9只支持linux,darwin,freebsd这几个系统,最新版本已支持wins. 2.nodejs进行insert操作后:无法读取结果 1 app.post('/sign

读书笔记-HBase in Action-第一部分 HBase fundamentals

新项目准备上HBase.HBase眼下由组里某牛负责.本着学会使用HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Schema设计原则和实战等.借用Michael Stack(HBase Chair)的话,"At a highlevel, HBase is like theatomic bomb. Its basic operation can be explained onthe back of a napkin

读书笔记-HBase in Action-第三部分应用-(2)GIS系统

本章介绍用HBase存储.高效查询地理位置信息. Geohash空间索引 考虑LBS应用中常见的两个问题:1)查找离某地最近的k个地点:2)查找某区域内地点.如果要用HBase实现高效查找,首先要考虑的是空间局部性(Spatial Locality),即位置上相近的点得物理存储在一起.最简单的地理位置数据由两个维度组成:经度X和纬度Y,那么相对应最简单的Rowkey也可以由X和Y组成.Rowkey的有序性决定了数据首先按照经度X排序,再按照纬度Y排序,这种方式最大的问题是经度值相等的A地点和B地

读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient

HBase Shell HBase shell使用起来最方便,进入HBase shell控制台就可以使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表)/put(插入或更新数据)/get(依据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(依据rowkey删除整行数据)/disable&drop(禁用表之后再删除). 基于数据库的项目,往往会在某个文件夹下存储专门的sql脚本,记录每次迭代数据库变更:同理,HB

读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中 执行环境的销毁 某个执行环境中的所有代码执行完毕后 该环境被销毁 保存在其中的所有变量了函数定义也会随之销毁 作用域链中的对象 全局执行环境的变更对象始终都是作用域链中的最后一个对象 没有块级作用域 if 和 for 内的变量 外部也可以访问 标记清除 不同浏览器 只不过垃圾时间的长短不同 引