Hadoop及HBase集羣部署html
1、 集羣環境java
虛擬機:內存 16G CPU 雙核心node
系統: CentOS-7 64位linux
系統下載地址:web
http://124.202.164.6/files/417500000AB646E7/mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.isoshell
hadoop-2.8.1.tar.gzapache
hbase-1.3.1-bin.tar.gzvim
zookeeper-3.4.10.tar.gzcentos
jdk-8u144-linux-x64.tar.gzsession
物理機: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
2、 安裝基礎集羣環境
爲了配置方便,集羣中防火牆已經所有關閉,而且禁止開機啓動
因爲新版的CentOS-7 默認採用的firewalld防火牆,不是iptables,關閉命令爲
systemctl stop firewalld
systemctl mask firewalld
若是想切換成iptables防火牆請以下操做:
安裝:yum install iptables-services
設置開機啓動 systemctl enable iptables
具體使用請看iptables基礎操做
注意:在集羣中全部節點上執行相同的操做
編輯/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) 解壓jdk-8u144-linux-x64.tar.gz至/opt目錄
/opt
2) 添加Java環境變量到文件/etc/profile的最後
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) 導入環境變量
4) 驗證安裝結果
執行java -version驗證是否安裝成功
結果:
注意:在集羣中全部節點上執行相同的操做
在Hadoop集羣中, 須要保證各節點的時鐘同步
1) 在全部節點安裝ntp服務
2) Master節點配置
在Master節點,編輯配置文件/etc/ntp.conf,
添加以下配置,使Master節點的ntp服務接受來自集羣網段的時間同步請求
restrict 192.168.1.0 mask 255.255.255.0
nomodify notrap
3) 啓動Master節點的ntpd服務,並設置爲開機啓動
4) Slave節點配置
在Slave節點,編輯配置文件/etc/ntp.conf,
添加以下配置,使之與Master節點的時鐘進行同步
server hamster
第一次啓動Slave節點上的ntpd前,先手動與Master節點進行時鐘同步
5) 啓動Slave節點的ntpd服務,並設置爲開機啓動
注意:Ntpd啓動的時候一般須要一段時間大概5分鐘進行時間同步,因此在ntpd剛剛啓動的時候還不能正常提供時鐘服務,報錯"no server
suitable for synchronization found"
經過rsync工具,hadoop控制腳本可以將配置文件分發到集羣的各個節點中。 默認該功能未啓用,能夠經過設置hadoop-env.sh中的HADOOP_MASTER變量啓動。 啓用rsync後,當工做節點的守護進程啓動後,會把以HADOOP_MASTER爲根的目錄樹與本地的HADOOP_INSTALL目錄同步
rsync
注意:在集羣中全部節點上執行相同的操做
前提: 集羣各節點使用相同的登陸用戶名,且不建議使用root用戶,本文中使用用戶名hadoop。
在全部節點上建立用戶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用戶下設置對應的權限
.ssh/authorized_keys
而後配置Master到Slave的無密碼登陸,將Master節點id_rsa.pub中的內容複製到Slave節點的${HOME}/.ssh/authorized_keys文件中
3) 首先將公鑰文件傳到Slave節點
4) 在Slave節點上建立文件.ssh/authorized_keys
.ssh/authorized_keys
5) 依次在全部Slave節點上執行相同的操做,並在Master節點登陸Slave進行驗證
6) 若是不能鏈接
在root用戶下打開Terminal
輸入命令 cat /etc/passwd
從上圖能夠看出hadoop用戶,缺乏了一個定義,而後用gedit或者vim編輯
gedit /etc/passwd
在1001: 這裏添加hadoop 保存便可
這樣就能夠免密登陸了:
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的安裝。
3、 安裝Hadoop
1) 將hadoop軟件包上傳至集羣各節點並解壓
本文中將hadoop-2.5.1.tar.gz上傳至hadoop用戶的主目錄/home/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目錄(只在主機上操做)
namenode -format
在格式化過程當中注意輸出結果,成功後會有相似下面的輸出:
出現上圖就是成功了
6) 啓動Hadoop服務
啓動和中止腳本位於hadoop下sbin目錄
a) 啓動HDFS
b) 啓動Yarn
c) 啓動MapReduce JobHistory Server
historyserver
d) 啓動全部一句話就能夠
sbin/start-all.sh
e) 驗證服務是否正常運行 查看Master節點上服務:
新打開一個Terminal,而後輸入jps查看結果
節點機輸入jps
7) 中止Hadoop服務
a) 中止HDFS
b) 中止Yarn
c) 中止MapReduce JobHistory Server
historyserver
d) 中止全部一句話就能夠
sbin/stop-all.sh
端口爲50070
4、 安裝ZooKeeper
注意:zookeeper安裝在全部節點
a) 在全部節點上解壓zookeeper
b) zookeeper配置文件zoo.cfg位於zookeeper下的conf目錄下,默認不存在,可根據zoo_sample.cfg生成
c) zoo.cfg配置後內容以下:
tickTime=2000
initLimit=10
acknowledgement
syncLimit=5
stored.
just
dataDir=/home/hadoop/zookeeper/data
connect
clientPort=2181
clients
of the
autopurge.
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
dataDir
purge feature
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
/home/hadoop/zookeeperdata/data/myid
同理,與zoo.cfg中配置相對應,在hslave-1和hslave-2節點上分別建立標識爲2和3的標識文件。
e) hslave-1
/home/hadoop/zookeeperdata/data/myid
f) hslave-2
/home/hadoop/zookeeperdata/data/myid
zookeeper啓動腳本位於zookeeper下的bin目錄下
啓動ZooKeeper
在ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本,以下所示:
每個節點機都得須要執行下面命令
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,
啓動以後在輸入查看
就正常了
5、 HBase安裝
HBase集羣架構分爲1個HMaster(hmaster)和2個HRegionServer(hslave-1,
hslave-2)。
如下稱hbase主目錄爲${HBASE_HOME}。
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_HOME}/bin目錄下。
出錯地方
註釋的代碼
這個錯誤是時間沒有同步
注意:每個節點機都配置
主機節點
節點機一、節點機2
注意:若是節點機HRegionServer進程,時間同步出現了問題,能夠把時間同步加大
能夠進入hbase shell,使用命令查看hbase狀態
查詢出表
出現下圖就表示真正成功了
端口爲16010
6、 總結
至此:徹底分佈式Hadoop+Zookeeper+HBase集羣測試環境基本圓滿完成,若有問題繼續研究,經過這3天的時間研究獲得了不少的知識。