1. 程式人生 > 其它 >Docker環境下部署單機偽分散式hadoop環境

Docker環境下部署單機偽分散式hadoop環境

準備工作:準備hadoop-2.7.7.tar.gz、jdk-8u191-linux-x64.tar.gz壓縮包,版本可以不同,我這裡用的是hadoop-2.7.7和jdk1.8。

1. 上傳hadoop-2.7.7.tar.gz、jdk-8u191-linux-x64.tar.gz壓縮包。

[root@master ~]# cd /home/azl
[root@master azl ]# ll

2. 建立Dockerfile檔案

[root@master azl ] # vim Dockerfile
#選擇centos7.7.1908作為基礎映象#選擇centos7.7.1908作為基礎映象
FROM centos:centos7.7.1908
#映象維護者資訊(根據自己的資訊進行修改)
MAINTAINER [email protected]
#構建容器時需要執行的命令
#安裝openssh-server. openssh-clents. sudo、 vim和net-tools軟體包
RUN yum install -y openssh-server openssh-clients sudo vim net-tools
#生成相應的主機金鑰檔案
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
#將宿主機的檔案拷貝至境像(ADD會自動解壓),這裡要切換到jdk和hadoop壓縮包所在路徑
ADD jdk-8u191-linux-x64.tar.gz /usr/local
ADD hadoop-2.7.7.tar.gz /usr/local
#設定環境變數
ENV CENTOS_DEFAULT_HOME /root
ENV JAVA_HOME /usr/local/jdk1.8.0_191
ENV HADOOP_HOME /usr/local/hadoop-2.7.7
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH ${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
#終端預設登入進來的工作目錄
WORKDIR $CENTOS_DEFAULT_HOME
#啟動sshd服務並且暴露22埠
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]CMD ["/usr/sbin/sshd", "-D"]

3. 編譯docker檔案

[root@master azl ] # docker build -t xxx/hadoop:2.7.7 . #-t後面是映象名,根據需要修改

4. 設定網路

[root@master azl ] # docker network ls
[root@master azl ] # docker network inspect [容器id]

5. 建立自己的網路

[root@master azl ] # docker network create --subnet=172.22.0.0/16 mynetwork(mynework網路名隨便取)

6. 檢視映象

[root@master azl ] # docker images

7. 執行容器並進行埠對映

[root@master azl ] #docker run -d --name hadoop --hostname hadoop -P -p 50070:50070 -p 8088:8088 -p 19888:19888 --net mynetwork --ip 172.22.0.2 b3327df9f137[映象id]

8. 檢視容器

[root@master azl ] # docker ps
可以看到容器已經執行起來了,下面進入容器內部

9. 進入容器

[root@master azl ] # docker exec -ti 98b98c1b083c[容器id] /bin/bash

10. 設定ssh免密登入

[root@hadoop ~ ] # cd ~/.ssh
如果出現這種情況,說明root使用者下沒有登陸過ssh,登陸一下就好了
執行ssh localhost
一路回車,再次執行cd ~/.ssh,成功進入.ssh目錄
[root@hadoop ~ ] # ssh-keygen -t rsa,一路回車
生成兩個檔案,一個私鑰,一個公鑰,執行:cp id_rsa.pub authorized_keys

11. 本機無金鑰登入

修改authorized_keys許可權:chmod 644 authorized_keys
嘗試登入和退出,好了,現在可以無金鑰登入了。

12. 建立臨時資料夾

[root@hadoop ~]# mkdir /usr/local/hadoop-2.7.7/tmp
[root@hadoop ~]# mkdir -p /usr/local/hadoop-2.7.7/dfs/namenode_data
[root@hadoop ~]# mkdir -p /usr/local/hadoop-2.7.7/dfs/datanode_data

13. 切換到hadoop-2.7.7目錄下

[root@hadoop ~]# cd /usr/local/ hadoop-2.7.7
[root@hadoop hadoop-2.7.7]# java -version
[root@hadoop hadoop-2.7.7]# cd etc/hadoop
[root@hadoop hadoop]# vim hadoop-env.sh
按照如下配置,儲存退出。

14. 修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml配置檔案。

[root@hadoop hadoop]# vim core-site.xml

core-site.xml:

<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop:9000</value>
  </property>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-2.7.7/tmp</value>
  </property>
 </configuration>
[root@hadoop hadoop]# vim hdfs-site.xml

hdfs-site.xml:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

  <property>
    <name>dfs.name.dir</name>
    <value>/usr/local/hadoop-2.7.7/dfs/namenode_data</value>
  </property>

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop-2.7.7/dfs/datanode_data</value>
  </property>

  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>
 </configuration>
我們這裡先複製一份mapred-site.xml.template並改名為mapred-site.xml
[root@hadoop hadoop]# cp mapred-site.xml.template mapred-site.xml
vim開啟
[root@hadoop hadoop]# vim mapred-site.xml

mapred-site.xml:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop:10020</value>
  </property>

  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop:19888</value>
  </property>
</configuration>
[root@hadoop hadoop]# vim yarn-site.xml

yarn-site.xml:

 <configuration>

  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop</value>
  </property>

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
</configuration>

15. 配置所有從屬節點的主機名或ip地址,由於是單機版,所以指定本機即可

[root@hadoop hadoop]# vim slaves

16. 切換到根目錄

[root@hadoop hadoop]# cd
[root@hadoop ~]# clear
格式化
[root@hadoop ~]# hdfs namenode -format
[root@hadoop ~]# start-dfs.sh
[root@hadoop ~]# start-yarn.sh
[root@hadoop ~]# mr-jobhistory-daemon.sh start historyserver
jps檢視,現在hadoop環境已經配置好了,瀏覽器訪問50070、19888埠可以看到hadoop介面
[root@hadoop ~]# jps
此時,我們的hadoop環境就已經搭建好了,下面在瀏覽器訪問試試。

http://ip:50070

http://ip:19888