Hbase集群启动、关闭以及问题解决。

445 阅读3分钟

1 配置环境变量

1.1 编辑.bashrc文件

sudo vim ~/.bashrc

1.2 在文件末尾添加

export HBASE_HOME=/usr/local/hbase

export PATH=$PATH:$HBASE_HOME/bin

2 在master节点启动hbase,在任意路径下执行:

start-hbase.sh

即可启动hbase。

2.1 如果启动日志中出现如下信息:

Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: 
Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.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.Reload4jLoggerFactory]

则说明hadoop和Hbase的log4j的jar包冲突了。

从日志信息中,可以看到两个不同的SLF4J绑定:

  1. slf4j-reload4j-1.7.36.jar 提供的 org.slf4j.impl.Reload4jLoggerFactory
  2. log4j-slf4j-impl-2.17.2.jar 提供的 org.slf4j.impl.StaticLoggerBinder

SLF4J的设计允许你更换日志框架而无需更改你的代码,但是如果存在多个这样的实现,它就不能确定应该使用哪一个。为了解决这个问题,需要移除一个冲突的实现。可以选择移除 slf4j-reload4j 或者 log4j-slf4j-impl,或者修改它们的名称。

例如,如果你想移除 slf4j-reload4j,你可以这样操作:

  1. 打开 /usr/local/hadoop/share/hadoop/common/lib/ 目录
  2. 删除 slf4j-reload4j-1.7.36.jar 文件ccc
  3. 重新启动hadoop和hbase

同样的,如果你想移除 log4j-slf4j-impl,你可以这样操作:

  1. 打开 /usr/local/hbase/lib/client-facing-thirdparty/ 目录
  2. 删除 log4j-slf4j-impl-2.17.2.jar 文件(或者重命名为log4j-slf4j-impl-2.17.2.jar.copy
  3. 重新启动hadoop和hbase

3 通过jps查看主节点Hmaster是否启动成功;通过jps查看从节点HRegionServer是否启动成功。

通过浏览器访问

http://192.168.10.128:60010 

可以通过web页面查看hbase集群信息,如下图所示。其中,192.168.10.128是hbase集群中master节点的ip地址,60010端口号在hbase-site.xml文件配置。

Image.png

4 关闭Hbase

stop-hbase.sh

4.1 如果关闭太慢,则可以先关闭主节点,通过下列命令:

hbase-daemon.sh stop master

再通过下列命令关闭Hbase:

stop-hbase.sh

4.2 如果此时通过jps查看slaver节点发现HRegionServer没有关闭,则通过

kill “HRegionServer进程id”

关闭HRegionServer即可。

***也有一个说法是zookeeper没有关闭,可以先关闭zookeeper在关闭hbase试试。

4.3 如果关闭时出现

no hbase master found

这种信息,一般是因为HBase 的 pid 文件默认存放路径为 /tmp 路径,因为可能被操作系统删除,系统找不到 HBase 的进程号。

解决方案:

4.3.1 通过kill命令杀死HMaster进程和HRegionServer进程

4.3.2 编辑hbase-env.sh(所有节点)

cd /usr/local/hbase/conf/
sudo vim hbase-env.sh

然后在文件中添加如下信息(所有节点)

export HBASE\_PID\_DIR=/usr/local/hbase/pids  #需要换成自己的路径

保存退出。

4.3.3 再次启动Hbase,然后关闭,应该就能正确关闭了。

5 使用hbase shell时遇到报错信息:

org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet

该信息表示hbase服务器未运行,一般有两种解决方案。先试第一种(5.1),第一种解决不了再试第二种(5.2)。

5.1 第一张解决方案说明当前集群是处于安全模式下的,下面是检测集群状态的方法:

5.1.1 进入到hadoop的bin目录下,执行

hdfs dfsadmin -safemode get #如果返回Safe mode is OFF 就说明没问题  Safe mode is ON 就说明集群正处于安全模式

5.1.2 如果显示集群处于安全模式,执行以下命令强制退出即可:

hdfs dfsadmin -safemode leave

//如果返回其他就说明集群出问题了 例如 返回如下内容

safemode: Call From hadoop01/192.168.100.100 to hadoop01:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see:  <http://wiki.apache.org/hadoop/ConnectionRefused>

可以重启一下集群试试.或者查看日志排查具体原因。

5.2 这种情况一般是因为hadoop的版本跟Hbase不兼容。

这时只需要在Hbase的hbase.site.xml的配置文件添加以下内容(所有节点都要此操作):

<property>
    <name>hbase.wal.provider</name>
    <value>filesystem</value>
</property>

然后重新启动Hbase即可。