[零基础]用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集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习对抗生成网络--GAN
- 下一篇: 大数据工程技术人员