日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码

發布時間:2024/8/23 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?tianyouououou

責編 |?Carol

來源 | CSDN 博客

封圖 | CSDN付費下載于視覺中國

最近,作者整理了一套Hadoop搭建方案。最后的鏡像大小1.4G多,使用docker子網,容器重新啟動不需要重新配置/etc/hosts文件。

配置過程中參考了如下博客,有些細節問題這些博客里面解釋的更加詳細。

ssh配置部分:

https://blog.csdn.net/weixin_42051109/article/details/82744993

wordcount部分:

https://blog.csdn.net/alexwym/article/details/82497582

雖然配置完了,但是有些地方并不完全懂,后續有機會還會做一些補充解釋。

* 環境:Ubuntu16.04虛擬機

準備工作

  • 下載解壓jdk1.8文件夾

  • 下載解壓Hadoop2.8.5文件夾

  • docker pull centos7基礎鏡像

  • 建mydocker文件夾

  • 將jdk1.8文件夾和Hadoop文件夾移動到mydocker文件夾(這里為了簡潔將Hadoop2.8.5文件夾重命名為Hadoop)

  • 編輯Hadoop文件夾內的文件(避免創建鏡像后要修改三遍)

  • 首先進入Hadoop/etc/Hadoop文件夾后修改hadoop.env.sh

    tianyou@ubuntu:~/mydocker/Hadoop/etc/Hadoop$?vim?hadoop-env.sh

    將JAVA_HOME修改為如下路徑

    export JAVA_HOME= /usr/local/jdk1.8

    修改core-site.xml如下

    tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim core-site.xml <!-- Put site-specific property overrides in this file. --> <configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop0:9000</value></property><property><name>io.file.buffer.size</name><value>131072</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value></property> </configuration>

    修改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

    tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim mapred-site.xml.template <!-- Put site-specific property overrides in this file. --> <configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property> </configuration>

    修改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配置文件是為了構建鏡像時直接將hadoop文件夾COPY到鏡像中,再用鏡像創建三個容器后不需要在三個容器中分別進行重復的配置工作。

    使用Dockerfile構建鏡像

    1、編輯Dockefile,基于準備好的centos:7基礎鏡像構建

    FROM centos:7 # 選擇一個已有的os鏡像作為基a礎 # 鏡像的作者 MAINTAINER tianyou # 安裝openssh-server和sudo軟件包,并且將sshd的UsePAM參數設置成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 \# 添加測試用戶root,密碼root,并且將此用戶添加到sudoers里 && echo "root:root" | chpasswd \&& echo "root ALL=(ALL) ALL" >> /etc/sudoers \ # 下面這兩句比較特殊,在centos6上必須要有,否則創建出來的容器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文件夾下執行構建命令(因為需要文件訪問權限要加sudo,命令最后的,不要丟)

    tianyou@ubuntu:~/mydocker$ sudo docker build -t tianyou/centos-java-hadoop .

    創建容器

    1、創建子網 Hadoopnetwork

    tianyou@ubuntu:~/mydocker$ docker network create --subnet=172.19.0.0/16 hadoopnetwork

    2、創建容器并指定子網和ip

    創建Hadoop0容器

    tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.2 --name hadoop0 -h hadoop0 tianyou/centos-java-hadoop

    創建hadoop1容器

    tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.3 --name hadoop1 -h hadoop1 tianyou/centos-java-hadoop

    創建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.進入Hadoop0

    tianyou@ubuntu:~/mydocker$?docker?exec?-it?hadoop0?/bin/bash

    2.配置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 文件中,執行指令把密鑰存儲在 /root/.ssh/authorized_keys 文件中

    修改sshd_config配置使提示更簡潔,合并指令如下:

    [root@hadoop0?/]#?cat?/root/.ssh/id_rsa.pub?>>?/root/.ssh/authorized_keys?&&?vim?/etc/ssh/sshd_config

    將配置文件中對應行 修改為如下所示:

    Port 22 PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication yes ChallengeResponseAuthentication no UsePAM yes PrintLastLog?no

    Esc進入命令模式,:wq保存
    修改ssh_config文件中 StrictHostKeyChecking ask改成no

    [root@Master local]# vim /etc/ssh/ssh_config StrictHostKeyChecking no

    Ctrl+P+Q退出Hadoop0容器

    進入Hadoop1和Hadoop2容器,進行同樣的操作生成ssh密鑰和配置

    3、將容器的秘鑰互相添加

    每個容器的 /root/.ssh/authorized_keys 文件都需要填入所有容器的密鑰

    以上操作結束后在Hadoop2容器中,查看文件,復制出haoop2密鑰

    [root@hadoop2?/]#??vim??/root/.ssh/authorized_keys

    ctrl+P+Q退出,同樣復制出Hadoop1和Hadoop0秘鑰,將三個秘鑰全部復制到三個容器的/root/.ssh/authorized_keys文件中。

    復制完成后在每個容器中都執行一次 /usr/sbin/sshd命令。

    [root@Master local]# /usr/sbin/sshd

    至此,通過ssh可以互相訪問,測試一下

    [root@hadoop0 /]# ssh hadoop1

    ctrl+D返回

    完善Hadoop配置

    進入Hadoop0,修改hdfs-site.xml 文件如下:

    [root@hadoop0 /]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

    因為在COPY進容器時按照datanode配置,所以要修改為namenode配置,只需要將三處data修改為name。

    <!-- Put site-specific property overrides in this file. --><configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/hdfs/name</value> </property></configuration>

    通過ssh進入Hadoop1,刪除重建hdfs文件

    [root@hadoop0 /]# ssh hadoop1[root@hadoop1 ~]# rm -rf /usr/local/hadoop/hdfs && mkdir -p /usr/local/hadoop/hdfs/data

    ctrl+D退出,同樣進入Hadoop2,刪除重建hdfs文件
    ctrl+D退出,回到Hadoop0,刪除重建hdfs文件,注意這里是name。

    [root@hadoop0 /]# rm -rf /usr/local/hadoop/hdfs && mkdir -p /usr/local/hadoop/hdfs/name

    修改slaves文件

    [root@hadoop0?local]#?vim?/usr/local/hadoop/etc/hadoop/slaves

    填入Hadoop1,Hadoop2

    localhosthadoop1hadoop2

    格式化hdfs(這里當時報了一個錯,找不到JAVA_HOME,因為Hadoop-env.sh中JAVA_HOME=后面多敲了一個空格,刪掉后成功運行)

    [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/sbin

    source使配置生效

    [root@hadoop1 ~]# source /etc/profile

    ssh進入Hadoop1和hadoop2做同樣修改。
    回到Hadoop0進入Hadoop/sbin,執行start-all命令啟動

    [root@hadoop0 local]# cd /usr/local/hadoop/sbin/[root@hadoop0 sbin]# ./start-all.sh

    可以運行如下命令查看節點情況

    [root@hadoop0 sbin]# hadoop dfsadmin -report

    測試wordcount程序

    啟動Hadoop之后(一定要先啟動),可以運行自帶的wordcount程序來測試一下

    進入Hadoop文件夾 在hdfs建立input文件夾

    [root@hadoop0 hadoop]# bin/hdfs dfs -mkdir -p /data/input

    在容器中創建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

    啟動wordcount程序,指定輸入文件和輸出文件(版本號需要改)

    [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

    查看運行結果

    [root@hadoop0 hadoop]# bin/hdfs dfs -cat /data/out/my_wordcount/part-r-00000

    你學會了嗎?如果你對本文有什么想法或意見,歡迎評論區告訴我們!

    在全民抗疫的特殊時期下,在人員復雜、流動量大地方的出入口處都設置了無接觸式無感紅外人體測溫系統。

    在這次疫情防控中,無感人體測溫系統發揮了怎樣的作用?高精準的無感人體測溫系統的核心技術武器是什么?對于開發者們來說,大家應該了解哪些技術?

    今晚 8點《多場景疫情防控:解讀云邊端聯動下的全棧 AI 技術應用》

    推薦閱讀:必看!Spark 進階之路之「SparkSQL」入門概述 | 博文精選 如果你覺得 Git 很迷惑人,那么這份小抄正是為你準備的! 開辟 Dart 到 Native 的超級通道,餓了么跨平臺的最佳實踐 比特幣歸誰所有?有人通過分析區塊鏈數據集找到答案 為什么說Transformer就是圖神經網絡? 脫單?撒狗糧?加班?女神節這么過 | 程序員有話說 真香,朕在看了!

    總結

    以上是生活随笔為你收集整理的6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。