Docker環境下部署單機偽分散式hadoop環境
阿新 • • 發佈:2021-08-04
準備工作:準備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>