1. 程式人生 > >Hadoop及Zookeeper+HBase完全分布式集群部署

Hadoop及Zookeeper+HBase完全分布式集群部署

ng- 根據 標識 部署 mina 軟件包 大小 apache enable

Hadoop及HBase集群部署

一、 集群環境

  1. 系統版本

虛擬機:內存 16G CPU 雙核心

系統: CentOS-7 64位

系統下載地址:

http://124.202.164.6/files/417500000AB646E7/mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso

  1. 軟件版本

hadoop-2.8.1.tar.gz

hbase-1.3.1-bin.tar.gz

zookeeper-3.4.10.tar.gz

jdk-8u144-linux-x64.tar.gz

  1. 主機環境

物理機:Window Server 2012 R2

虛擬機:VMware Workstation Pro 12

  1. 三臺虛擬機

=======Hamster======

I P:192.168.0.10

用戶名:hadoop

=======hslave-1======

I P:192.168.0.11

用戶名:hadoop

=======hslave-2======

I P:192.168.0.12

用戶名:hadoop

  1. 集群環境

一共建立了三臺虛擬機

Ip節點名稱為:

Master節點

192.168.0.10 hmaster.hcluster

Slave節點

192.168.0.11 hslave-1.hcluster

192.168.0.12 hslave-2.hcluster

三個虛擬機上都必須安裝zookeeper

註意:操作說明,命令前面有#號代表root用戶登入的

  1. 時間說明

書寫時間:2017-10-19

第一次更新時間:2017-10-22

二、 安裝基礎集群環境

  1. 基礎環境配置

為了配置方便,集群中防火墻已經全部關閉,並且禁止開機啟動

  1. 關閉防火墻

由於新版的CentOS-7 默認采用的firewalld防火墻,不是iptables,關閉命令為

systemctl stop firewalld

systemctl mask firewalld

如果想切換成iptables防火墻請如下操作:

安裝:yum install iptables-services

設置開機啟動 systemctl enable iptables

具體使用請看iptables基礎操作

註意:在集群中所有節點上執行相同的操作

  1. 配置/etc/hosts

編輯/etc/host文件,加入集群節點的IP與Hostname對應關系

192.168.0.10 hmaster hmaster.hcluster

192.168.0.11 hslave-1 hslave-1.hcluster

192.168.0.12 hslave-2 hslave-2.hcluster

註意:在集群中所有節點上執行相同的操作

  1. 安裝Java

1) 解壓jdk-8u144-linux-x64.tar.gz至/opt目錄

tar -xzf jdk-7u79-linux-x64.tar.gz -C

/opt

2) 添加Java環境變量到文件/etc/profile的最後

=================JAVA_HOME===================

export
JAVA_HOME="/opt/jdk1.8.0_144"

export JAVA_BIN=$JAVA_HOME/bin

export JAVA_LIB=$JAVA_HOME/lib

export
CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar

export PATH=$JAVA_BIN:$PATH

3) 導入環境變量

source /etc/profile

4) 驗證安裝結果

執行java -version驗證是否安裝成功

結果:

註意:在集群中所有節點上執行相同的操作

  1. 安裝ntp

在Hadoop集群中, 需要保證各節點的時鐘同步

1) 在所有節點安裝ntp服務

yum install ntp ntpdate

2) Master節點配置

在Master節點,編輯配置文件/etc/ntp.conf,
添加如下配置,使Master節點的ntp服務接受來自集群網段的時間同步請求

restrict 192.168.1.0 mask 255.255.255.0
nomodify notrap

3) 啟動Master節點的ntpd服務,並設置為開機啟動

chkconfig --level 345 ntpd on

service ntpd start

4) Slave節點配置

在Slave節點,編輯配置文件/etc/ntp.conf,
添加如下配置,使之與Master節點的時鐘進行同步

server hamster

第一次啟動Slave節點上的ntpd前,先手動與Master節點進行時鐘同步

ntpdate hamster

5) 啟動Slave節點的ntpd服務,並設置為開機啟動

chkconfig --level 345 ntpd on

service ntpd start

註意:Ntpd啟動的時候通常需要一段時間大概5分鐘進行時間同步,所以在ntpd剛剛啟動的時候還不能正常提供時鐘服務,報錯"no server
suitable for synchronization found"

  1. 安裝rsync

通過rsync工具,hadoop控制腳本能夠將配置文件分發到集群的各個節點中。 默認該功能未啟用,可以通過設置hadoop-env.sh中的HADOOP_MASTER變量啟動。 啟用rsync後,當工作節點的守護進程啟動後,會把以HADOOP_MASTER為根的目錄樹與本地的HADOOP_INSTALL目錄同步

yum install

rsync

註意:在集群中所有節點上執行相同的操作

  1. 配置Master節點到所有節點的無密碼登錄

前提: 集群各節點使用相同的登錄用戶名,且不建議使用root用戶,本文中使用用戶名hadoop。

在所有節點上創建用戶hadoop

useradd hadoop

passwd hadoop

New password:

Retype new password:

passwd: all authentication tokens updated
successfully.

1) 在Master節點上生成主機密鑰

在Master 第一個機器節點上,切換hadoop用戶進行設置

$ ssh-keygen -t rsa -P ‘’

一路回車,最後輸入y回車

執行上述命令後,一路回車,會在.ssh下生成私鑰id_rsa和公鑰id_rsa.pub兩個文件

2) 復制Master公鑰到被登錄節點的authorized_keys文件中

首先配置Master到Master的無密碼登錄

註意:以下步驟必須在hadoop(只要不是root用戶就可以)用戶下進行創建.ssh文件夾,然後復制authorized_keys文件,在hadoop用戶下設置對應的權限

cat .ssh/id_rsa.pub >>

.ssh/authorized_keys

chmod 600 .ssh/authorized_keys

然後配置Master到Slave的無密碼登錄,將Master節點id_rsa.pub中的內容復制到Slave節點的${HOME}/.ssh/authorized_keys文件中

3) 首先將公鑰文件傳到Slave節點

scp .ssh/id_rsa.pub hadoop@hslave-1:/home/hadoop/id_rsa.pub.hmaster

4) 在Slave節點上創建文件.ssh/authorized_keys

mkdir .ssh

cat id_rsa.pub.hmaster >>

.ssh/authorized_keys

chmod 700 .ssh

chmod 600 .ssh/authorized_keys

rm -f id_rsa.pub.hmaster

5) 依次在所有Slave節點上執行相同的操作,並在Master節點登錄Slave進行驗證

ssh hslave-1

6) 如果不能連接

在root用戶下打開Terminal

輸入命令 cat /etc/passwd

從上圖可以看出hadoop用戶,缺少了一個定義,然後用gedit或者vim編輯

gedit /etc/passwd

在1001: 這裏添加hadoop 保存即可

這樣就可以免密登錄了:

  1. 修改 ulimit 限制

1) 這個配置針對HBase

參照HBase官方文檔

因為HBase 會在同一時間打開大量的文件句柄和進程,超過 Linux 的默認限制,導致可能會出現如下錯誤。

所以編輯/etc/security/limits.conf文件,添加以下兩行,提高能打開的句柄數量和進程數量

hadoop - nofile 32768

hadoop - nproc 32000

還需要在/etc/pam.d/common-session 加上這一行:

否則在/etc/security/limits.conf上的配置不會生效。

最後還要註銷(logout或者exit)後再登錄,這些配置才能生效

判斷是否生效:

登錄hadoop用戶之後,在命令行中輸入:ulimit -n -u

查看最大文件和進程數量是否改變了。

返回結果如下:就成功了

註意:在集群中所有節點上執行相同的操作

至此, 集群及Hadoop的依賴配置已經完成,下面進行Hadoop的安裝。

三、 安裝Hadoop

  1. 解壓hadoop tar包

1) 將hadoop軟件包上傳至集群各節點並解壓

本文中將hadoop-2.5.1.tar.gz上傳至hadoop用戶的主目錄/home/hadoop下。

tar -xzf hadoop-2.5.1.tar.gz

mv hadoop-2.5.1 hadoop

註意:在集群中所有節點上執行相同的操作

2) 設置hadoop文件的權限普通用戶

chown -R Hadoop:Hadoop /home/Hadoop/hadoop

3) 配置hadoop各配置文件

hadoop的配置文件位於/home/hadoop/etc/hadoop下

a) 修改jdk路徑

b) core-site.xml

用於定義系統級別的參數,如HDFS URL、Hadoop的臨時目錄以及用於rack-aware集群中的配置文件的配置等

Slave主機修改hmaster為相應的節點名稱例如第一臺:hslave-1

c) hdfs-site.xml

HDFS的相關設定,如文件副本的個數、塊大小及是否使用強制權限等

d) mapred-site.xml.template

HDFS的相關設定,如reduce任務的默認個數、任務所能夠使用內存的默認上下限等

Slave主機修改hmaster為相應的節點名稱例如第一臺:hslave-1

e) yarn-site.xml

Slave主機修改hmaster為相應的節點ip地址例如第一臺:192.168.0.11

f) slaves

Hadoop集群的slave主機列表,master啟動時會通過SSH連接至此列表中的所有主機並為其啟動DataNode和NodeManager

文件在:hadoop/etc/hadoop/slaves

hslave-1

hslave-2

Master 主機特有的配置

g) 如果這個文件不存在就新建一個文件名字為masters,裏面寫入hmaster這個主機節點

Master 主機特有的配置

4) 配置環境變量

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

5) 格式化HDFS存儲

進入hadoop下的bin目錄(只在主機上操作)

./hdfs

namenode -format

在格式化過程中註意輸出結果,成功後會有類似下面的輸出:

出現上圖就是成功了

6) 啟動Hadoop服務

啟動和停止腳本位於hadoop下sbin目錄

a) 啟動HDFS

sbin/start-dfs.sh

b) 啟動Yarn

sbin/start-yarn.sh

c) 啟動MapReduce JobHistory Server

sbin/mr-jobhistory-daemon.sh start

historyserver

d) 啟動所有一句話就可以

sbin/start-all.sh

e) 驗證服務是否正常運行 查看Master節點上服務:

新打開一個Terminal,然後輸入jps查看結果

節點機輸入jps

7) 停止Hadoop服務

a) 停止HDFS

sbin/stop-dfs.sh

b) 停止Yarn

sbin/stop-yarn.sh

c) 停止MapReduce JobHistory Server

sbin/mr-jobhistory-daemon.sh stop

historyserver

d) 停止所有一句話就可以

sbin/stop-all.sh

  1. Web界面查看

端口為50070

四、 安裝ZooKeeper

註意:zookeeper安裝在所有節點

  1. zookeeper安裝在所有節點

a) 在所有節點上解壓zookeeper

b) zookeeper配置文件zoo.cfg位於zookeeper下的conf目錄下,默認不存在,可根據zoo_sample.cfg生成

cd conf

cp zoo_sample.cfg zoo.cfg

c) zoo.cfg配置後內容如下:

The number of milliseconds of each tick

tickTime=2000

The number of ticks that the initial

synchronization phase can take

initLimit=10

The number of ticks that can pass between

sending a request and getting an

acknowledgement

syncLimit=5

the directory where the snapshot is

stored.

do not use /tmp for storage, /tmp here is

just

example sakes.

dataDir=/home/hadoop/zookeeper/data

dataLogDir=/home/hadoop/zookeeper/logs

the port at which the clients will

connect

clientPort=2181

the maximum number of client connections.

increase this if you need to handle more

clients

maxClientCnxns=60

Be sure to read the maintenance section

of the

administrator guide before turning on

autopurge.

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

The number of snapshots to retain in

dataDir

autopurge.snapRetainCount=3

Purge task interval in hours

Set to "0" to disable auto

purge feature

autopurge.purgeInterval=1

server.1=0.0.0.0:2888:3888

server.2=192.168.0.11:2888:3888

server.3=192.168.0.12:2888:3888

將zoo.cfg同步到zookeeper所有節點

d) 創建zookeeper數據目錄,並建立節點標識文件myid

在hmaster節點創建標識為1的文件myid

mkdir -p /home/hadoop/zookeeperdata/data

echo "1" >

/home/hadoop/zookeeperdata/data/myid

同理,與zoo.cfg中配置相對應,在hslave-1和hslave-2節點上分別創建標識為2和3的標識文件。

e) hslave-1

mkdir -p /home/hadoop/zookeeperdata/data

echo "2" >

/home/hadoop/zookeeperdata/data/myid

f) hslave-2

mkdir -p /home/hadoop/zookeeperdata/data

echo "3" >

/home/hadoop/zookeeperdata/data/myid

  1. 啟動zookeeper集群

zookeeper啟動腳本位於zookeeper下的bin目錄下

啟動ZooKeeper

在ZooKeeper集群的每個結點上,執行啟動ZooKeeper服務的腳本,如下所示:

每一個節點機都得需要執行下面命令

bin/zkServer.sh start

zookeeper的日誌zookeeper.out默認位於zookeeper主目錄下,可通過修改${zkhome}/bin/zkEnv.sh中的ZOO_LOG_DIR變量來改變日誌路徑。

  1. 驗證是否安裝成功

a) 安裝完成之後,新打開一個Terminal,輸入jps進行查看,是否有QuorumPeerMain線程存在,以下圖片是沒有此線程,

b) 然後在剛才bin目錄下輸入指令:cat zookpeer.out

如果返回結果為:

c) 然後結果是java的環境變量可能沒有起作用

輸入命令 source /etc/profile

d) 防火墻問題,需要關閉防火墻

systemctl disable firewalld

service iptables stop

e) 看到下圖紅色框內進程有了就代表成功了

f) 輸入命令查看狀態是否啟動成功

./zkServer.sh status

非常大的註意:

如果遇到第一個啟動之後,但是輸入:# ./zkServer.sh status

出現

代表其他節點上的還沒有啟動,要接著去啟動其他節點機上的zookeeper,

啟動之後在輸入查看

就正常了

五、 HBase安裝

HBase集群架構分為1個HMaster(hmaster)和2個HRegionServer(hslave-1,
hslave-2)。

  1. 在所有節點解壓hbase

tar -xzf hbase-1.1.5-bin.tar.gz

mv hbase-1.1.5-bin hbase

以下稱hbase主目錄為${HBASE_HOME}。

  1. 配置HBase

hbase配置文件位於${HBASE_HOME}/conf目錄下。

1) hbase-env.sh

主要改兩個配置:

export JAVA_HOME=/opt/jdk1.8.0_79

export HBASE_MANAGES_ZK=false

2) hbase-site.xml

這裏要特別註意的是hbase.rootdir裏面的HDFS地址是要跟Hadoop 的core-site.xml裏面的fs.defaultFS 的HDFS的IP地址或者域名、端口必須一致。其次是hbase.zookeeper.property.dataDir,其中a01513是我的操作系統用戶名,根據你自己的情況改吧,或者放到其他目錄也是可以的。hbase.cluster.distributed 是啟用分布式模式,這裏必須為true哦。hbase.zookeeper.quorum是配置集群IP地址集或者域名集,逗號分隔。hbase.master配置HBase的主節點端口,web端口是60010,通過web UI你可以確認你是否訪問成功了。

3) 配置regionservers主機列表

hslave-1

hslave-2

4) 節點機列表都為

hslave-1

hslave-2

註意:將上述配置同步到集群中所有節點。

  1. 啟動停止HBase

HBase腳本位於${HBASE_HOME}/bin目錄下。

bin/start-hbase.sh

  1. 停止HBase

bin/stop-hbase.sh

  1. 如果啟動的時候出現此問題,就註釋下面內容

出錯地方

註釋的代碼

這個錯誤是時間沒有同步

註意:每一個節點機都配置

  1. 查看是否啟動成功

主機節點

節點機1、節點機2

註意:如果節點機HRegionServer進程,時間同步出現了問題,可以把時間同步加大

  1. 可以進入hbase shell,使用命令查看hbase狀態

  2. 查詢出表

出現下圖就表示真正成功了

  1. Web界面查看

端口為16010

六、 總結

至此:完全分布式Hadoop+Zookeeper+HBase集群測試環境基本圓滿完成,如有問題繼續研究,通過這3天的時間研究得到了很多的知識。

Hadoop及Zookeeper+HBase完全分布式集群部署