最近在docker上部署hadoop clusters,按照hadoop官網的配置遇到不少問題。有的問題是我我的緣由形成,也有些許問題讓我感受到hadoop官網的文檔在部分細節上還不夠友好。我決定把配置的過程記錄下來,一方面作個記錄,另外一方面給後來者提供一些方便。node
我是使用docker部署的,首先就是拉取鏡像docker
docker search hadoop ... ...這裏會返回關於hadoop的全部鏡像,我選擇的是star數量最多的sequenceiq/hadoop-docker ... docker pull sequenceiq/hadoop-docker
建議首先對鏡像作一些修改,不然加載到容器以後再修改,可能就比較麻煩了。當時我不知道這些,因此直接就建立了Namenode和Datanode的容器,結果改起來比較麻煩。bash
建立Namenode和Datanode容器,在這裏我建立了一個Namenode和一個Datanode,Namenode還兼着SecondaryNamenode。oop
docker network ls #確認有bridge driver docker run itd --net=bridge -p 50070:50070 -p 8008:8008 -p 9000:9000 --name hadoop-master --host hadoop-master-host docker run itd --net=bridge --name hadoop-slave1 --host hadoop-slave1
進入容器的命令行,修改配置,須要特別注意的是,全部節點的配置都要如此。命令行
使用docker ps命令獲取到正在運行的docker容器的ID,如下分別使用{MASTER_ID}和{SLAVE1_ID}來替代code
docker exec -ti {MASTER_ID} /bin/bash cd /usr/local/hadoop
修改${HADOOP_HOME}/etc/core-site.xml,在裏面添加Namenode的地址。使用主機名方式添加時要特別注意主機名須要添加到/etc/hosts。orm
<property> <name>fs.defaultFS</name> <value>hdfs://host-hadoop-master:9000</value> </property>
添加slave列表,修改{HADOOP_HOME}/etc/slaves文件,添加slave節點的IP地址或主機名。固然了,若是以主機名方式添加,須要修改/etc/hosts文件。哦,記住,裏面默認的內容是localhost,刪掉。
添加SecondaryNamenode,修改{HADOOP_HOME}/etc/masters,添加IP地址或主機名。(這一步很是重要,我使用的hadoop版本是2.7,裏面沒有這個文件,須要手動建立。我在網上別人的博客裏看到這一步了,可是官方文檔並無說明,並且也沒有這個文件。因爲本人太迷信官方文檔了,因此省略了這一步,因此形成了嚴重錯誤的開始)xml
全部配置文件修改完成以後,就能夠啓動hadoop服務了。這裏在master節點運行便可。hadoop
${HADOOP_HOME}/bin/hdfs namenode -format # The first time you bring up HDFS, it must be formatted. Format a new distributed filesystem as hdfs ${HADOOP_HOME}/sbin/start-dfs.sh #執行完成這一步以後,在Namenode節點會有Namenode和SecondaryNamenode兩個服務運行,Datanode節點會有Datanode服務運行 ${HADOOP_HOME}/sbin/start-yarn.sh #執行完成這一步以後,在master節點會有ResourceManager服務運行,Datanode節點會有NodeManager服務運行
至此,hadoop cluster環境搭建就完成了。文檔