1. 程式人生 > >19 大資料hbase-叢集安裝與常見問題解決

19 大資料hbase-叢集安裝與常見問題解決

首先說明,要使用hbase是需要先安裝hadoop和zookeeper的(也可以使用自帶的但是不建議),參考[zookeeper叢集安裝]
[hadoop叢集安裝]
我用的是三臺機器,mini1,mini2,mini3

Hbase的安裝流程
1、將hbase上傳到hadoop叢集,我這裡上傳的是hbase-0.99.2-bin.tar.gz。然後解壓並且重新命名為hbase,為了方便管理我講hbase移動到了app目錄下。(上傳、解壓、重新命名)

[[email protected] ~]# tar –zxvf  hbase-0.99.2-bin.tar.gz
[[email protected]
~]# mv hbase-0.99.2 hbase [[email protected] ~]# mv hbase apps [[email protected] ~]# cd apps/ [[email protected] apps]# ll 總用量 20 drwxr-xr-x. 8 root root 4096 10月 19 15:15 apache-flume-1.6.0-bin drwxrwxr-x. 10 hadoop hadoop 4096 9月 30 22:04 hadoop-2.6.4 drwxr-xr-x. 7 root root 4096 10月 30 00:20 hbase drwxr-xr-x. 8 root root 4096 10月 17 12:38 hive drwxr-xr-x. 10 root root 4096 10月 29 23:21 zookeeper-3.4.6

2、修改環境變數
在編輯模式下,最後面新增

[[email protected] apps]# vi /etc/profile
...
export HBASE_HOME=/opt/modules/app/hbase
export PATH=$PATH:$HBASE_HOME/bin

[[email protected] apps]#source /etc/profile

在機器mini2,mini3上也執行2操作修改環境變數(可通過拷貝)

scp profile mini2:/etc/profile

3、修改配置檔案()
修改的是 hbase-env.sh,hbase-site.xml, regionservers
hbase-env.sh新增內容如下
第一行指定jdk位置
第二行指定額外的classpath元素
第三行是關於jvm的可以不需要
第四行,true表示使用hbase自帶的zookeeper,false表示使用自己的zookeeper(推薦,至少趁此學一下zookeeper,相信學了hbase後面的storm跟spark也會去學,後面很多都要使用zookeeper,一勞永逸的事)。

export JAVA_HOME=/heima32/jdk1.7.0_55/
export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
export HBASE_MANAGES_ZK=false

hbase-site.xml內容新增如下:(vi  hbase-site.xml)

<configuration>
<property>
<name>hbase.master</name>
<value>mini1:60000</value>
<description>指定hbase的主節點與埠號</description>
</property>
<property>
<name>hbase.master.maxclockskew</name> 
<value>180000</value>
<description>時間同步允許的時間差</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mini1:8020/hbase</value>
<description>hbase共享目錄,持久化hbase資料,這個需要看你hadoop的核心檔案裡面配置的是不是mini1:9000不是的話得改成自己的hadoop裡面寫的</description>
</property>
<property>
<name>hbase.cluster.distributed</name> 
<value>true</value>
<description>是否是分散式的,當然</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>mini1,mini2,mini3</value>
<description>指定zookeeper,我的zookeeper叢集就是在這三臺機器的</description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/hbase/tmp/zookeeper</value>
<description>zookeeper配置資訊快照的位置,目錄會自己建立的</description>
</property>
</configuration>

regionservers裡面新增從節點機器名(vi regionservers)

mini2
mini3

4、將按照配置好的hbase上傳到其他機器
這裡是mini1配置好了,傳送到mini2和mini3機器

scp -r hbase hadoop05:/opt/modules/app/

5、啟動hbase
進入到mini1的hbase的bin目錄下啟動
啟動完了使用jsp命令檢視是否啟動起來了

[[email protected] bin]# ./start-hbase.sh 
starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out
mini2: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini2.out
mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out
[[email protected] bin]# jps
1593 ResourceManager
7133 HMaster
4550 QuorumPeerMain
2831 NameNode
7310 Jps

注:啟動起來的前提需要啟動hadoop和zookeeper,最後啟動的話,那麼mini1機器上會多出HMaster程序,mini2和mini3上多出了HRegionServer。

常見問題解決
這些問題都是我遇到的
下面的是自己的hosts檔案,三臺機器一樣

[[email protected] bin]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 localhost.jinbm
192.168.25.127 mini1
192.168.25.129 mini2
192.168.25.130 mini3

1、如果啟動不起來,檢視日誌出現下面的異常

Cause:
org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: 
Server mini2,16020,1508608510960 has been rejected; Reported time is too far out of sync with master.  
Time difference of 428987358ms > max allowed of 180000ms

出現這個問題是當時我mini2這臺機器和mini1的時間差太多了記得是4天,明顯大於配置檔案中寫的時間同步允許的時間差也就是180000ms。

同步時間即可
ntpdate沒有的話安裝就好了
每臺機器都像下面這樣執行

[[email protected] bin]# ntpdate
-bash: ntpdate: command not found
[[email protected] bin]# yum install ntp
...
[[email protected] bin]# ntpdate
30 Oct 06:21:25 ntpdate[10542]: no servers can be used, exiting
[[email protected] bin]# ntpdate -u ntp.api.bz
29 Oct 22:22:37 ntpdate[10543]: step time server 115.28.122.198 offset -28798.299112 sec
[[email protected] bin]# date
2017年 10月 29日 星期日 22:22:44 CST

在使用ntpdate同步時間時出現以下錯誤:

ntpdate[46700]: no server suitable for synchronization found

沒有找到好的解決方案,只能換另外一個工具來完成時間同步。

這裡使用的Centos6.5,yum源使用的是阿里雲的映象。

yum install -y rdate
安裝完畢後,使用下述命令即可。

rdate -s time-b.nist.gov

然後啟動出現的問題如下

[[email protected] bin]# ./start-hbase.sh 
starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out
[email protected]'s password: [email protected]'s password: 
mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out

這個時候我們只能輸一個密碼,所以有一個肯定是啟動不了的。
解決辦法:設定mini1在mini2和mini3上免密登入。

免密登入,先生存祕鑰,在mini2和mini3上授權認證通過。
[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
52:1e:06:fa:7e:01:3d:a6:1d:bd:cb:19:08:86:cc:ca [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|      .          |
|   o o o .       |
|    = + O .      |
| . . o X = .     |
|  E   + S o      |
|     . . o +     |
|      . . +      |
|       .         |
|                 |
+-----------------+
[[email protected] ~]# cd .ssh/
[[email protected] .ssh]# ll
總用量 12
-rw-------. 1 root root 1675 10月 30 00:31 id_rsa
-rw-r--r--. 1 root root  392 10月 30 00:31 id_rsa.pub
-rw-r--r--. 1 root root 2359 10月 13 04:33 known_hosts
[[email protected] .ssh]# ssh-copy-id mini2
[email protected]'s password: 
Now try logging into the machine, with "ssh 'mini2'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[[email protected] .ssh]# ssh-copy-id mini3
[email protected]'s password: 
Now try logging into the machine, with "ssh 'mini3'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
測試免密登入
[[email protected] .ssh]# ssh mini2
Last login: Mon Oct 30 00:25:33 2017 from mini1
[[email protected] ~]# 

再次啟動OK

[[email protected] bin]# ./start-hbase.sh 
starting master, logging to /root/apps/hbase/logs/hbase-root-master-mini1.out
mini2: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini2.out
mini3: starting regionserver, logging to /root/apps/hbase/bin/../logs/hbase-root-regionserver-mini3.out

測試HRegionServer上下線

單獨啟動HRegionServer節點:

啟動叢集中所有的regionserver
./hbase-daemons.sh start regionserver
啟動某個regionserver
./hbase-daemon.sh start regionserver