小白文 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