HBase运维中遇到的问题

1、PleaseHoldException: Master is initializing 

hadoop 3.2.1

hbase 2.2.5

各种配置之后,出现的错误具体为:

进去 hbase shell 之后,出现:

hbase(main):001:0> list_namespace
NAMESPACE
 
ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
        at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2811)
        at org.apache.hadoop.hbase.master.HMaster.getNamespaces(HMaster.java:3107)
        at org.apache.hadoop.hbase.master.MasterRpcServices.listNamespaceDescriptors(MasterRpcServices.java:1261)
        at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:418)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318)
 
For usage try 'help "list_namespace"'
 
Took 8.7219 seconds

比较伤脑筋。

其根源在于,有的server没有online

为这个问题搞了好久,包括换版本。但是自己确信早先是工作的啊。

后来彻底的初始化,才好了。其根源在于 ./hdfsdfs -rm-r /hbase 这句话。

因此,纯粹,彻底的初始化步骤:

清除/hbase文件系统,清除zk,然后才会好。

liuzhi@sihan-local:/data/hadoop-3.2.1/bin$ ./hdfs dfs -rm -r /hbase
Deleted /hbase
liuzhi@sihan-local:/data/hadoop-3.2.1/bin$ cd /data/zookeeper/
liuzhi@sihan-local:/data/zookeeper$ ./bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, hbase, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: localhost:2181(CONNECTED) 2] deleteall /hbase
Node does not exist: /hbase
[zk: localhost:2181(CONNECTED) 3] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: localhost:2181(CONNECTED) 4] quit
 

如果有kerberos的

Authentication is not valid : /hbase/splitWAL

.解决方式

 1) 先使用命令查看该节点的权限

 getAcl /hbase 返回结果如下图所示

可以看到sasl用户是hbase

2)编写jaas-zk-keytab.conf文件

Client {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/root/hbasenew.keytab"
   storeKey=true
   useTicketCache=false
   principal="hbase@RSD.COM";
};

在执行zookeeper-client前将jaas-zk-keytab.conf加载到环境变量

export CLIENT_JVMFLAGS="-Djava.security.auth.login.config=jaas-zk-keytab.conf"
4.登陆zookeeper

 zookeeper-client -server master:2181

连接客户端时候一定要用-server参数指定zookeeper节点,不然连接不上

5.删除节点

成功删除。

这样子纯粹做了一遍之后,重启hbase 确实好了

2、Permission denied: user=hbase, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

集成了kerberos的hbse可能会遇到这个问题

hdfs dfs -chown hbase:supergroup  /hbase

修改权限给hbase即可

3、          Call exception, tries=6, retries=16, started=6684 ms ago, cancelled=false, msg=Call to slave4/172.31.255.232:16020 failed on local exception: org.apache.hadoop.hbase.exceptions.ConnectionClosedException: Connection closed, details=row 'kudu_test,10130612953356,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=slave4.zhendao.com,16020,1658470013588, seqNum=-1

		//what principal the master/region. servers use.
		configuration.set("hbase.regionserver.kerberos.principal", "hbase/_HOST@FIELD.HORTONWORKS.COM"); 
		configuration.set("hbase.regionserver.keytab.file", "src/hbase.service.keytab"); 
		
		// this is needed even if you connect over rpc/zookeeper
		configuration.set("hbase.master.kerberos.principal", "hbase/_HOST@FIELD.HORTONWORKS.COM"); 
		configuration.set("hbase.master.keytab.file", "src/hbase.service.keytab");

 hbase的master和regionserver 的keytab需要分别指出

详细可以看下这个人的代码

HBase-Example/HBaseClient.java at master · kartik-dev/HBase-Example · GitHub

4、java.net.SocketTimeoutException: callTimeout=60000, callDuration=68908: Call to  xxx  failed on local exception: org.apache.hadoop.hbase.exceptions.ConnectionClosingException: Connection to xxx is closing.

  1. 使用hbase hbck查看表状态OK

  2. 查看hbase服务端regionserver日志没有任何异常,无法定位到根因

  3. 查看客户端/etc/hosts文件ip映射与dns等都正常。

  4. 将客户端日志级别和服务端对应报错的regionserver日志级别修改为trace级别。等待问题复现。

  5. 复现后发现服务端有如下异常打印,此打印说明业务再运行过程中用户发生了改变,由cdm_user变成了saxppopt用户。cdm_user没有对应的hbase用户权限,从而导致认证异常。

    问题解决参考 

在hbase服务级别core-site.xml文件中自定义hadoop.proxyuser.sxappopt.hosts=*,hadoop.proxyuser. sxappopt.groups=*两个参数,保存后重启hbase,修改这两个参数后可能会引起其他的一些组件之间的认证问题。

5、Could not initialize class org.apache.hadoop.hbase.ipc.RemoteWithExtrasException$ClassLoaderHolder等类

原因是以为项目引用了appche的jar包

解决

3.1将appche的版本

<version>2.1.0</version>换成<hbase.version>2.1.0-cdh6.3.2</hbase.version>

拷贝CDH相关的配置文件

  1. 将Hadoop的core-site.xml以及Hbase的hbase-site.xml复制到项目的src/main/resources目录下(CDH 版的相关配置文件在/etc/{module}下)
  2. 在项目的src/main/resources目录下创建log4j.properties文件(防止日志报红)

6、HBase时写入数据大于10M后报错,

hbase.DoNotRetryIOException: Cell with size 14363531 exceeds limit of 10485760 bytes  at org.apache.hadoop.hbase.regionserver.RSRpcServices.checkCellSizeLimit(RSRpcServices.java:944)

或者

java.lang.IllegalArgumentException: KeyValue size too large

这种情况是什么都没有配置的或程序中没有设置hbase.client.keyvalue.maxsize

第一个情况则是HBase默认一个单元格(cell)的数据大小是10M (10485760),通过以下两个参数去调整:

hbase.client.keyvalue.maxsize

hbase.server.keyvalue.maxsize

将这两个值调整到合适的大小即可。


 


版权声明:本文为h952520296原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。