【Hbase】hbase 1.2.4 启动脚本分析

1.概述

1.我分析的是hbase-1.2.4这个版本

2.首先从bin/start-hbase.sh开始,这个文件首先去执行配置脚本bin/ hbase-config.sh 。bin/ hbase-config.sh这个脚本里在其中加载了

在这里插入图片描述

这三个配置。这里有个疑问conf/regionservers文件打开内容是localhost,但是regionservers是复数,说明可以配置多个regionserver在不同的机器上运行,这是我的猜测,没有查找到相关资料

然后backup-masters文件

hbase增加backup master 为了增加hbase集群的可用性,可以为hbase增加多个backup master。当master挂掉后,backup master可以自动接管整个hbase的集群。

配置backup master的方式是在hbase的conf下增加文件backup-masters,在该文件里面增加backup master的机器列表,每台机器一条记录。
如:

[hadoop@hadoop01 conf]$ cat backup-masters
hadoop02

整个集群启动后,在hadoop02的机器上也会启动hmaster的进程:

[hadoop@hadoop02 logs]$ jps
4301 Jps
4175 HMaster

查看hadoop02上该master的log,可以看到如下的信息:

2012-04-10 05:53:10,120 INFO org.apache.hadoop.hbase.master.ActiveMasterManager: Another master is the active master, hadoop01,60000,1334008045435; waiting to become the next active master

该信息说明,当前hbase集群有活动的master节点,该master节点为hadoop01,所以hadoop02节点开始等待,直到hadoop01上的master挂掉。hadoop02会变成新的hmaster节点。
当当前的master挂掉后,backup master会接管,进而变成新的active master

2012-04-10 06:48:52,436 DEBUG org.apache.hadoop.hbase.master.ActiveMasterManager: No master available. Notifying waiting threads
2012-04-10 06:48:52,438 INFO org.apache.hadoop.hbase.master.ActiveMasterManager: Master=hadoop02,60000,1334011638701
2012-04-10 06:48:52,443 DEBUG org.apache.hadoop.hbase.master.ActiveMasterManager: A master is now available

原文地址:http://www.oratea.net/?p=1177

然后是

hbase-daemons.sh  --config  hbase-1.2.4/conf  start zookeeper      
hbase-daemon.sh   --config  hbase-1.2.4/conf  start master                                        
hbase-daemons.sh  --config  hbase-1.2.4/conf  --hosts hbase-1.2.4/conf/regionservers  start  regionserver                                                                         
hbase-daemons.sh --config hbase-1.2.4/conf --hosts conf/backup-masters  start master-backup 

分别去启动各个进程
查看hbase-daemons.sh发现在这个文件中
先启动zookeeper然后输入密码
然后启动regionserver
最后再启动master-backup
但是都是用hbase-daemon.sh这个脚本去启动
在这里插入图片描述

查看hbase-daemon.sh发现在这个文件中

每次都执行配置文件

在这里插入图片描述

这里是检查是否有hbase相关的进程已经启动了

在这里插入图片描述

这里是log日志的存放位置,pid等等

在这里插入图片描述

启动程序
在这里插入图片描述

上面的调用这个,这个里面可以看到最终使用bin/hbase 这个命令启动的,打开这个命令可以看到 hbase的主要的三个进程的主类
分别是:master

org.apache.hadoop.hbase.master.HMaster 
        Regionserver 		 org.apache.hadoop.hbase.regionserver.HRegionServer
Zookeeper  		 org.apache.hadoop.hbase.zookeeper.HQuorumPeer

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为上面启动是最先启动的zookeeper,所以我们先查看zookeeper的源代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里遇到了第一个配置,hbase.regionserver.global.memstore.upperLimit

hbase.regionserver.global.memstore.upperLimit被hbase.regionserver.global.memstore.size这个配置给取代了。这个配置在文档中说的意思是
hbase/hbase-common/src/main/resources/hbase-default.xml

<property>
    <name>hbase.regionserver.global.memstore.size</name>
    <value></value>
    <description>Maximum size of all memstores in a region server before new
      updates are blocked and flushes are forced. Defaults to 40% of heap (0.4).
      Updates are blocked and flushes are forced until size of all memstores
      in a region server hits hbase.regionserver.global.memstore.size.lower.limit.
      The default value in this configuration has been intentionally left emtpy in order to
      honor the old hbase.regionserver.global.memstore.upperLimit property if present.</description>
  </property>

HBase region server作为一个Java程序,启动时应该指定max heap size,比方说8G。那这8G会被如何使用呢?

  1. 作为每个region的mem store,缺省是64M。那么如果这个region server一共有100个region的话,就要用掉64M*100=6.4G内存了。
  2. 作为block cache用,缺省是20%的内存用作block cache,那么就是8G*20% = 1.6G。
  3. 其他对象分配。

从上面的情况可以看到,如果这个region server只有8G的heap size的话,在100个region的情况下,内存已经完全用完了(6.4G+1.6G),这样的话,就非常容易出OutOfMemoryError了。当然在实际使用中,基本不会因为这个原因产生OOME。这主要是因为HBase的这个配置hbase.regionserver.global.memstore.upperLimit(缺省是40%的内存)起了作用。但这是有代价的。其代价就是block住所有在这个region server上的update操作并强制进行flush以释放内存。这样的话,整个region server在这段时间内就不响应任何请求。所以,应该限制每个HBase region server的region个数。按照Google的经验,这个数字应该不超过100。

读HBase的source code可以发现,对于put heavy的应用来说,mem store flush只发生在mem store满的情况。而由flush又进一步引起minor compaction, major compaction和split。所以为了减少flush次数,似乎应该增大mem store size并相应减少region个数。这样应该会对写入速度有好处。回头实验下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值