HBase3.4.10 踩坑笔记

安装 目标:安装 HBase3.4.10,伪分布式,使用自带的 Zookeeper

参考
  1. 确保有 Java 环境
  2. 确保有 Hadoop 环境,我的是 Hadoop3.3.1[root@main ~]# start-all.shStarting namenodes on [0.0.0.0]上一次登录:一 3月 21 18:33:26 CST 2022pts/0 上Starting datanodes上一次登录:一 3月 21 18:34:12 CST 2022pts/0 上Starting secondary namenodes [main]上一次登录:一 3月 21 18:34:14 CST 2022pts/0 上Starting resourcemanager上一次登录:一 3月 21 18:34:23 CST 2022pts/0 上Starting nodemanagers上一次登录:一 3月 21 18:34:38 CST 2022pts/0 上[root@main ~]# jps81285 NameNode85095 Jps82118 SecondaryNameNode81593 DataNode83017 NodeManager82749 ResourceManager
  3. 下载并解压 压缩包(建议HBASE_HOME=/usr/local/hbase)
  4. 添加环境变量# hbase configexport HBASE_HOME=/usr/local/hbaseexport PATH=$PATH:$HBASE_HOME/bin
  5. 修改配置文件hbase/conf/hbase-site.xml,hbase/conf/hbase-env.sh,按自己的需求配
    1. hbase/conf/hbase-site.xml【HBase3.4.10 踩坑笔记】hbase.rootdirhdfs://localhost:9000/hbasehbase.cluster.distributedtruehbase.tmp.dir./tmphbase.unsafe.stream.capability.enforcefalsehbase.zookeeper.quorumlocalhost:2181
    2. hbase/conf/hbase-env.shexport JAVA_HOME=/usr/lib/jvm/javaexport HBASE_PID_DIR=/var/hbase/pidsexport HBASE_MANAGES_ZK=trueexport HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
  6. 常用命令# 启动start-hbase.sh# 关闭stop-hbase.sh# 查询hbase shell
  7. 正常结果[root@main ~]# start-hbase.shlocalhost: running zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-root-zookeeper-main.outrunning master, logging to /usr/local/hbase/logs/hbase-root-master-main.out: running regionserver, logging to /usr/local/hbase/logs/hbase-root-regionserver-main.out[root@main ~]# jps14917 Jps3478 SecondaryNameNode4119 ResourceManager4391 NodeManager2664 NameNode5609 HMaster5753 HRegionServer5450 HQuorumPeer2939 DataNode[root@main ~]# hbase shell2022-03-21 19:35:24,229 WARN[main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableHBase ShellUse "help" to get list of supported commands.Use "exit" to quit this interactive shell.For Reference, please visit: http://hbase.apache.org/2.0/book.html#shellVersion 2.4.10, r3e5359c73d1a96dd7d2ac5bc8f987e9a89ef90ea, Mon Feb 28 10:03:15 PST 2022Took 0.0069 secondshbase:001:0> create 'user','name','age','addr','phone','email'Created table userTook 2.7152 seconds=> Hbase::Table - userhbase:002:0> listTABLEuser1 row(s)Took 0.0979 seconds=> ["user"][root@main ~]# stop-hbase.shstopping hbase...............localhost: running zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-root-zookeeper-main.outlocalhost: stopping zookeeper.
遇到的问题
  1. 执行stop-hbase.sh命令,一直...;执行hbase shell命令,报错Server is not running yet
    [root@main ~]# stop-hbase.shstopping hbase... # 一直.hbase shell# 省略一些启动日志,只留最后一句hbase:001:0> create 'user','name','age','addr','phone','email'# 报错ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yetat org.apache.hadoop.hbase.master.HMaster.checkServiceStarted(HMaster.java:2821)at org.apache.hadoop.hbase.master.MasterRpcServices.isMasterRunning(MasterRpcServices.java:1205)at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:392)at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:356)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:336)For usage try 'help "create"' 查看日志hbase/logs/hbase-root-master-main.out,后搜索
    2022-03-19 22:57:46,728 WARN[RS-EventLoopGroup-3-1] concurrent.DefaultPromise: An exception was thrown by org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$4.operationComplete()java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.hbase.io.asyncfs.ProtobufDecoder.(ProtobufDecoder.java:69) 原因:(我的)Hadoop3.3.1 与 HBase3.4.10 有一点不兼容
    解决办法:hbase/conf/hbase-env.sh取消注释export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
  2. hbase shell执行命令,报错ERROR: KeeperErrorCode = ConnectionLoss for /hbase/master
    [root@main ~]# stop-hbase.shno hbase master found[root@main ~]# hbase shell# 省略一些启动日志,只留最后一句hbase:001:0> create 'user','name','age','addr','phone','email'# 报错ERROR: KeeperErrorCode = ConnectionLoss for /hbase/masterFor usage try 'help "create"' 原因:Hadoop处于安全模式
    解决办法:执行hdfs dfsadmin -safemode leave关闭安全模式,可能继续报错(下一个)
  3. 执行hdfs dfsadmin -safemode leave,报错
    [root@main ~]# hdfs dfsadmin -safemode leavesafemode: Your endpoint configuration is wrong; For more details see:http://wiki.apache.org/hadoop/UnsetHostnameOrPort 原因:hadoop/etc/hadoop/core-site.xml/configuration/property/value==0.0.0.0,见下面的代码
    fs.defaultFShdfs://0.0.0.0:9000 解决办法:将0.0.0.0改为localhost
  4. (这个问题请忽略)start-hbase.sh时 报错,日志包冲突
    [root@main ~]# start-hbase.shSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]running master, logging to /usr/local/hbase/logs/hbase-root-master-main.out 原因:日志包冲突
    解决:把HBase的改名,
    [root@main ~]# cd /usr/local/hbase/lib/client-facing-thirdparty[root@main client-facing-thirdparty]# mv slf4j-log4j12-1.7.30.jar slf4j-log4j12-1.7.30.jar.bak