搭建 HBase环境
centos:7
java 8
HBase 2.1.3
zookeep 2.1.13
/soft/hadoop /soft/hbase
HBase 需要事先安装Hadoop , zookeeper
hadoop :192.168.101.110:8200
zookeeper :192.168.101.110:2181
安装
1. 下载地址:https://mirrors.cnnic.cn/apache/hbase/2.1.3/
wget https://mirrors.cnnic.cn/apache/hbase/2.1.3/hbase-2.1.3-bin.tar.gz
```
cd ~/download
rz ***
```
2. 解压到/soft/hbase 目录下
```
tar -xvf hbase-2.1.3-bin.tar.gz -C /soft/hbase/
```
2.2.1 配置HBase环境变量并添加一下信息
sudo vim /etc/profile ## set hbase export HBASE_HOME=/soft/hbase/hbase-2.1.3 export PATH=$PATH:$HBASE_HOME/bin ## 配置用户级别 cd ~ vim .bash_profile ## set hbase export HBASE_HOME=/soft/hbase/hbase-2.1.3 export PATH=$PATH:$HBASE_HOME/bin # source source /etc/profile source .bash_profile
2.2.2 配置config (/hbase-2.1.3/conf/目录下) 1). 修改hbase-env.sh ``` export JAVA_HOME=/usr/java/jdk1.8.0_181
## 不使用自带的 zookeeper export HBASE_MANAGES_ZK=false ``` 2). 配置hbase-site.xml ```
hbase.rootdir hdfs://192.168.101.110/hbase hbase.cluster.distributed true hbase.zookeeper.quorum 192.168.101.110:2181 ``` 3). 将core-site.xml hdfs-site.xml 复制过来 4). 修改 regionservers文件 (配置主机名(hostname)) vim regionservers 192.168.101.110 hbase.unsafe.stream.capability.enforce false
集群环境搭建
./start-hbase.sh
启动完了之后可以通过查看相应的logs 日志查看启动是否正常,
查看hbase进程(jps):
4768 SecondaryNameNode
5504 QuorumPeerMain -- zk相关
13104 Jps
4417 NameNode
5137 NodeManager
9461 HRegionServer -- hbase相关
4571 DataNode
9292 HMaster -- hbase相关
5005 ResourceManager
### hbase启动方式之二:启动我们自己安装的zookeeper,并分别启动master和regionserver:
```
./bin/zkServer.sh start
./bin/hbase-daemon.sh start master
./bin/hbase-daemon.sh start regionserver
```
查看hbase进程: 同上
http://192.168.8.201:16010
./hbase-daemon.sh start master
### 4. 停止hbase进程:
```
./bin/stop-hbase.sh
```
### 3.1 启动hbase报java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
```
java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:635)
Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
```
处理方式:原因是启动缺少相应的jar所以报错了,需要将指定的包复制到lib 目录
```
cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
'''
### 3.2 本地单机部署hbase,想要使用独立zookeeper,不使用自带的
vim conf/hbase-env.sh
export HBASE_MANAGES_ZK=false
设置不使用自带zookeeper,这一步设置完按理说就可以使用独立的zookeeper程序了,但是总是报错:
```
Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting as clients (e.g. shell) will not be able to find this ZK quorum.
```
很明显,这是启动自带zookeeper与独立zookeeper冲突了
很疑惑,明明设置不启动自带zookeeper了,为什么还是去启动了,后来上网查询才知道,把hbase.cluster.distributed设置为false,也就是让hbase以standalone模式运行时,依然会去启动自带的zookeeper.所以要做如下设置,值为true
vim conf/hbase-site.xml
hbase.cluster.distributed
true
检查logs 日志之后没有发现报错的信息。
产生错误的原因:zookeeper 链接信息过期了
解决办法:进入zookeeper 删除hbase (rmr /hbase )重启zookeeper即可
具体步骤:
1、停止hbase(./stop-hbase.sh)
2、运行如下代码
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
3、运行如下代码
/usr/local/hadoop/app/zookeeper-3.4.6/bin/zkCli.sh
4、使用 ls /来扫描zookeeper中的数据
5、使用 rmr/hbase删除zookeeper中的hbase数据
6、重新启动hbase即可
3.4 hbase 启动之后,进程显示正常,但是调试接口的时候发现报错。Failed open of region=hbase:meta
详细提示如下:
2019-07-08 10:44:51,317 ERROR [RS_OPEN_META-regionserver/hbase-1:16020-0] handler.OpenRegionHandler: Failed open of region=hbase:meta,,1.1588230740
java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper
at org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutputHelper.createOutput(AsyncFSOutputHelper.java:51)
at org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.initOutput(AsyncProtobufLogWriter.java:169)
at org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.init(AbstractProtobufLogWriter.java:166)
..........
at org.apache.hadoop.hbase.wal.WALFactory.getWAL(WALFactory.java:284)
at org.apache.hadoop.hbase.regionserver.HRegionServer.getWAL(HRegionServer.java:2127)
at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:284)
at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:108)
at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:104)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
问题原因:
经过查看相关的资料,网上有以下说法:
1. hbase-site.xml 文件配置的目录hbase.tmp.dir,hbase.zookeeper.property.dataDir等目录没有读写权限导致相关的表信息保存不上。ps:有可能搭建的hadoop 目录也可能会会存在该问题。注意配置路径有读写的权限。
2. RegionServer因无法初始化对HDFS的访问而中止
vim conf/hbase-site.xml
hbase.wal.provider
filesystem
经过上边的配置,发现问题解决~
3. 【1】删除新集群上zookeeper上有关该表的节点,【2】清除新集群hdfs上和该表有关的数据,【3】重启新集群上的所有RegionServer
2.1 集群规划
主机 | Hmaster | HregionService |
---|---|---|
s201 | 主 | |
s202 | 备 | 从 |
s203 | 从 | |
s204 | 从 |
2.2 配置
服务器时间同步
yum install ntp -y
ntpdate 时间服务器
hbase-env.sh配置(同单机环境)
JAVA_HOME=/usr/local/java/jdk1.8.0_191
HBASE_MANAGES_ZK=false(关闭Hbase本身的zookeeper集群)
hbase-site.xml配置
hbase.rootdir
hdfs://s201/hbase
hbase.cluster.distributed
true
hbase.zookeeper.quorum
s201,s202,s203,s204
hbase.unsafe.stream.capability.enforce
false
regionservers配置
s202
s203
s204
backup-masters配置(注意backup-masters需要手动创建)
s202
将hdfs当中的hdfs-site.xml **拷贝hbase的conf目录下(因为存储数据需要在hdfs上,同单机版)
启动: 在s201(Master节点) 执行 bin/start-hbase.sh启动主节点。
jps查看进程。主节点HMaster, 备 HMaster ,HRegionService 从节点:HRegionService
浏览器器访问
http://s201:16010