分享

hbase的regionServer无法通过Master节点启动的问题,求助!

gaobangsheng 发表于 2014-6-26 20:34:07 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 40 141718
本帖最后由 gaobangsheng 于 2014-6-26 20:41 编辑

配置了hbase的集群,两个主节点,三个regionserver节点,hmaster节点上通过start-hbase.sh只能启动Hmaster节点,从节点启动后报错退出。
但是regionserver节点上,如果我通过手工启动
  1. hbase-daemon.sh start regionserver
复制代码

来启动是完全正常的,也不报错。启动后也能正常的对hbase进行数据操作。

现在的问题是,通过主节点的start-hbase.sh启动后,regionserver启动后退出,报错如下:
另外,我的hadoop是配置的HA高可用,通过zookeeper来自动切换,同时hbase也是采用的外置zookeeper配置的。

2014-06-26 11:58:20,648 FATAL [regionserver60020] regionserver.HRegionServer: ABORTING region server hdp-s3,60020,1403755098845: Initialization of RS failed.  Hence aborting RS.
  1. 2014-06-26 11:58:20,645 INFO  [regionserver60020] ipc.RpcServer: Stopping server on 60020
  2. 2014-06-26 11:58:20,648 FATAL [regionserver60020] regionserver.HRegionServer: ABORTING region server hdp-s3,60020,1403755098845: Initialization of RS failed.  Hence aborting RS.
  3. java.io.IOException: java.lang.reflect.InvocationTargetException
  4.         at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:416)
  5.         at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:393)
  6.         at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:274)
  7.         at org.apache.hadoop.hbase.catalog.CatalogTracker.<init>(CatalogTracker.java:151)
  8.         at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeZooKeeper(HRegionServer.java:739)
  9.         at org.apache.hadoop.hbase.regionserver.HRegionServer.preRegistrationInitialization(HRegionServer.java:702)
  10.         at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:837)
  11.         at java.lang.Thread.run(Thread.java:722)
  12. Caused by: java.lang.reflect.InvocationTargetException
  13.         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  14.         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
  15.         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  16.         at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
  17.         at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:414)
  18.         ... 7 more
  19. Caused by: java.lang.ExceptionInInitializerError
  20.         at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64)
  21.         at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:69)
  22.         at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:83)
  23.         at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:857)
  24.         at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:662)
  25.         ... 12 more
复制代码


请高人指点,这个错误如何解决?另外,网找找了一下,有人说是时钟不一致的问题,我查了,我的集群没有这个问题 。

已有(39)人评论

跳转到指定楼层
nettman 发表于 2014-7-4 01:16:33
清理一下tmp里的数据,把hdfs里的hbase数据也都清理了,同时再清理tmp,检查各个节点是否有残留hbase进程,kill掉,然后在重启一下集群。
回复

使用道具 举报

sstutu 发表于 2014-6-26 20:55:04

回帖奖励 +3 云币

1.你是通过什么方式来确定时间是一致还是不一致的,眼睛?手工对比?最好安装ntp的方式来排除这个可能性。ntp的安装可参考ubuntu ntp时间同步服务器搭建与使用


2.还有另外一个原因就是权限、配置文件造成的。
可以对比下面内容:
hbase 0.96整合到hadoop2.2三个节点全分布式安装高可靠文档




回复

使用道具 举报

hyj 发表于 2014-6-26 21:04:56

回帖奖励 +3 云币

你看一下 端口60020是个什么情况,还有具体看一下启动日志到底报的什么错,就是启动的时候,遇到了阻碍,这个阻碍,比如创建文件失败等。
建议还是先看看日志,不知道日志的位置,可以参考这篇帖子 Hadoop日志位置在哪里?确切日志位置指定
回复

使用道具 举报

gaobangsheng 发表于 2014-6-27 09:54:16
hyj 发表于 2014-6-26 21:04
你看一下 端口60020是个什么情况,还有具体看一下启动日志到底报的什么错,就是启动的时候,遇到了阻碍,这 ...

启动时报的错,就是前面打印出来的错误啊。
回复

使用道具 举报

hyj 发表于 2014-6-27 10:12:44
本帖最后由 hyj 于 2014-6-27 10:29 编辑
gaobangsheng 发表于 2014-6-27 09:54
启动时报的错,就是前面打印出来的错误啊。

把你的hbase的日志目录截图看一下。并且发生这个错误的原因有很多,你需要更详细的日志。


回复

使用道具 举报

xuanxufeng 发表于 2014-6-27 11:13:11
大神这个问题是个疑难杂症,不好搞啊
回复

使用道具 举报

nettman 发表于 2014-6-27 11:25:17


hbase中除了有查看hfile文件的命令,也提供也查看hlog文件的命令:

在hbase的根目录下有个.logs目录,里面就是hlog文件,一台RegionServer机器对应一个文件。老的hlog文件会被移到.oldlogs目录:


  1. [admin@bufer108081.tbc ~/dev/baoniu]$ hadoop fs -ls /hbase-0.90/.logs
  2. Found 49 items
  3. drwxrwxr-x   - hadoop hadoop,admin          0 2014-05-20 20:43 /hbase-0.90/.logs/bufer108056.tbc,30020,1400049798389
  4. drwxrwxr-x   - hadoop hadoop,admin          0 2014-05-20 20:43 /hbase-0.90/.logs/bufer108057.tbc,30020,1400049798399
  5. drwxrwxr-x   - hadoop hadoop,admin          0 2014-05-20 20:43 /hbase-0.90/.logs/bufer108058.tbc,30020,1400049798425
复制代码
命令的参数:


  1. [admin@bufer108081.tbc ~/dev/baoniu]$  ~/hbase/bin/hbase org.apache.hadoop.hbase.regionserver.wal.HLog --dump
  2. Usage: HLog <ARGS>
  3. Arguments:
  4. --dump  Dump textual representation of passed one or more files
  5.          For example: HLog --dump hdfs://example.com:9000/hbase/.logs/MACHINE/LOGFILE
  6. --split Split the passed directory of WAL logs
  7.          For example: HLog --split hdfs://example.com:9000/hbase/.logs/DIR
  8. [admin@bufer108081.tbc ~/dev/baoniu]$  ~/hbase/bin/hbase org.apache.hadoop.hbase.regionserver.wal.HLog --dump -h                                                 usage: HLog <filename...> [-h] [-j] [-p] [-r <arg>] [-s <arg>] [-w <arg>]
  9. -h,--help             Output help message
  10. -j,--json             Output JSON
  11. -p,--printvals        Print values
  12. -r,--region <arg>     Region to filter by. Pass region name; e.g.
  13.                        '.META.,,1'
  14. -s,--sequence <arg>   Sequence to filter by. Pass sequence number.
  15. -w,--row <arg>        Row to filter by. Pass row name.
复制代码

通过以下命令就可以查看hlog文件的内容:

  1. [admin@bufer108081.tbc ~/dev/baoniu]$ ~/hbase/bin/hbase org.apache.hadoop.hbase.regionserver.wal.HLog --dump -p /hbase-0.90/.logs/bufer108118.tbc,30020,1400049798450/bufer108118.tbc%2C30020%2C1400049798450.1400557412298
  2. 14/05/20 15:06:49 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS
  3. Sequence 8347119 from region a98994dbcf5b1fcd47f69efcf804c385 in table test
  4.   Action:
  5.     row: 0042:2100520170149
  6.     column: a:title
  7.     at time: Tue May 20 11:43:45 CST 2014
  8.     value: \xE5\x95\x86\xE5\x93\x81\xE4\xB8\xADxE8\xAF\x95\xE5\xAE\x9D\xE8\xB4\x9D
  9.   Action:
  10.     row: 0042:2100520170149
  11.     column: a:user_id
  12.     at time: Tue May 20 11:43:45 CST 2014
  13.     value: 778896
  14.   Action:
  15.     row: 0042:2100520170149
  16.     column: a:pict_url
  17.     at time: Tue May 20 11:43:45 CST 2014
  18.     value: 19/60/74/196074.jpg
  19.   Action:
  20.     row: 0042:2100520170149
  21.     column: a:categ
  22.     at time: Tue May 20 11:43:45 CST 2014
  23.     value: 1101
  24.   Action:
  25.     row: 0042:2100520170149
  26.     column: a:minimum_bid
  27.     at time: Tue May 20 11:43:45 CST 2014
  28.     value: 2000.00
  29.   Action:
  30.     row: 0042:2100520170149
  31.     column: a:reserve_price
  32.     at time: Tue May 20 11:43:45 CST 2014
  33.     value: 2000.00
复制代码








回复

使用道具 举报

gaobangsheng 发表于 2014-6-28 07:03:05
nettman 发表于 2014-6-27 11:25
hbase中除了有查看hfile文件的命令,也提供也查看hlog文件的命令:

在hbase的根目录下有个.logs目录 ...


问题已基本定位,但是没有找到解决方案:
我的Hadoop配置的是QJM的HA方式,有两个Namenode节点。我的hadoop中的部分配置如下:

  1. core-site.xml如下
  2. <property>
  3.   <name>fs.defaultFS</name>
  4.   <value>hdfs://mycluster</value>
  5. </property>
复制代码

  1. hdfs-site.xml如下
  2. <property>
  3.   <name>dfs.nameservices</name>
  4.   <value>mycluster</value>
  5. </property>
  6. <property>
  7.   <name>dfs.ha.namenodes.mycluster</name>
  8.   <value>nn1,nn2</value>
  9. </property>
  10. <property>
  11.   <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  12.   <value>hdp-m1:9000</value>
  13. </property>
  14. <property>
  15.   <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  16.   <value>hdp-m2:9000</value>
  17. </property>
复制代码


我将hbase数据存放路径指向了一个虚拟的hdfs地址:hdfs://mycluster/hbase。
这样的话,如果某个namenode挂掉,我的hbase仍然可以访问。
这样的配置方式,就会出现在hmaster无法启动所有hbase节点的问题,但是我逐过的手工启动完全正常,并且hbase集群也正常工作。

如果我修改hbase的指向为 hdfs://hdp-m1:9000/hbase,则hbase集群通过hmaster将所有节点都同时正常的启动了。
所以,问题 可以定位是配置了HA的hadoop的NameNode指向有点问题。

但是,尝试修改了很多次配置,还是没有找到好办法。我也不希望只将hbase指向一个节点,这样的话,如果发现failover,我也得重新配置hbase。

看看大家有没有hadoop 的ha环境 的hbase配置经验?


回复

使用道具 举报

desehawk 发表于 2014-6-28 14:34:52
本帖最后由 desehawk 于 2014-6-28 14:43 编辑
按照原理来讲,这不会有影响的,两个namenode一个active,一个是standby。二者的数据也是同步的。他们的访问方式通过代理名称mycluster来访问。
也就是说如果你hdp-m1为active则hdfs://mycluster:9000/hbase是访问的hdp-m1,相当于:
hdfs://hdp-m1:9000/hbase

hdp-m2为active则hdfs://mycluster:9000/hbase是访问的hdp-m2,相当于:
hdfs://hdp-m2:9000/hbase


原理我懂,是这样的,但是目前还没有配置,你试试
hdfs://mycluster:9000/hbase


回复

使用道具 举报

gaobangsheng 发表于 2014-6-30 08:50:40
desehawk 发表于 2014-6-28 14:34
本帖最后由 desehawk 于 2014-6-28 14:43 编辑
按照原理来讲,这不会有影响的,两个namenode一个active, ...
  1. Port 9000 specified in URI hdfs://mycluster:9000/hbase but host 'mycluster' is a logical (HA) namenode and does not use port information.
复制代码

这样写更错啊,不能带端口:

回复

使用道具 举报

12345下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条