hadoop 3.x 完全分布式集群搭建/異常處理/測試


共計三台虛擬機分別為hadoop002(master,存放namenode),hadoop003(workers,datanode以及resourcemanage),hadoop004(workers.datanode,secondarynamenode)

1.搭建前的准備(三台虛擬機均已配置好java以及hadoop環境變量)

可以進行同步及執行命令的分發腳本,關閉防火牆,選定啟動的hadoop的賬號要能夠做到與其他兩台虛擬主機免密登錄

 

2.配置hadoop002文件($HADOOP_HOME/etc/hadoop/)

hadoopenv.sh

1 export JAVA_HOME=/opt/module/jdk1.8.0_181 2 export HADOOP_PID_DIR=/opt/module/hadoop-3.1.1/data/tmp/pids

core-site.xml

 1 <!-- 指定hadoop運行時產生文件的存儲目錄 -->    
 2 <property>
 3   <name>hadoop.tmp.dir</name>
 4       <value>/opt/module/hadoop-3.1.1/data/tmp</value>
 5       <!--需要手動創建並修改文件夾屬主-->
 6   <!--<value>/hadoop/tmp</value>-->    
 7 </property>
 8 
 9 <!-- 指定hdfs namenode的缺省路徑,可以是ip,也可以是主機名 -->    
10 <property>
11     <name>fs.defaultFS</name>
12     <value>hdfs://hadoop002:9000</value>
13 </property>

hdfs-site.xml

 1 <!-- 指定HDFS副本的數量 -->
 2 <property>
 3       <name>dfs.replication</name>
 4       <value>3</value>
 5 </property>
 6 <!--配置namenode的web界面-->
 7 <property>
 8      <name>dfs.namenode.http-address</name>
 9      <value>hadoop002:50070</value>
10 </property>
11 <!--指定secondarynamenode地址-->
12 <property>
13      <name>dfs.namenode.secondary.http-address</name>
14      <value>hadoop004:50090</value>
15 </property>

yarn-site.xml(hadoop003上運行ResourceManager)

 1 <!--resourcemanager address-->
 2 <property>
 3         <name>yarn.resourcemanager.hostname</name>
 4         <value>hadoop003</value>
 5 </property>
 6  
 7 <!--reduce-->
 8 <property>
 9         <name>yarn.nodemanager.aux-services</name>
10         <value>mapreduce_shuffle</value>
11 </property>

mapred-site.xml

1 <!--use yarn-->
2 <property>
3     <name>mapreduce.framework.name</name>
4     <value>yarn</value>
5 </property>

workers

1 hadoop002 2 hadoop003 3 hadoop004

 

3.使用分發腳本同步$HADOOP_HOME/etc/hadoop下的配置文件

分發腳本請參考https://www.cnblogs.com/tele-share/p/9502569.html

在分發腳本同步前,要保證你的hadoop目錄下沒有存儲臨時文件的data目錄(保險起見也刪除logs文件夾),否則同步過去hadoop003與hadoop004的datanode會具有相同的storgeid與datanodeuuid.這樣就會導致

啟動datanode失敗

執行同步命令

xsync.sh /opt/module/hadoop-3.1.1/etc/hadoop/

分發完畢后執行分發腳本進行查看

xcall.sh cat /opt/module/hadoop-3.1.1/etc/hadoop/core-site.xml

 

4.分步啟動hadoop

如果你的虛擬機之前沒有啟動過hadoop,那么第一次啟動時還要先進行格式化namenode(hadoop002),格式化namenode時如果出現了yes/no說明你之前的臨時存儲目錄沒有清理干凈去檢查下默認的/tmp是否有殘留,沒有在執行格式化命令,否則即使成功啟動namenode仍然會有問題

hdfs namenode -format

之后在master上即hadoop002啟動hdfs

start-dfs.sh

執行這個命令如果出現Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).是因為沒有配置好ssh免密登錄,請參考https://www.cnblogs.com/tele-share/p/9503021.html

啟動成功后xcall.sh jps進行查看,確認三台虛擬機都有了datanode后在hadoop003上(可以在hadoop002上遠程連接hadoop003然后啟動)啟動yarn

start-yarn.sh,之后在hadoop002上再次查看jps,這里需要注意的是ResourceManager配置在哪台機器上就要在哪台機器上啟動yarn

 

此時已經啟動完成,可以執行以下命令查看datanode是否配置正確,否則即使datanode啟動了,也不是從屬於我們配置的namenode

hadoop fsck -locations(但這個命令並不是判斷datanode是否啟動的依據,還是要看jps)

再次重申,一定要關閉防火牆如果你只是配置了開放防火牆的某些端口,后面測試文件上傳的時候仍然會有問題

 

5.文件上傳測試

創建文件夾

hadoop fs -mkdir -p /usr/tele創建完成后可在hadoop002:50070觀察到效果web頁面無法打開請參考https://www.cnblogs.com/tele-share/p/9495848.html

 

上傳文件

hadoop fs -put /opt/software/jdk-8u181-linux-x64.tar.gz  /usr/tele

(如果上傳失敗,請檢查文件夾權限,盡量使用普通賬號啟動hadoop)

如果發現Replication與Availability不一致,請參考https://www.cnblogs.com/tele-share/p/9504745.html

接下來進入hdfds實際在linux上的存儲路徑,一會要根據Block Pool ID尋找存儲的文件,進入以下目錄

/opt/module/hadoop-3.1.1/data/tmp/dfs/data/current/BP-124647413-192.168.101.102-1534570931675/current/finalized/subdir0/subdir0

可以看到上傳的jdk1.8的壓縮包被分成了兩個block,接下來對文件進行合並

解壓這個jdk.file就會得到我們上傳的jdk壓縮包了tar -zxvf jdk.file

當然也可以使用hadoop fs -get命令進行下載,接下來進入hadoop003與hadoop004分別查看是否有我們的備份

hadoop004的圖不再貼了,同樣也有備份,到這搭建與測試全部完成了

 

6.停止

先在hadoop003停止yarn,jps后在hadoop002停止datanode,由於在開頭配置hadoop-env.sh時指定了pid的存儲目錄,所以不用擔心pid文件被清理掉

 

7.總結

①盡量不要使用stop-all.start-all.sh來操作集群,停止與啟動都要分步操作,請參考https://www.cnblogs.com/tele-share/p/9508225.html

②datanode與namenode的聯系靠的是datanode的clusterID,從屬於同一namenode的datanode具有相同的clusterID,當然不同的datanode其storgeid與datanodeuuid是不同的,如果你在啟動的過程中發現總是只有一個datanode可以啟動,那么你就要考慮datanode的id沖突問題了

③必須在配置ResourceManager的機器上啟動yarn

④防火牆必須關閉,只開放部分端口會導致寫入副本時報錯java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as 192.168.101.103:9866查看datanode的日志會有java.net.NoRouteToHostException: No route to host等問題

⑤yarn-site.xml與mapred.xml中盡量不要使用中文注釋否則啟動的時候會有一個java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0xb5 (at char #672, byte #20

⑥修改配置文件前要把hadoop停掉,然后才會生效(個別文件例外,但還是建議停掉hadoop再進行修改)

⑦workers文件對應2,x的slaves,從奴隸變成了工人

⑧3.x中yarn-env.sh與mapred-env.sh已經不再需要配置export JAVA_HOME

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM