使用docker部署hadoop集群的詳細(xì)教程
最近要在公司里搭建一個(gè)hadoop測(cè)試集群,于是采用docker來快速部署hadoop集群。
0. 寫在前面
網(wǎng)上也已經(jīng)有很多教程了,但是其中都有不少坑,在此記錄一下自己安裝的過程。
目標(biāo):使用docker搭建一個(gè)一主兩從三臺(tái)機(jī)器的hadoop2.7.7版本的集群
準(zhǔn)備:
首先要有一臺(tái)內(nèi)存8G以上的centos7機(jī)器,我用的是阿里云主機(jī)。
其次將jdk和hadoop包上傳到服務(wù)器中。
我安裝的是hadoop2.7.7。包給大家準(zhǔn)備好了,鏈接:https://pan.baidu.com/s/15n_W-1rqOd2cUzhfvbkH4g 提取碼:vmzw。
1. 步驟
大致分以下幾步:
- 安裝docker
- 基礎(chǔ)環(huán)境準(zhǔn)備
- 配置網(wǎng)絡(luò),并啟動(dòng)docker容器
- 配置host及ssh免密登錄
- 安裝配置hadoop
1.1 安裝docker
依次執(zhí)行如下步驟安裝docker。如果有docker環(huán)境的可以跳過。
yum update yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce systemctl start docker docker -v
1.2 基礎(chǔ)環(huán)境準(zhǔn)備
1.2.1 創(chuàng)建基礎(chǔ)的centos7鏡像拉取官方centos7鏡像
docker pull centos
通過build Dockfile生成帶ssh功能的centos鏡像
創(chuàng)建Dockerfile文件
vi Dockerfile
將如下內(nèi)容寫入Dockerfile
FROM centos MAINTAINER mwf 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-clients RUN echo "root:qwe123" | 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_key RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
上述內(nèi)容大概意思是:以centos鏡像為基礎(chǔ),設(shè)置密碼為wqe123,安裝ssh服務(wù)并啟動(dòng)
構(gòu)建Dockerfile
docker build -t="centos7-ssh" .
將生成一個(gè)名為centos7-ssh
的鏡像,可以通過docker images
查看
1.2.2 生成有hadoop和jdk環(huán)境的鏡像
- 將準(zhǔn)備好的包放在當(dāng)前目錄下。
hadoop-2.7.7.tar.gz
和jdk-8u202-linux-x64.tar.gz
- 通過build Dockfile生成帶hadoop和jdk環(huán)境的centos鏡像
剛才已經(jīng)創(chuàng)建了一個(gè)Dockerfile了,先將他移開。mv Dockerfile Dockerfile.bak
創(chuàng)建Dockerfile
vi Dockerfile
將以下內(nèi)容寫入:
FROM centos7-ssh ADD jdk-8u202-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.8.0_202 /usr/local/jdk1.8 ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH ADD hadoop-2.7.7.tar.gz /usr/local RUN mv /usr/local/hadoop-2.7.7 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH RUN yum install -y which sudo
上述內(nèi)容大概意思是:以上面生成的centos7-ssh為基礎(chǔ),將hadoop和jdk包放進(jìn)去,然后配好環(huán)境變量。
構(gòu)建Dockerfile
docker build -t="hadoop" .
將生成一個(gè)名為hadoop的鏡像
1.3 配置網(wǎng)絡(luò),并啟動(dòng)docker容器
因?yàn)榧洪g必須要能網(wǎng)絡(luò)連通,所以要先配置好網(wǎng)絡(luò)。
創(chuàng)建網(wǎng)絡(luò)
docker network create --driver bridge hadoop-br
以上命令創(chuàng)建了一個(gè)名為hadoop-br
的bridge類型的網(wǎng)絡(luò)
啟動(dòng)docker時(shí)指定網(wǎng)絡(luò)
docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop docker run -itd --network hadoop-br --name hadoop2 hadoop docker run -itd --network hadoop-br --name hadoop3 hadoop
以上命令啟動(dòng)了3臺(tái)機(jī)器,網(wǎng)絡(luò)都指定為hadoop-br
,hadoop1還開啟了端口映射。
查看網(wǎng)絡(luò)情況
docker network inspect hadoop-br
執(zhí)行以上命令就可以看到對(duì)應(yīng)的網(wǎng)絡(luò)信息:
[ { "Name": "hadoop-br", "Id": "88b7839f412a140462b87a353769e8091e92b5451c47b5c6e7b44a1879bc7c9a", "Containers": { "86e52eb15351114d45fdad4462cc2050c05202554849bedb8702822945268631": { "Name": "hadoop1", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "9baa1ff183f557f180da2b7af8366759a0d70834f43d6b60fba2e64f340e0558": { "Name": "hadoop2", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "e18a3166e965a81d28b4fe5168d1f0c3df1cb9f7e0cbe0673864779b224c8a7f": { "Name": "hadoop3", "IPv4Address": "172.18.0.4/16", "IPv6Address": "" } }, } ]
我們可以得知3臺(tái)機(jī)器對(duì)應(yīng)的ip:
172.18.0.2 hadoop1 172.18.0.3 hadoop2 172.18.0.4 hadoop3
登錄docker容器,互相之間就可以ping通了。
docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash
1.4 配置host及ssh免密登錄
1.4.1 配置host
分別在每臺(tái)修改每臺(tái)機(jī)器的host
vi /etc/hosts
將以下內(nèi)容寫入(注:docker分出來的ip對(duì)于每個(gè)人可能不一樣,填你自己的):
172.18.0.2 hadoop1 172.18.0.3 hadoop2 172.18.0.4 hadoop3
1.4.2 ssh免密登錄
因?yàn)樯厦嬖阽R像中已經(jīng)安裝了ssh服務(wù),所以直接分別在每臺(tái)機(jī)器上執(zhí)行以下命令:
ssh-keygen 一路回車 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1 輸入密碼,如果按我的來得話就是qwe123 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2 輸入密碼,如果按我的來得話就是qwe123 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3 輸入密碼,如果按我的來得話就是qwe123
1.4.3 測(cè)試是否配置成功
ping hadoop1 ping hadoop2 ping hadoop3 ssh hadoop1 ssh hadoop2 ssh hadoop3
1.5 安裝配置hadoop
1.5.1 在hadoop1上操作
進(jìn)入hadoop1
docker exec -it hadoop1 bash
創(chuàng)建一些文件夾,一會(huì)在配置中要用到
mkdir /home/hadoop mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data
切換到hadoop配置的目錄
cd $HADOOP_HOME/etc/hadoop/
編輯core-site.xml
<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>
編輯hdfs-site.xml
<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.secondary.http-address</name> <value>hadoop1:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
編輯mapred-site.xml
mapred-site.xml默認(rèn)不存在,要執(zhí)行cp mapred-site.xml.template mapred-site.xml
<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>
編輯yarn-site.xml
<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>
編輯slaves
我這里把hadoop1當(dāng)成主節(jié)點(diǎn),hadoop2、3作為從節(jié)點(diǎn)
hadoop2 hadoop3
把文件拷貝到hadoop2和hadoop3上
依次執(zhí)行以下命令:
scp -r $HADOOP_HOME/ hadoop2:/usr/local/ scp -r $HADOOP_HOME/ hadoop3:/usr/local/ scp -r /home/hadoop hadoop2:/ scp -r /home/hadoop hadoop3:/
1.5.2 在每臺(tái)機(jī)器上操作
分別連接每臺(tái)機(jī)器
docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash
配置hadoop sbin目錄的環(huán)境變量
因?yàn)閔adoop bin目錄在之前創(chuàng)建鏡像時(shí)就配好了,但是sbin目錄沒有配,所以要單獨(dú)配置。分配為每臺(tái)機(jī)器配置:
vi ~/.bashrc
追加如下內(nèi)容:
export PATH=$PATH:$HADOOP_HOME/sbin
執(zhí)行:
source ~/.bashrc
1.5.3 啟動(dòng)hadoop
在hadoop1上執(zhí)行以下命令:
格式化hdfs
hdfs namenode -format
一鍵啟動(dòng)
start-all.sh
不出錯(cuò)的話,就可以慶祝一下了。出錯(cuò)的話,加油。
1.6 測(cè)試使用hadoopjps
# hadoop1 1748 Jps 490 NameNode 846 ResourceManager 686 SecondaryNameNode # hadoop2 400 DataNode 721 Jps 509 NodeManager # hadoop3 425 NodeManager 316 DataNode 591 Jps
上傳文件
hdfs dfs -mkdir /mwf echo hello > a.txt hdfs dfs -put a.txt /mwf hdfs dfs -ls /mwf Found 1 items drwxr-xr-x - root supergroup 0 2020-09-04 11:14 /mwf
由于是云服務(wù)器,不想配端口,就不看ui界面了。
2. 最后
以上是我安裝成功之后總結(jié)的過程,應(yīng)該沒有問題,也可能有遺漏。
3. 參考
https://cloud.tencent.com/developer/article/1084166
https://cloud.tencent.com/developer/article/1084157?from=10680
https://blog.csdn.net/ifenggege/article/details/108396249
到此這篇關(guān)于使用docker部署hadoop集群的詳細(xì)教程的文章就介紹到這了,更多相關(guān)docker部署hadoop集群內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。