集群突然nagios报出一台regionserver挂了。顿时忙碌起来。
上去一看,从log中看到这样一条信息
ERROR org.apache.hadoop.hbase.regionserver.HRegionServer: ZooKeeper session expired
之后, regionserver就理直气壮地退出了。
于是查了下代码,看到了在org.apache.hadoop.hbase.regionserver.HRegionSever.java下这样一段代码。
/**
* We register ourselves as a watcher on the master address ZNode. This is
* called by ZooKeeper when we get an event on that ZNode. When this method
* is called it means either our master has died, or a new one has come up.
* Either way we need to update our knowledge of the master.
* @param event WatchedEvent from ZooKeeper.
*/
public void process(WatchedEvent event) {
EventType type = event.getType();
KeeperState state = event.getState();
LOG.info(“Got ZooKeeper event, state: ” + state + “, type: ” +
type + “, path: ” + event.getPath());
// Ignore events if we’re shutting down.
if (stopRequested.get()) {
LOG.debug(“Ignoring ZooKeeper event while shutting down”);
return;
}
if (state == KeeperState.Expired) {
LOG.error(“ZooKeeper session expired”);
boolean restart =
this.conf.getBoolean(“hbase.regionserver.restart.on.zk.expire”, false);
if (restart) {
restart();
} else {
abort();
}
} else if (type == EventType.NodeDeleted) {
watchMasterAddress();
} else if (type == EventType.NodeCreated) {
getMaster();
// ZooKeeper watches are one time only, so we need to re-register our watch.
watchMasterAddress();
}
}
这段注释写的很清楚了。对于一个reigonserver,
他需要将自己注册到Zookeeper上master的Znode上。这样的目的,是当master
宕机或者新的master启动的时候,能及时收到通知。对于regionserver来说,维持和Zookeeper的联系是非常重要的。因为
regionserver需要定期的将心跳包发给master
server。如果regionserver不能及时的知道master的改变,就会导致regionserver和master失去联系,而成为一个僵
死的进程。
于是,在默认情况下,regionserver遇到这种情况,就选择退出。
为什么regionserver 和Zookeeper的session expired? 可能的原因有
1. 网络不好。
2. Java full GC, 这会block所有的线程。如果时间比较长,也会导致session expired.
怎么办?
1. 将Zookeeper的timeout时间加长。
2. 配置“hbase.regionserver.restart.on.zk.expire” 为true。 这样子,遇到ZooKeeper session expired , regionserver将选择 restart 而不是 abort
具体的配置是,在hbase-site.xml中加入
<property>
<name>zookeeper.session.timeout</name>
<value>90000</value>
<description>ZooKeeper session timeout.
HBase passes this to the zk quorum as suggested maximum time for a
session. See http://hadoop.apache.org/zookeeper/docs/current/zookeeperProgrammers.html#ch_zkSessions
“The client sends a requested timeout, the server responds with the
timeout that it can give the client. The current implementation
requires that the timeout be a minimum of 2 times the tickTime
(as set in the server configuration) and a maximum of 20 times
the tickTime.” Set the zk ticktime with hbase.zookeeper.property.tickTime.
In milliseconds.
</description>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
<description>
Zookeeper session expired will force regionserver exit.
Enable this will make the regionserver restart.
</description>
</property>
为了避免java full GC suspend thread 对Zookeeper heartbeat的影响,我们还需要对hbase-env.sh进行配置。
将
export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError \
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
修改成
export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -Xmn256m"
分享到:
相关推荐
remote-region eureka-server
egion按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region。
paint_region修改对应Region颜色
实现计算机视觉(Computer Vision)中的Haralick区域增长算法(Haralick Region Growing Algorithm)用于实现图像分割。
比较粗略的介绍了下region的概念以及利用region搭建新的swift环境实验,验证region在swift中的作用于利用场景
XAML Region,可以把XAML中的代码进行分组收起来
创建表 Master 发送命令给 RegionServer @后面的ip为127.0.0.1 则表示暂时不创建副本create table [tableNa
区域增长算法 (matlab) region growing
ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架。 ip2region 重点在于研究 IP 定位数据的存储设计和各种语言的查询实现,并没有原始 IP 数据的支撑,本项目不保证及时的数据更新
matlab region growing
ip2region.db 用于获取IP地址的归属地; 用于获取IP地址的所属地;
CSharp_Region类的方法使用图解 本实例使用两个矩形A和B来演示System.Drawing.Region类的各方法的功能。 详情请参考:http://blog.csdn.net/testcs_dn/article/details/41730589 下载需要积分,评论后会全部返还。
region.json
Region Growing image segmentation
region growing for image segmentation, code by Dkroon
集成ip2region离线地址定位.zip
Region类的使用和图解
区域生长算法是一种串行区域分割的图像分割方法
ip2region是一套准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.6M,提供了java, php, c, python,nodejs,golang查询绑定和Binary,B树,内存三种查询算法。需要的朋友可以下载! 99.9%准确率,定时...