1、 集羣環境html
- 系統版本
虛擬機:內存 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
使用信息
實體機
遠程桌面:124.130.192.24:9007
用 戶 名:JCNY_ZhuGeLiang
密 碼:**問謝炎
三臺虛擬機
=======Hamster======
I P:192.168.0.10
用戶名:hadoop
密 碼:jcny@hadoop
=======hslave-1======
I P:192.168.0.11
用戶名:hadoop
密 碼:jcny@hadoop
=======hslave-2======
I P:192.168.0.12
用戶名:hadoop
密 碼:jcny@hadoopjava
集羣環境
一共創建了三臺虛擬機
Ip節點名稱爲:
Master節點
192.168.0.10 hmaster.hcluster
Slave節點
192.168.0.11 hslave-1.hcluster
192.168.0.12 hslave-2.hcluster
三個虛擬機上都必須安裝zookeepernode
注意:操做說明,命令前面有#號表明root用戶登入的linux
- 時間說明
書寫時間:2017-10-19
第一次更新時間:2017-10-22
2、 安裝基礎集羣環境web
- 基礎環境配置
爲了配置方便,集羣中防火牆已經所有關閉,而且禁止開機啓動
- 關閉防火牆
因爲新版的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) 導入環境變量shell
source /etc/profile
4) 驗證安裝結果
執行java -version驗證是否安裝成功
結果:apache
注意:在集羣中全部節點上執行相同的操做vim
- 安裝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。
在全部節點上建立用戶hadoopcentos
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回車session
執行上述命令後,一路回車,會在.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的安裝。
3、 安裝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集羣中的配置文件的配置等
hadoop.tmp.dir
/home/hadoop/hadoop/temp
fs.default.name
hdfs://192.168.0.10:9000
fs.defaultFS
hdfs://192.168.0.10:9002
io.file.buffer.size
131072
Slave主機修改hmaster爲相應的節點名稱例如第一臺:hslave-1
c) hdfs-site.xml
HDFS的相關設定,如文件副本的個數、塊大小及是否使用強制權限等
dfs.replication
2
dfs.namenode.name.dir
/home/hadoop/hadoop/name
dfs.datanode.data.dir
/home/hadoop/hadoop/data
dfs.blocksize
268435456
d) mapred-site.xml.template
HDFS的相關設定,如reduce任務的默認個數、任務所可以使用內存的默認上下限等
mapreduce.framework.name
yarn
mapred.job.tracker
http://192.168.0.10:9001
mapreduce.jobhistory.address
http://192.168.0.10:10020
mapreduce.jobhistory.webapp.address
http://192.168.0.10:19888
Slave主機修改hmaster爲相應的節點名稱例如第一臺:hslave-1
e) yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
192.168.0.10:8032
yarn.resourcemanager.scheduler.address
192.168.0.10:8030
yarn.resourcemanager.resource-tracker.address
192.168.0.10:8031
yarn.resourcemanager.admin.address
192.168.0.10:8033
yarn.resourcemanager.webapp.address
192.168.0.10:8088
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目錄(只在主機上操做)
在格式化過程當中注意輸出結果,成功後會有相似下面的輸出:
出現上圖就是成功了
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
4、 安裝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=2000The number of ticks that the initial
synchronization phase can take
initLimit=10The number of ticks that can pass between
sending a request and getting an acknowledgement
syncLimit=5the 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/logsthe port at which the clients will connect
clientPort=2181the 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.
# #The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3Purge 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,
啓動以後在輸入查看
就正常了
5、 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.cluster.distributed
true
hbase.rootdir
hdfs://192.168.0.10:9002/hbase
hbase.master
hmaster:60000
hbase.zookeeper.quorum
hmaster,hslave-1,hslave-2
hbase.zookeeper.property.dataDir
/home/hadoop/zookeeper
hbase.master.maxclockskew
150000
hbase.zookeeper.property.clientPort
2181
這裏要特別注意的是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
- 若是啓動的時候出現此問題,就註釋下面內容
出錯地方
註釋的代碼
這個錯誤是時間沒有同步
注意:每個節點機都配置
- 查看是否啓動成功
主機節點
節點機一、節點機2
注意:若是節點機HRegionServer進程,時間同步出現了問題,能夠把時間同步加大
hbase.master.maxclockskew
150000
能夠進入hbase shell,使用命令查看hbase狀態
查詢出表
出現下圖就表示真正成功了
Web界面查看
端口爲16010
6、 總結
至此:徹底分佈式Hadoop+Zookeeper+HBase集羣測試環境基本圓滿完成,若有問題繼續研究,經過這3天的時間研究獲得了不少的知識。
經歷的不少的坑,並且好多都是防火牆還有java路徑問題還有就是配置文件配置信息問題,還有就是節點機配置文件同步的問題!
註明:分享請註明 蟻點分享 andot.org圖片沒有黏貼,須要原版pdf文檔的,請在評論區留下郵箱