搭建以前, 先根據(一)Linux環境搭建一文將集羣的初始環境配置OK.java
Apache-Hadoop 官網: https://hadoop.apache.org/
Apache-Hadoop各個版本下載地址: https://archive.apache.org/dist/hadoop/common/
點擊想要的版本, 選擇hadoop-x.x.x.tar.gz文件下載,本文使用hadoop-2.6.5
node
Zookeeper官網: http://zookeeper.apache.org/
Zookeeper下載地址: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
選擇想要的版本進入下載, 本文使用zookeeper-3.4.10
web
NN(active) | NN(standby) | DN | ZK | ZKFC | JNN | |
---|---|---|---|---|---|---|
node01 | √ | – | – | – | √ | √ |
node02 | – | √ | √ | √ | √ | √ |
node03 | – | – | √ | √ | – | √ |
node04 | – | – | √ | √ | – | – |
這裏我將文件解壓到/opt/software/hadoop文件夾下.
tar -zxf hadoop-2.6.5.tar.gz -C /opt/software/hadoop
apache
進入配置文件修改目錄
cd /opt/software/hadoop/hadoop-2.6.5/etc/hadoop/
bootstrap
vim hdfs-site.xml
編輯文件, 在configuration標籤對中插入:vim
<property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 配置集羣服務名 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node02:8020</value> </property> <!-- 配置集羣兩個namenode節點的本地位置 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node01:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node02:50070</value> </property> <!-- 配置集羣兩個namenode節點的網絡位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value> </property> <!-- 配置集羣三個journalnode節點的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/sxt/hadoop/ha/jn</value> </property> <!-- 配置JNN生成文件存放地址 --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置ZKFC代理 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 配置zookeeper進程對非本節點操做時的鏈接方式 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- 配置上述ssh鏈接密鑰所在位置 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置開啓失敗容錯監控 -->
vim core-site.xml
編輯文件, 在configuration標籤對中插入瀏覽器
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>node02:2181,node03:2181,node04:2181</value> </property>
其中fs.defaultFS配置的是hdfs文件目錄的前綴, 此處的mycluster爲hdfs-site.xml中配置的集羣服務名.bash
ha.zookeeper.quorum配置的是集羣協調服務進程zookeeper.網絡
vim slaves 刪除localhost(若是有) 編輯slaves, 在文件中寫入: node02 node03 node04
slaves中配置的是從節點(DataNode)主機名(hostname), 高可用徹底分佈式, 咱們設計的是三個DN節點.ssh
在編輯文件時, 要注意縱向寫的格式, 主機名後也不能夠帶空格, 不然可能會致使主機解析失敗.
根據上述步驟配置好以後, 須要將配置好的文件發到其餘三個節點上.
cd /opt/software/hadoop 將hadoop下的hadoop-2.6.5包發送 scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/ scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/ scp -r hadoop-2.6.5 root@node04:/opt/software/hadoop/ 或使用一種更簡單的指令 scp -r hadoop-2.6.5 node02:`pwd` scp -r hadoop-2.6.5 node03:`pwd` scp -r hadoop-2.6.5 node04:`pwd`
發送時, 若是其餘節點上沒有/opt/software/hadoop/目錄, 那麼須要本身創建以後再發送. 發送完畢以後要保證全部節點的hadoop目錄所在路徑都是一致的.
此步可先跳過, 該文件能夠不修改. 當啓動hdfs出現" JAVA_HOME cannot find or set" 相似的說明java_home沒有配置的提示時, 可再手動配置(前提是執行java -version成功在顯示器打印java版本).
vim hadoop-evn.sh 編輯文件, 找到export JAVA_HOME=${JAVA_HOME}那一行 將 = 後的內容改成JAVA_HOME的確切路徑, 可以使用 echo $JAVA_HOME查看 export JAVA_HOME=/usr/local/jdk1.8.0_181
修改完成以後還要使用scp命令將修改的文件發送到各個節點上:
scp hadoop-evn.sh node02:`pwd` scp hadoop-evn.sh node03:`pwd` scp hadoop-evn.sh node04:`pwd`
此處配置好後, 能夠在任意位置使用hdfs的命令.
vim ~/.bashrc 在文件最後插入 export PATH=$PATH:/opt/software/hadoop/hadoop-2.6.5/bin:/opt/software/hadoop/hadoop-2.6.5/sbin
zookeeper節點規劃在node02, node03 ,node04 節點上
首先, 在 node02 上解壓zookeeper的壓縮包 tar -zxf zookeeper-3.4.10.tar.gz -C /opt/software/zookeeper 進入解壓文件, 修改conf目錄下的zoo_sample.cfg cd /opt/software/zookeeper/zookeeper-3.4.10/conf mv zoo_sample.cfg zoo.cfg 重命名
修改zoo.cfg文件
vim zoo.cfg 修改dataDir的值 dataDir=/var/qb/zookeeper 設置zookeeper目錄, 路徑任意, 需本身建立 在文件最後加入zookeeper節點的服務位置 server.1=node02:2888:3888 server.2=node03:2888:3888 server.3=node04:2888:3888
發送安裝包, 將zookeeper安裝包發送到node03, node04節點上
cd /opt/software/zookeeper scp -r zookeeper-3.4.10 node03:`pwd` scp -r zookeeper-3.4.10 node04:`pwd`
在各個zookeeper節點設置的dataDir目錄下建立myid文件, 修改文件內容
vim /var/qb/zookeeper/myid 在各個節點的myid中寫入相應ID號 1 對應node02節點 2 對應node03節點 3 對應node04節點
最後, 啓動zookeeper進程
cd /opt/software/zookeeper/zookeeper-3.4.10/bin ./zkServer.sh start
在node01, node02, node03 上分別執行啓動journalnode的命令.
hadoop-daemon.sh start journalnode
隨便選一臺NameNode(node01 || node02)做爲active節點進行格式化.
hdfs namenode -format hadoop-daemon.sh start namenode
另外一臺NameNode節點執行
hdfs namenode -bootstrapStandby
格式化ZKFC進程
hdfs zkfc -formatZK
關閉全部節點上的進程
stop-dfs.sh
啓動HDFS
start-dfs.sh
jps
建立目錄 hdfs dfs -mkdir -p /abc/cba 上傳文件 hdfs dfs -D dfs.blocksize=1048576 -put text.txt ...
stop-dfs.sh 或 killall java
注:下次啓動時, 要先啓動zookeeper進程, 再啓動hdfs
啓動Ha集羣以後, 在本地機打開一個瀏覽器, 在地址欄輸入active 狀態的namenode節點的ip地址+端口, 例如192.168.75.133:50070 , 也可在本地機中修改host文件, 配置域名node01, 就可使用node01:50070 來訪問webUI的頁面. 如圖:
查看集羣的狀態:
點擊Live Nodes查看各個DataNode節點的詳細信息:
此處, 可經過web頁面查看HDFS的文件目錄結構以及文件的部分元數據信息.輸入框中須要輸入HDFS文件路徑.
若是是一個文件, 點擊能夠顯示該文件存在哪一個block, ,blockId是多少, 以及各個備份所在的節點:
客戶端搭建十分簡單, 只需將配置好的Hadoop安裝包發送到client節點對應目錄的位置上便可.
搭建好client以後, 啓動集羣, 就能夠在client上操做HDFS或者提交MapReduce應用程序, 在client上的操做咱們稱之爲集羣外操做.
在集羣內一臺節點上操做稱爲集羣內操做, 不建議使用集羣內操做, 由於若是每一次操做都選擇同一個節點, 就會致使該節點的磁盤以及網絡IO負載超過其餘節點, 長此以往這個節點的磁盤以及網卡性能將會降低, 最終致使數據傾斜問題. 數據傾斜是大數據開發中應當儘可能避免的問題.