HBase问题集

企业动态
今天讲一讲关于HBase的问题、原因以及解决方法。

1、ERROR: org.apache.hadoop.hbase.MasterNotRunningException

问题:

运行hbase的时候发现这个错误:

  1. ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times 

原因:

查看log,发现大量的

2012-04-26 08:13:39,600 INFO org.apache.hadoop.hbase.util.FSUtils: Waiting for dfs to exit safe mode...

原来hdfs还处于安全模式

  1. ./hadoop fsck //hbase/.logs/slave1,60020,1333159627316/slave1%2C60020%2C1333159627316.1333159637444: Under replicated blk_-4160280099734447327_1626. Target Replicas is 3 but found 2 replica(s). 
  2. .... 
  3. /home/hadoop/tmp/mapred/staging/hadoop/.staging/job_201203211238_0002/job.jar: Under replicated blk_-7807519084475423360_1012. Target Replicas is 10 but found 2 replica(s). 
  4. ......................................................................Status: HEALTHY 
  5. Corrupt blocks: 0 
  6. Missing replicas: 9 (3.0612245 %) 

Number of data-nodes: 2没有损坏的block,有9个丢失的replicas,状态健康

所以可以强制离开安全模式

解决:

  1. hadoop dfsadmin -safemode leave 
  2. Safe mode is OFF 

运行hbase命令成功

[[178940]]

2、HMaster启动后自动关闭

问题:

一启动就出了问题,原先调试好的分布式平台却提示了错误:

  1. Zookeeper available but no active master location found 

原因:

HMaster的问题,JPS查看发现没有了HMaster进程,进入到hbase-master日志中查看,发现了以下错误提示:

  1. Could not obtain block: blk_number... ...file=/hbase/hbase.version 

无法访问数据块的原因无非有两个:一是该数据块不存在;二是该数据块没有权限。自己去HDFS下查看发现了/hbase目录,也有hbase.version文件,虽然该文件大小为0kb。于是自己首先想到是权限问题,接下来开始为/hbase修改权限:

  1. %hadoop fs -chmod 777 /hbase 
  2. %hadoop fs -chmod -R 777 /hbase (修改目录权限) 

但是试过之后结果依旧。这时自己确定HMaster自动关闭的问题不是因为目录权限拒绝访问,那么是什么呢?之前也发生过HMaster启动后自动关闭的问题,自己当时的解决办法是格式化namenode即可:

  1. %hadoop namenode -format 

但是这次试过之后仍旧不成功,于是自己考虑会不会是由于分布式环境下不同节点的hdfs的重复工作导致的不一致使得HMaster无法正常启动呢?

解决:

抱着这样的想法删掉了各个节点和master上的hdfs数据,在master上重新启动hbase结果成功,HMaster不再自动关闭。

这时我们需要重新复制生成HDFS干净的HDFS:

  1. %rm -Rf reports/data 
  2. %hadoop fs -copyFromLocal reports /texaspete/templates/reports 
  3. %hadoop fs -put match/src/main/resources/regexes /texaspete/regexes 

3、Caused by: java.lang.IllegalArgumentException: java.net.UnknownHostException: te

问题:

  1. Caused by: java.lang.IllegalArgumentException: java.net.UnknownHostException: te 

原因:

hbase on hadoop2时,配置的hdfs路径是HA的映射目录,而这个路径并不是一个ip:port的格式,hbase在查找主机名的时候并不知道,就把路径中的目录当成了一个ip,无法找到

解决:

把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

4、hive+hbase得不到返回结果

问题:

在hive中建立外表链接到hbase的表,在做复杂查询时发现得不到结果返回。都是hive 0.9 版本。

远程客户端错误:

  1. Caused by: java.sql.SQLException: Query returned non-zero code: 9, cause: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask 
  2.     at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeImmediate(HivePreparedStatement.java:177) 
  3.     at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeQuery(HivePreparedStatement.java:140) 
  4.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
  6.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
  7.     at java.lang.reflect.Method.invoke(Unknown Source) 
  8.     at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) 
  9.     ... 88 more 
  10. Caused by: HiveServerException(message:Query returned non-zero code: 9, cause: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask, errorCode:9, SQLState:08S01) 
  11.     at org.apache.hadoop.hive.service.ThriftHive$execute_result.read(ThriftHive.java:1318) 
  12.     at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 
  13.     at org.apache.hadoop.hive.service.ThriftHive$Client.recv_execute(ThriftHive.java:105) 
  14.     at org.apache.hadoop.hive.service.ThriftHive$Client.execute(ThriftHive.java:92) 
  15.     at org.apache.hadoop.hive.jdbc.HivePreparedStatement.executeImmediate(HivePreparedStatement.java:175) 
  16.     ... 94 more 

原因:

查看hadoop日志:缺少hbase的包

  1. java.io.IOException: Cannot create an instance of InputSplit class = org.apache.hadoop.hive.hbase.HBaseSplit:org.apache.hadoop.hive.hbase.HBaseSplit >          
  2.     at org.apache.hadoop.hive.ql.io.HiveInputFormat$HiveInputSplit.readFields(HiveInputFormat.java:145) >          
  3.     at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:67) >          
  4.     at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:40) >          
  5.     at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:348) >          
  6.     at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:364) >          
  7.     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:324) >          
  8.     at org.apache.hadoop.mapred.Child$4.run(Child.java:268) >          
  9.     at java.security.AccessController.doPrivileged(Native Method) >          
  10.     at javax.security.auth.Subject.doAs(Subject.java:415) >          
  11.     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1115) >          
  12.     at org.apache.hadoop.mapred.Child.main(Child.java:262) 

解决:

把相关的包导入进hive

修改hive-site.xml

添加:

  1. <property>  
  2.     <name>hive.aux.jars.path</name>  
  3.     <value>file:///opt/cloudera/parcels/CDH-4.4.0-1.cdh4.4.0.p0.39/lib/hbase/hbase.jar,file:///opt/cloudera/parcels/CDH-4.4.0-1.cdh4.4.0.p0.39/lib/hive/lib/hive-hbase-handler-0.10.0-cdh4.4.0.jar,file:///opt/cloudera/parcels/CDH-4.4.0-1.cdh4.4.0.p0.39/lib/zookeeper/zookeeper.jar</value>  
  4. </property>  
  5. <property>  
  6.     <name>hbase.zookeeper.quorum</name>  
  7.     <value>zookeeper的主机名</value>  
  8. </property> 

 

5、在通过JDBC访问Hive+HBase做统计查询时报错HBaseSplit not found

问题:在通过JDBC访问Hive+HBase做统计查询时报错HBaseSplit not found

原因:Hive集成HBase,通过JDBC访问HBase映射Hive的表做统计查询时报错(报错信息如下),

  1. java.io.IOException: Cannot create an instance of InputSplit class = org.apache.hadoop.hive.hbase.HBaseSplit:org.apache.hadoop.hive.hbase.HBaseSplitat org.apache.hadoop.hive.ql.io.HiveInputFormat$HiveInputSplit.readFields(HiveInputFormat.java:146) 
  2.     at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:67) 
  3.     at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:40) 
  4.     at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:396) 
  5.     at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:412) 
  6.     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) 
  7.     at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
  8.     at java.security.AccessController.doPrivileged(Native Method) 
  9.     at javax.security.auth.Subject.doAs(Subject.java:396) 
  10.     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
  11.     at org.apache.hadoop.mapred.Child.main(Child.java:249) 
  12. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.hbase.HBaseSplit 
  13.     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
  14.     at java.security.AccessController.doPrivileged(Native Method) 
  15.     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
  16.     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
  17.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
  18.     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
  19.     at java.lang.Class.forName0(Native Method) 
  20.     at java.lang.Class.forName(Class.java:249) 
  21.     at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820) 
  22.     at org.apache.hadoop.hive.ql.io.HiveInputFormat$HiveInputSplit.readFields(HiveInputFormat.java:143) 

错误提示是说HBaseSplit类找不到,但是在classpath中有这个类。但是还需要提供auxpath jar包

解决:

修改一下配置文件hive-site.xml,添加以下配置,问题即解决。

  1. <property>  
  2.     <name>hive.aux.jars.path</name>  
  3.     <value>file:///home/用户目录/hive-0.10.0/lib/hive-hbase-handler-0.10.0.jar,file:///home/用户目录/hive-0.10.0/lib/hbase-0.92.0.jar,file:///home/用户目录/hive-0.10.0/lib/zookeeper-3.4.3.jar</value>  
  4. </property> 

 

6、org.apache.hadoop.hbase.ClockOutOfSyncException,Reported time is too far out of sync with master

在启动Hbase的过程中,有的报出了以下的错误:

  1. org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server hadoop2,16020,1470107202883 has been rejected; Reported time is too far out of sync with master.  Time difference of 53999521ms > max allowed of 30000ms 
  2.     at org.apache.hadoop.hbase.master.ServerManager.checkClockSkew(ServerManager.java:407) 
  3.     at org.apache.hadoop.hbase.master.ServerManager.regionServerStartup(ServerManager.java:273) 
  4.     at org.apache.hadoop.hbase.master.MasterRpcServices.regionServerStartup(MasterRpcServices.java:360) 
  5.     at org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos$RegionServerStatusService$2.callBlockingMethod(RegionServerStatusProtos.java:8615) 
  6.     at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2180) 
  7.     at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112) 
  8.     at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133) 
  9.     at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108) 
  10.     at java.lang.Thread.run(Thread.java:744) 
  11.   
  12.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
  13.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
  14.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
  15.     at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
  16.     at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) 
  17.     at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95) 
  18.     at org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException(ProtobufUtil.java:329) 
  19.     at org.apache.hadoop.hbase.regionserver.HRegionServer.reportForDuty(HRegionServer.java:2288) 
  20.     at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:907) 
  21.     at java.lang.Thread.run(Thread.java:744) 
  22. Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.ClockOutOfSyncException): org.apache.hadoop.hbase.ClockOutOfSyncException: Server hadoop2,16020,1470107202883 has been rejected; Reported time is too far out of sync with master.  Time difference of 53999521ms > max allowed of 30000ms 
  23.     at org.apache.hadoop.hbase.master.ServerManager.checkClockSkew(ServerManager.java:407) 
  24.     at org.apache.hadoop.hbase.master.ServerManager.regionServerStartup(ServerManager.java:273) 

错误解释:

当一个RegionServer始终偏移太大时,master节点结将会抛出此异常.

解决方法:

1、确认几台机器所属的时区 时间是否一致,不一致的情况下要同步一致

2、可以适当增加hbase.master.maxclockskew时间

  1. <property> 
  2.     <name>hbase.master.maxclockskew</name>  
  3.     <value>180000</value> 
  4. </property> 

【本文为51CTO专栏作者“王森丰”的原创稿件,转载请注明出处】

责任编辑:赵宁宁 来源: 神算子
相关推荐

2016-12-14 14:47:59

Zookeeper服务器

2016-12-19 19:04:30

Hive问题集

2016-12-19 15:32:12

Linux问题集

2016-12-13 16:36:15

Hadoopwindows

2011-03-28 17:51:10

nagios

2013-11-22 09:57:03

hadoop1.2.1zookeeper-3hbase-0.94.

2010-03-25 16:20:44

CentOS安装

2011-02-22 14:21:49

vsftpd

2009-10-09 17:40:38

VB.Net问题集

2018-07-12 09:25:07

磁盘阵列数据恢复

2011-02-25 14:25:04

Proftpd

2011-02-22 14:40:25

vsftpd

2018-04-10 13:02:51

HBase写入流程数据

2009-12-31 15:28:02

Silverlight

2009-07-01 00:23:40

MySQL字符集乱码

2011-03-03 13:41:36

Pureftpd防火墙

2011-05-16 13:15:55

MySQL存储字符集

2011-03-03 14:26:15

PureftpdSSHFTP

2010-05-17 10:01:09

MySql字符集

2021-12-12 18:12:13

Hbase线上问题
点赞
收藏

51CTO技术栈公众号