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.
使用hbase hbck查看表状态OK
查看hbase服务端regionserver日志没有任何异常,无法定位到根因
查看客户端/etc/hosts文件ip映射与dns等都正常。
将客户端日志级别和服务端对应报错的regionserver日志级别修改为trace级别。等待问题复现。
复现后发现服务端有如下异常打印,此打印说明业务再运行过程中用户发生了改变,由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相关的配置文件
- 将Hadoop的core-site.xml以及Hbase的hbase-site.xml复制到项目的src/main/resources目录下(CDH 版的相关配置文件在/etc/{module}下)
在项目的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
将这两个值调整到合适的大小即可。