1. 程式人生 > >小白文 hadoop+docker分散式搭建

小白文 hadoop+docker分散式搭建

hadoop平臺搭建小記 (兼文件從小白做起? )+自身遇到的bug

備註 : 本身這是博主寫的 但是中間很多精華並不是我寫的  所以不算原創文 僅此宣告~~~~~~

1 安裝docker

引流...

2 搭建hadoop

同上....兩步走

PS:不單單是用比較流行的CRT或者docker本身給的Terminal  同樣可以用xshell等等支援ssh的連線 但是記住 因為他們之間的關係

是本機(宿主機)-》搭載docker虛擬機器(docker平臺)-》搭載docker的容器 ,所以xftp不好連線進入容器本身操作檔案 ..比較好的做法就是做資料夾對映到固定位置 以下會有文件記錄博主當時做的時候的參考文件 ... 我們所連線的容器是由每次開主機之後   進入   Terminal開啟Docker 所分配的172.17.0.xx也是docker的局域ip  xshell是連不上的 xshell每次都是連線192.168.99.100由docker進去容器..用xshell僅僅是因為方便 ! 

在做docker+hadoop叢集搭建的時候最重要的就是ssh服務

建議將ssh服務吃透 才能比較好的去調整可能出現的hadoop搭建失敗問題.... (注意ssh的各個檔案..)

docker本身類似一個虛擬機器平臺  通過拉取公用倉庫所提供的的映象到私人倉庫(開啟docker之後的192.168.99.100 ->進去之後的 命令docker images 即是你私人擁有的映象)然後通過run呼叫映象新建容器提供使用..

建議在上手docker裝載各種作業系統或者資料庫,服務等等之類的的時候隨時記得儲存映象 免得出現從刪庫到跑路的情況~

下面有一份常用的docker命令表 (非全部..).記得  一般就ok了

.常用命令:(前面一般都加docker)

docker  ps -a  :檢視容器(當前所有容器)

              images :檢視所有映象(自己的) 

              pull + 映象名:Tag名  :從公共映象庫拉取所需映象

              run   + -it   +  -v 資料夾對映,比如 /c/Users:/root/build)  +   容器名【:tag名】  +  /bin/bash(shell命令)  :新建容器

             exit    :離開容器  (使用run之後第一次離開容器會自動關閉容器)

             attench  :進入開啟的容器(再次exit或者ctrl+d會關閉)

             exec  :  進入開啟的容器(再次exit或者ctrl+d 不會關閉)

             start  +  容器ID(前三位以上都可以)(或者容器名字  容器名字在run的時候加引數 --name 標識出來) :開啟容器

             stop  +  容器ID(同上)  :關閉容器

            rm  :刪除容器

             rmi  :刪除映象

以上是一般會用到的  還有更多命令有興趣可以自己查..

然後是作者搭建時曾經遇到的問題  (兩個節點DataNode有一個搭建失敗 )

java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/datanode_dir: namenode clusterID = CID-a5104754-f75d-47c1-a0da-c7100947ed8e; datanode clusterID = CID-cd1c8df6-ddad-4ef2-a240-0e8188e3f585     at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:760)     at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:293)     at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:409)     at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:388)     at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:556)     at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1574)     at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1535)     at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:368)     at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:266)     at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:750)     at java.lang.Thread.run(Thread.java:748) 2018-10-08 11:19:52,632 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool ID needed, but service not yet registered with NN, trace: java.lang.Exception     at org.apache.hadoop.hdfs.server.datanode.BPOfferService.getBlockPoolId(BPOfferService.java:196)     at org.apache.hadoop.hdfs.server.datanode.BPOfferService.hasBlockPoolId(BPOfferService.java:206)     at org.apache.hadoop.hdfs.server.datanode.BPOfferService.shouldRetryInit(BPOfferService.java:812)     at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.shouldRetryInit(BPServiceActor.java:792)     at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:755)     at java.lang.Thread.run(Thread.java:748) 原因 (作者在搭建一主公2忠臣叢集的時候 - - 換了docker的局域ip 然後ssh就互相拼不通了  同時中間一個從伺服器就暴露了clusterID不同的問題 (操作不當引起的????)   )

解決方案  1    查配置檔案etc/hadoop/hdfs-site.xml 知道data存放資料夾   進入其中的current  然後vim編輯 VERSION檔案  修改clusterID為和 報錯資訊中的namenode 的ID相同  即可

                  2    直接刪除data存放資料夾  (第一種的變種  在停掉叢集之後刪除錯誤data讓hadoop自動格式化建立初始檔案 ...)

附錄:部落格主用過的文件....

百度雲盤...

連結:https://pan.baidu.com/s/1f9sQWO-CMUKdvVuDSvy04Q 密碼:3fw6