6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码
作者 |?tianyouououou
責(zé)編 |?Carol
來源 | CSDN 博客
封圖 | CSDN付費(fèi)下載于視覺中國(guó)
最近,作者整理了一套Hadoop搭建方案。最后的鏡像大小1.4G多,使用docker子網(wǎng),容器重新啟動(dòng)不需要重新配置/etc/hosts文件。
配置過程中參考了如下博客,有些細(xì)節(jié)問題這些博客里面解釋的更加詳細(xì)。
ssh配置部分:
https://blog.csdn.net/weixin_42051109/article/details/82744993
wordcount部分:
https://blog.csdn.net/alexwym/article/details/82497582
雖然配置完了,但是有些地方并不完全懂,后續(xù)有機(jī)會(huì)還會(huì)做一些補(bǔ)充解釋。
* 環(huán)境:Ubuntu16.04虛擬機(jī)
準(zhǔn)備工作
下載解壓jdk1.8文件夾
下載解壓Hadoop2.8.5文件夾
docker pull centos7基礎(chǔ)鏡像
建mydocker文件夾
將jdk1.8文件夾和Hadoop文件夾移動(dòng)到mydocker文件夾(這里為了簡(jiǎn)潔將Hadoop2.8.5文件夾重命名為Hadoop)
編輯Hadoop文件夾內(nèi)的文件(避免創(chuàng)建鏡像后要修改三遍)
首先進(jìn)入Hadoop/etc/Hadoop文件夾后修改hadoop.env.sh
tianyou@ubuntu:~/mydocker/Hadoop/etc/Hadoop$?vim?hadoop-env.sh將JAVA_HOME修改為如下路徑
修改core-site.xml如下
修改yarn-site.xml
tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim yarn-site.xml <configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop0:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop0:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>hadoop0:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>hadoop0:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop0:8088</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property> </configuration>??????????修改mapred-site.xml,我這里是mapred-site.xml.template
修改hdfs-site.xml(按照datanode配置)
tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim hdfs-site.xml <configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/hdfs/data</value></property> </configuration>這里修改hadoop配置文件是為了構(gòu)建鏡像時(shí)直接將hadoop文件夾COPY到鏡像中,再用鏡像創(chuàng)建三個(gè)容器后不需要在三個(gè)容器中分別進(jìn)行重復(fù)的配置工作。
使用Dockerfile構(gòu)建鏡像
1、編輯Dockefile,基于準(zhǔn)備好的centos:7基礎(chǔ)鏡像構(gòu)建
FROM centos:7 # 選擇一個(gè)已有的os鏡像作為基a礎(chǔ) # 鏡像的作者 MAINTAINER tianyou # 安裝openssh-server和sudo軟件包,并且將sshd的UsePAM參數(shù)設(shè)置成no RUN yum install -y openssh-server sudo \&& sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \ #安裝openssh-clients&& yum install -y openssh-clients \&& yum install -y vim \&& yum install -y which \# 添加測(cè)試用戶root,密碼root,并且將此用戶添加到sudoers里 && echo "root:root" | chpasswd \&& echo "root ALL=(ALL) ALL" >> /etc/sudoers \ # 下面這兩句比較特殊,在centos6上必須要有,否則創(chuàng)建出來的容器sshd不能登錄 && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key \&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \&& mkdir /var/run/sshdCOPY jdk1.8 /usr/local/jdk1.8/ COPY hadoop /usr/local/hadoop/ ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH EXPOSE 22 CMD?["/usr/sbin/sshd",?"-D"]2、在mydocker文件夾下執(zhí)行構(gòu)建命令(因?yàn)樾枰募L問權(quán)限要加sudo,命令最后的,不要丟)
創(chuàng)建容器
1、創(chuàng)建子網(wǎng) Hadoopnetwork
tianyou@ubuntu:~/mydocker$ docker network create --subnet=172.19.0.0/16 hadoopnetwork2、創(chuàng)建容器并指定子網(wǎng)和ip
創(chuàng)建Hadoop0容器
創(chuàng)建hadoop1容器
創(chuàng)建Hadoop2容器
tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.4 --name hadoop2 -h hadoop2 tianyou/centos-java-hadoop配置ssh
1.進(jìn)入Hadoop0
tianyou@ubuntu:~/mydocker$?docker?exec?-it?hadoop0?/bin/bash2.配置ssh密鑰
[root@hadoop0?/]#?/usr/sbin/sshd?&&?/usr/sbin/sshd-keygen?-A?&&?/usr/sbin/sshd制作密鑰,輸入ssh-keygen -t rsa,然后敲三次Enter鍵
[root@hadoop0 /]# ssh-keygen -t rsa生成的密鑰存在 /root/.ssh/id_rsa.pub 文件中,執(zhí)行指令把密鑰存儲(chǔ)在 /root/.ssh/authorized_keys 文件中
修改sshd_config配置使提示更簡(jiǎn)潔,合并指令如下:
[root@hadoop0?/]#?cat?/root/.ssh/id_rsa.pub?>>?/root/.ssh/authorized_keys?&&?vim?/etc/ssh/sshd_config將配置文件中對(duì)應(yīng)行 修改為如下所示:
Esc進(jìn)入命令模式,:wq保存
修改ssh_config文件中 StrictHostKeyChecking ask改成no
Ctrl+P+Q退出Hadoop0容器
進(jìn)入Hadoop1和Hadoop2容器,進(jìn)行同樣的操作生成ssh密鑰和配置
3、將容器的秘鑰互相添加
每個(gè)容器的 /root/.ssh/authorized_keys 文件都需要填入所有容器的密鑰
以上操作結(jié)束后在Hadoop2容器中,查看文件,復(fù)制出haoop2密鑰
[root@hadoop2?/]#??vim??/root/.ssh/authorized_keysctrl+P+Q退出,同樣復(fù)制出Hadoop1和Hadoop0秘鑰,將三個(gè)秘鑰全部復(fù)制到三個(gè)容器的/root/.ssh/authorized_keys文件中。
復(fù)制完成后在每個(gè)容器中都執(zhí)行一次 /usr/sbin/sshd命令。
[root@Master local]# /usr/sbin/sshd至此,通過ssh可以互相訪問,測(cè)試一下
[root@hadoop0 /]# ssh hadoop1ctrl+D返回
完善Hadoop配置
進(jìn)入Hadoop0,修改hdfs-site.xml 文件如下:
[root@hadoop0 /]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml因?yàn)樵贑OPY進(jìn)容器時(shí)按照datanode配置,所以要修改為namenode配置,只需要將三處data修改為name。
通過ssh進(jìn)入Hadoop1,刪除重建hdfs文件
[root@hadoop0 /]# ssh hadoop1[root@hadoop1 ~]# rm -rf /usr/local/hadoop/hdfs && mkdir -p /usr/local/hadoop/hdfs/datactrl+D退出,同樣進(jìn)入Hadoop2,刪除重建hdfs文件
ctrl+D退出,回到Hadoop0,刪除重建hdfs文件,注意這里是name。
修改slaves文件
[root@hadoop0?local]#?vim?/usr/local/hadoop/etc/hadoop/slaves填入Hadoop1,Hadoop2
localhosthadoop1hadoop2格式化hdfs(這里當(dāng)時(shí)報(bào)了一個(gè)錯(cuò),找不到JAVA_HOME,因?yàn)镠adoop-env.sh中JAVA_HOME=后面多敲了一個(gè)空格,刪掉后成功運(yùn)行)
[root@hadoop0 /]# hdfs namenode -format修改/etc/profile文件 ,修改后可以使用jps 或 Hadoop fs xx 指令
[root@hadoop0 local]# vim /etc/profile將下面的代碼添加到文件末尾,保存退出
export JAVA_HOME=/usr/local/jdk1.8export HADOOP_HOME=/usr/local/hadoopexport?PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinsource使配置生效
ssh進(jìn)入Hadoop1和hadoop2做同樣修改。
回到Hadoop0進(jìn)入Hadoop/sbin,執(zhí)行start-all命令啟動(dòng)
可以運(yùn)行如下命令查看節(jié)點(diǎn)情況
[root@hadoop0 sbin]# hadoop dfsadmin -report測(cè)試wordcount程序
啟動(dòng)Hadoop之后(一定要先啟動(dòng)),可以運(yùn)行自帶的wordcount程序來測(cè)試一下
進(jìn)入Hadoop文件夾 在hdfs建立input文件夾
[root@hadoop0 hadoop]# bin/hdfs dfs -mkdir -p /data/input在容器中創(chuàng)建my_wordcount.txt文件,編輯一些單詞 ,Esc :wq保存
[root@hadoop0 hadoop]# vim my_wordcount.txt將本地的文件上傳到hdfs
[root@hadoop0 hadoop]# bin/hdfs dfs -put my_wordcount.txt /data/input啟動(dòng)wordcount程序,指定輸入文件和輸出文件(版本號(hào)需要改)
[root@hadoop0?hadoop]#?bin/hadoop?jar?share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar?wordcount?/data/input/my_wordcount.txt?/data/out/my_wordcount查看運(yùn)行結(jié)果
[root@hadoop0 hadoop]# bin/hdfs dfs -cat /data/out/my_wordcount/part-r-00000你學(xué)會(huì)了嗎?如果你對(duì)本文有什么想法或意見,歡迎評(píng)論區(qū)告訴我們!
在全民抗疫的特殊時(shí)期下,在人員復(fù)雜、流動(dòng)量大地方的出入口處都設(shè)置了無接觸式無感紅外人體測(cè)溫系統(tǒng)。
在這次疫情防控中,無感人體測(cè)溫系統(tǒng)發(fā)揮了怎樣的作用?高精準(zhǔn)的無感人體測(cè)溫系統(tǒng)的核心技術(shù)武器是什么?對(duì)于開發(fā)者們來說,大家應(yīng)該了解哪些技術(shù)?
今晚 8點(diǎn)《多場(chǎng)景疫情防控:解讀云邊端聯(lián)動(dòng)下的全棧 AI 技術(shù)應(yīng)用》
推薦閱讀:必看!Spark 進(jìn)階之路之「SparkSQL」入門概述 | 博文精選 如果你覺得 Git 很迷惑人,那么這份小抄正是為你準(zhǔn)備的! 開辟 Dart 到 Native 的超級(jí)通道,餓了么跨平臺(tái)的最佳實(shí)踐 比特幣歸誰所有?有人通過分析區(qū)塊鏈數(shù)據(jù)集找到答案 為什么說Transformer就是圖神經(jīng)網(wǎng)絡(luò)? 脫單?撒狗糧?加班?女神節(jié)這么過 | 程序員有話說 真香,朕在看了!總結(jié)
以上是生活随笔為你收集整理的6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4 年 46 个版本,一文读懂 Spri
- 下一篇: 构建企业数字化转型协同力有多难?青云发布