日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[零基础]用docker搭建Hadoop集群

發布時間:2024/3/26 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [零基础]用docker搭建Hadoop集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

前言:為什么要用docker搭建Hadoop集群?

準備:下載VMware、VMwareTools(或Xftp、Xshell)、Ubuntu或者CentOS映像文件、Hadoop和jdk壓縮包

一、創建虛擬機

? ? ? ? (1)點擊新建虛擬機

? ? ? ?(2)下一步

? ? ? ? (3)下一步

?????????(4)選擇映像文件

????????(5)自定義信息

?????????(6)自定義信息,位置最好放在非C盤

????????(7)設置處理器內核總數

????????(8) 后面五步都選下一步即可。

?????????(9)設置磁盤大小

?????????(10)點擊下一步,再點擊完成

?????????(11)自動加載默認配置

二、安裝docker并生成相關的鏡像

? ? ? ? (1)安裝docker

? ? ? ? (2)拉取CentOS鏡像(Ubuntu鏡像也行)

? ? ? ? ?(3)通過build Dockfile生成帶ssh功能的centos鏡像

? ? ? ? 1、MAINTAINER hadoop

? ? ? ? 2、root:a123456

? ? ? ? ?(4)將下載的文件上傳虛擬機

?????????1、在主機下載ssh,在終端輸入:

? ? ? ?2、 查看ip地址,在終端輸入:

? ? ? ? 3、用Xshell和Xftp連接虛擬機主機

? ? ? ? ?4、解壓文件(把目錄和文件名改成你自己的)

? ? ? ? (5)生成帶有ssh、hadoop和jdk環境的CentOS鏡像

三、創建網橋,并啟動docker容器

????????(1)創建網橋,在終端輸入:

? ? ? ? (2)查看網橋,在終端輸入:

? ? ? ? (3)啟動三個容器并指定網橋

四、登錄容器,配置ip地址映射和ssh免密登錄

? ? ? ? (1)登錄容器(Hadoop服務器)

? ? ? ? (2)在每個hadoop服務器中配置ip地址映射

? ? ? ? ?(3)在每臺hadoop服務器中配置ssh免密登錄

? ? ? ? (4)測試是否成功配置ssh免密登錄,ssh + hadoop服務器名:

五、修改Hadoop配置文件

????????(1)創建文件夾,配置時要用

????????(2)編輯hadoop_env.sh,修改下面三個參數,按照你自己的改

?????????(3)編輯core-site.xml

????????(4)編輯mapred-site.xml

????????(5)編輯hdfs-site.xml

????????(6)編輯yarn-site.xml

????????(7)編輯workers,把原先的默認值localhost刪除

????????(8)配置環境變量,在終端輸入:

????????(9)把文件拷貝到hadoop2和hadoop3上

????????(10)給文件賦權

六、啟動Hadoop集群

????????(1)在hadoop1上執行以下命令:

? ? ? ? 1、格式化hdfs

? ? ? ? 2、一鍵啟動Hadoop集群

????????(2)測試Hadoop集群

? ? ? ? (3)磁盤空間占用


前言:為什么要用docker搭建Hadoop集群?

????????1、磁盤空間的占用

????????docker搭建的集群占用電腦磁盤空間較小,對電腦的硬件要求也不高,搭建一個Hadoop集群(一主兩從)只需要17GB左右的磁盤空間,而常規的開啟多臺虛擬機搭建的方法,可能搭建一臺Hadoop服務器就需要將近20GB的磁盤空間。

? ? ? ? 2、穩定性

????????docker搭建的Hadoop集群不容易宕機,用常規的方法搭建的話,可能會有一臺或者多臺虛擬機宕機,穩定性較差。

準備:下載VMware、VMwareTools(或Xftp、Xshell)、Ubuntu或者CentOS映像文件、Hadoop和jdk壓縮包

給大家準備了Ubuntu映像文件、Hadoop和jdk壓縮包,點擊鏈接下載即可。沒有Xftp和Xshell的同學可以用VMwareTools替代,只要把壓縮包添加到虛擬機主機上即可。

鏈接:Ubuntu、jdk、Hadoop?
提取碼:2v56

一、創建虛擬機

用VMware創建一臺新的虛擬機(CentOS或Ubuntu都可以)

? ? ? ? (1)點擊新建虛擬機

? ? ? ?(2)下一步

???????
????????(3)下一步

?????????(4)選擇映像文件

????????選擇自己的映像文件(CentOS或者Ubuntu都可以),后面第11步開啟虛擬機時可能要加載20分鐘左右,不想等待加載的話,可以選擇稍后安裝操作系統,自定義安裝可以快一點,不過很多東西得自己配置和下載,后續使用可能麻煩一點。

????????(5)自定義信息

?

?????????(6)自定義信息,位置最好放在非C盤

????????(7)設置處理器內核總數

????????處理器數量 x 每個處理器的內核數量 = 處理器內核總數,依據自己電腦的配置設定,在任務管理器的性能頁面中可以查看自己電腦的處理器數量,我的是8個,直接設置最大值,防止后續使用虛擬機時卡頓。

?

????????(8) 后面五步都選下一步即可。

?

?

?????????(9)設置磁盤大小

????????設置磁盤大小為50GB,只搭建Hadoop集群的話20GB就足夠了,但后面還需要搭建其他集群所以設置磁盤大小為50GB,可以根據自己的需求設定。將虛擬磁盤拆分成多個文件。

?

?????????(10)點擊下一步,再點擊完成

??

?????????(11)自動加載默認配置

????????這個過程可能需要二十分鐘左右。如果不想等待加載,可以在第4步選擇自己的映像文件那里選擇稍后安裝操作系統,不過很多東西得自己配置和下載,后續使用可能麻煩一點。成功開啟虛擬機頁面如下所示:

?

二、安裝docker并生成相關的鏡像

? ? ? ? (1)安裝docker

? ? ? ? CentOS:在 CentOS | 上安裝 Docker 引擎碼頭工人文檔

? ? ? ? Ubuntu:?在 Ubuntu | 上安裝 Docker 引擎碼頭工人文檔

? ? ? ? 只要在終端輸入:sudo docker run hello-world,后出現如下圖的內容就證明安裝docker成功了

? ? ? ? (2)拉取CentOS鏡像(Ubuntu鏡像也行)

? ? ? ? ?在終端輸入:sudo docker pull centos

? ? ? ? ?在終端輸入:sudo docker images,可以看到剛剛拉取的兩個鏡像

?????????每次執行docker語句都要在前面加sudo,比較麻煩,直接將hadoop用戶加入docker用戶組,就不用再輸入sudo了。

sudo gpasswd -a $USER docker #將當前用戶加入到docker用戶組中 newgrp docker #重新加載docker用戶組

????????一般安裝時會自動創建docker用戶組,如果docker用戶組不存在的話,在終端輸入:?

sudo groupadd docker ? ? #創建docker用戶組

????????注意,此時只有執行上述兩條命令行的終端可以不用輸入sudo,其他終端仍要輸入,得重啟虛擬機后所有終端才不用輸入sudo。

? ? ? ? ?(3)通過build Dockfile生成帶ssh功能的centos鏡像

先創建Dockfile文件,在終端輸入:

vi Dockerfile

在Dockfile文件中添加以下內容:

FROM centos MAINTAINER hadoopRUN cd /etc/yum.repos.d/ RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* RUN yum makecache RUN yum update -y RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN yum install -y openssh-clientsRUN echo "root:a123456" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_keyRUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]

Dockfile文件的內容解釋:基于centos鏡像,生成帶有spenssh-server、openssh-clients的鏡像,用戶為root,密碼為a123456,鏡像維護者(作者)為hadoop。為了防止出現Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
錯誤,我更改了yum下載依賴的鏡像baseurl。注意:如果拉取的鏡像是Ubuntu的話,得修改下載spenssh-server、openssh-clients的命令行。

?你可能需要修改的地方:

? ? ? ? 1、MAINTAINER hadoop

????????MAINTAINER+空格+作者的信息,用于指定鏡像作者的信息,我的用戶名是hadoop,改成你自己的

? ? ? ? 2、root:a123456

????????設置鏡像的密碼,改成你自己的

建好Dockerfile文件后,生成鏡像,在終端輸入:

docker build -t="centos7-ssh" .
查看生成的centos7-ssh鏡像,在終端輸入:

docker images

? ? ? ? ?(4)將下載的文件上傳虛擬機

沒有Xftp和Xshell的同學可以用VMwareTools替代,只要把壓縮包添加到虛擬機主機上即可。安裝VMwareTools后,復制本地主機的文件粘貼到虛擬機主機指定目錄下。下面演示的是Xftp和Xshell的操作。

?????????1、在主機下載ssh,在終端輸入:

sudo apt-get install -y openssh-server
????????下載完后,查看ssh進程的運行狀態,在終端輸入:

ps -e|grep ssh

? ? ? ??

? ? ? ? 再查看ssh的運行狀態,在終端輸入:

systemctl status sshd

? ? ? ?2、 查看ip地址,在終端輸入:

ip a

?我的ip地址是:192.168.237.131

? ? ? ? 3、用Xshell和Xftp連接虛擬機主機

Xshell(測試是否能正常連接,其實只需要用Xftp傳輸文件):

? ? ? ? ?用戶名填hadoop(換成你自己的),root可能會登不上,如果ssh運行狀態沒問題,還連接不上的話,可能是防火墻沒關。

?Xftp:

?????????將壓縮包上傳到/home/hadoop(有Dockerfile的目錄),如果上傳失敗,可能是目錄沒有傳輸文件的權限,在終端輸入:chmod 777 /home/hadoop/

? ? ? ? ?4、解壓文件(把目錄和文件名改成你自己的)

在終端輸入:

tar -zxvf /home/hadoop/hadoop-3.1.3.tar.gz -C /home/hadoop

tar -zxvf /home/hadoop/jdk-8u212-linux-x64.tar.gz -C /home/hadoop

? ? ? ? (5)生成帶有ssh、hadoop和jdk環境的CentOS鏡像

移除原有的Dockerfile文件,在終端輸入:

mv Dockerfile Dockerfile.bak

再重新創建一個Dockerfile文件,在終端輸入:

vi Dockerfile

或者直接在Xftp上用記事本編輯原來的Dockerfile文件,更加方便(推薦)

將下面內容填入Dockerfile文件(記得保存)

FROM centos7-sshCOPY jdk1.8.0_212 /usr/local/jdk ENV JAVA_HOME /usr/local/jdk ENV PATH $JAVA_HOME/bin:$PATHCOPY hadoop-3.1.3 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH

構建Dockerfile,在終端輸入:

docker build -t="hadoop" .

?

????????成功生成名字為hadoop的鏡像。

三、創建網橋,并啟動docker容器

????????因為集群的服務器之間需要通信,而且每次虛擬機給集群分配的ip地址都不一樣,所以需要創建網橋,給每臺服務器分配固定的ip映射,這樣就可以通過使用服務器名進行通信了,而且ip地址也不會變動。

????????(1)創建網橋,在終端輸入:

????????docker network create hadoop

? ? ? ? (2)查看網橋,在終端輸入:

????????docker network ls

? ? ? ? 其他三個網橋是安裝docker時自帶的,hadoop是剛剛創建的。

? ? ? ? (3)啟動三個容器并指定網橋

依次在終端執行下面三條命令行:

docker run -itd --network hadoop --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop

docker run -itd --network hadoop --name hadoop2 hadoop

docker run -itd --network hadoop --name hadoop3 hadoop

參數解釋:

? ? ? ? -itd:在后臺運行交互式容器

? ? ? ? --network:指定網橋

? ? ? ? --name:指定生成的容器名

? ? ? ? -p:指定端口映射,主機端口號:容器端口號,第一個是hdfs服務,第二個是yarn 服務

? ? ? ? 末尾的hadoop是運行的鏡像名

查看生成的容器,在終端輸入:

docker ps -a

查看網橋使用情況,在終端輸入:

docker network inspect hadoop

?

?記錄每臺服務器的ip地址,后面要用,每個人的可能不一樣,換成你自己的

172.18.0.2 hadoop1

172.18.0.3 hadoop2

172.18.0.4 hadoop3

四、登錄容器,配置ip地址映射和ssh免密登錄

? ? ? ? (1)登錄容器(Hadoop服務器)

開啟三個終端,在每個終端分別輸入:

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

? ? ? ? (2)在每個hadoop服務器中配置ip地址映射

每臺hadoop服務器的終端輸入:

vi /etc/hosts

然后填入剛剛記錄的ip地址

?

?????????每臺Hadoop服務器都配置好后,可以互相ping一下(ctrl + c停止ping),看看是否配置成功。hadoop1 ping hadoop2 如下圖所示:

? ? ? ? ?(3)在每臺hadoop服務器中配置ssh免密登錄

每臺hadoop服務器終端輸入:

ssh-keygen

然后一直回車即可,再在每臺hadoop服務器終端中輸入:

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1
填yes后,輸入第二(3)步時設置的密碼,a123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2
填yes后,輸入第二(3)步時設置的密碼,a123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3
填yes后,輸入第二(3)步時設置的密碼,a123456

? ? ? ? (4)測試是否成功配置ssh免密登錄,ssh + hadoop服務器名:

ssh hadoop1

ssh hadoop2

ssh hadoop3

五、修改Hadoop配置文件

????????在hadoop1中,進入Hadoop配置目錄,我的是:/usr/local/hadoop/etc/hadoop,查看目錄下的文件,不同版本的Hadoop可能文件數量和名字會不同,在終端輸入:

ls

????????(1)創建文件夾,配置時要用

mkdir /home/hadoop
mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data

????????(2)編輯hadoop_env.sh,修改下面三個參數,按照你自己的改

?????????(3)編輯core-site.xml

<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property><property><name>hadoop.tmp.dir</name><value>file:/home/hadoop/tmp</value></property><property><name>io.file.buffer.size</name><value>131702</value></property> </configuration>

????????(4)編輯mapred-site.xml

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1:19888</value></property> </configuration>

????????(5)編輯hdfs-site.xml

<configuration><property><name>dfs.namenode.name.dir</name><value>file:/home/hadoop/hdfs_name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/home/hadoop/hdfs_data</value></property><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.http-address</name><value>hadoop1:9001</value></property><property><name>dfs.namenode.secondary.http-address</name><value>hadoop2:9002</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property> </configuration>

Hadoop的Web UI界面訪問地址:1、namenode:hadoop1:9001(會自動跳轉到9000端口,如果直接訪問9000端口號可能會訪問異常)2、secondarynamenode:hadoop2:9002? ? ?? ??

??(6)編輯yarn-site.xml

<configuration><!-- Site specific YARN configuration properties --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop1:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop1:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>hadoop1:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>hadoop1:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop1:8088</value></property> </configuration>

????????(7)編輯workers,把原先的默認值localhost刪除

hadoop2 hadoop3

????????(8)配置環境變量,在終端輸入:

vi /etc/profile

在文件尾部添加配置

export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$PATH export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$PATH export PATH=$HADOOP_HOME/sbin:$PATH export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

保存退出后,再輸入下面的命令行使配置生效:

source /etc/profile

????????(9)把文件拷貝到hadoop2和hadoop3上

依次執行以下命令:

scp -r $HADOOP_HOME/ hadoop2:/usr/local/
scp -r $HADOOP_HOME/ hadoop3:/usr/local/

scp -r /home/hadoop hadoop2:/
scp -r /home/hadoop hadoop3:/

scp -r /etc/profile hadoop2:/
scp -r /etc/profile hadoop3:/

????????(10)給文件賦權

每臺hadoop服務器的終端執行下面兩條命令行:

chmod -R 777 /usr/local/hadoop

chmod -R 777 /usr/local/jdk


六、啟動Hadoop集群

????????(1)在hadoop1上執行以下命令:

? ? ? ? 1、格式化hdfs

hdfs namenode -format

? ? ? ? 2、一鍵啟動Hadoop集群

start-all.sh

????????(2)測試Hadoop集群

每臺服務器都輸入:

jps
hadoop1:

hadoop2:?

hadoop3:

?

? ? ? ? hadoop1是名稱結點,hadoop2是第二名稱節點和數據節點,hadoop3是數據節點。網上很多人把名稱節點和第二名稱節點配置在同一臺服務器上,我覺得這樣配置是錯的,這樣配置根本發揮不了第二名稱節點的作用:作為名稱節點的檢查點,定期合并日志和鏡像。

? ? ? ? (3)磁盤空間占用

? ? ? ? 現在hadoop集群已經搭建好了,我們看看磁盤空間占用了多少。前面是剩余磁盤空間,后面是總磁盤空間,可以得出只用了17GB左右。

?參考:使用docker部署hadoop集群_upupfeng的博客-CSDN博客

感謝瀏覽!如果搭建過程中出現問題,歡迎評論,一起討論一起進步!

總結

以上是生活随笔為你收集整理的[零基础]用docker搭建Hadoop集群的全部內容,希望文章能夠幫你解決所遇到的問題。

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