Hadoop及Zookeeper+HBase完全分布式集群部署
Hadoop及HBase集群部署
一、 集群環境
- 系統版本
虛擬機:內存 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
- 軟件版本
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
- 主機環境
物理機:Window Server 2012 R2
虛擬機:VMware Workstation Pro 12
- 三臺虛擬機
=======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
- 集群環境
一共建立了三臺虛擬機
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用戶登入的
- 時間說明
書寫時間:2017-10-19
第一次更新時間:2017-10-22
二、 安裝基礎集群環境
- 基礎環境配置
為了配置方便,集群中防火墻已經全部關閉,並且禁止開機啟動
- 關閉防火墻
由於新版的CentOS-7 默認采用的firewalld防火墻,不是iptables,關閉命令為
systemctl stop firewalld
systemctl mask firewalld
如果想切換成iptables防火墻請如下操作:
安裝:yum install iptables-services
設置開機啟動 systemctl enable iptables
具體使用請看iptables基礎操作
註意:在集群中所有節點上執行相同的操作
- 配置/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
註意:在集群中所有節點上執行相同的操作
- 安裝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驗證是否安裝成功
結果:
註意:在集群中所有節點上執行相同的操作
- 安裝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"
- 安裝rsync
通過rsync工具,hadoop控制腳本能夠將配置文件分發到集群的各個節點中。 默認該功能未啟用,可以通過設置hadoop-env.sh中的HADOOP_MASTER變量啟動。 啟用rsync後,當工作節點的守護進程啟動後,會把以HADOOP_MASTER為根的目錄樹與本地的HADOOP_INSTALL目錄同步
yum install
rsync
註意:在集群中所有節點上執行相同的操作
- 配置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 保存即可
這樣就可以免密登錄了:
- 修改 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
- 解壓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
- Web界面查看
端口為50070
四、 安裝ZooKeeper
註意:zookeeper安裝在所有節點
- 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
- 啟動zookeeper集群
zookeeper啟動腳本位於zookeeper下的bin目錄下
啟動ZooKeeper
在ZooKeeper集群的每個結點上,執行啟動ZooKeeper服務的腳本,如下所示:
每一個節點機都得需要執行下面命令
bin/zkServer.sh start
zookeeper的日誌zookeeper.out默認位於zookeeper主目錄下,可通過修改${zkhome}/bin/zkEnv.sh中的ZOO_LOG_DIR變量來改變日誌路徑。
- 驗證是否安裝成功
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)。
- 在所有節點解壓hbase
tar -xzf hbase-1.1.5-bin.tar.gz
mv hbase-1.1.5-bin hbase
以下稱hbase主目錄為${HBASE_HOME}。
- 配置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
註意:將上述配置同步到集群中所有節點。
- 啟動停止HBase
HBase腳本位於${HBASE_HOME}/bin目錄下。
bin/start-hbase.sh
- 停止HBase
bin/stop-hbase.sh
- 如果啟動的時候出現此問題,就註釋下面內容
出錯地方
註釋的代碼
這個錯誤是時間沒有同步
註意:每一個節點機都配置
- 查看是否啟動成功
主機節點
節點機1、節點機2
註意:如果節點機HRegionServer進程,時間同步出現了問題,可以把時間同步加大
可以進入hbase shell,使用命令查看hbase狀態
查詢出表
出現下圖就表示真正成功了
- Web界面查看
端口為16010
六、 總結
至此:完全分布式Hadoop+Zookeeper+HBase集群測試環境基本圓滿完成,如有問題繼續研究,通過這3天的時間研究得到了很多的知識。
Hadoop及Zookeeper+HBase完全分布式集群部署