Docker 部署分布式 Hadoop的超詳細(xì)實(shí)戰(zhàn)指南
- 適合人群:大數(shù)據(jù)初學(xué)者、運(yùn)維工程師、想在本地快速搭建 Hadoop 集群的同學(xué)
- 技術(shù)環(huán)境:CentOS 7 + Docker + Hadoop 2.7.2
- 架構(gòu)模式:1 Master + 2 Slave 分布式集群
一:背景
在傳統(tǒng)方式下部署 Hadoop:
- 需要準(zhǔn)備多臺(tái)虛擬機(jī)
- 手動(dòng)配置網(wǎng)絡(luò)、主機(jī)名、SSH 免密
- 重復(fù)安裝 JDK、Hadoop
- 環(huán)境不可復(fù)用
而使用 Docker 的優(yōu)勢(shì):
? 環(huán)境隔離
? 一臺(tái)機(jī)器模擬多節(jié)點(diǎn)
? 可快速銷毀重建
? 鏡像可復(fù)用
? 非常適合學(xué)習(xí)與實(shí)驗(yàn)
在真實(shí)生產(chǎn)中,例如在基于 Apache Hadoop 的數(shù)據(jù)平臺(tái)環(huán)境中,也常結(jié)合容器化與編排技術(shù)使用。
二:部署
1)創(chuàng)建基礎(chǔ)鏡像
查看系統(tǒng)版本
[root@hadoop108 ~]# uname -r 3.10.0-862.el7.x86_64
安裝 Docker
[root@hadoop108 ~]# yum install -y docker
啟動(dòng) Docker
[root@hadoop108 ~]# systemctl start docker
設(shè)置 Docker 開機(jī)自啟
[root@hadoop108 ~]# systemctl enable docker
查看 Docker 狀態(tài)
[root@hadoop108 ~]# systemctl status docker
配置 Docker 鏡像加速器
[root@hadoop108 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://3iy7bctt.mirror.aliyuncs.com"]
}
[root@hadoop108 ~]# systemctl daemon-reload [root@hadoop108 ~]# systemctl restart docker [root@hadoop108 ~]# docker info
搜索并拉取 CentOS 鏡像
[root@hadoop108 ~]# docker search centos [root@hadoop108 ~]# docker pull centos:7
查看鏡像列表
[root@hadoop108 ~]# docker images
運(yùn)行 CentOS 容器(帶特權(quán)模式,用于啟動(dòng) systemd 服務(wù))
[root@hadoop108 ~]# docker run --privileged=true --name centos7 -h hadoop -itd centos:7 /usr/sbin/init
查看運(yùn)行中的容器
[root@hadoop108 ~]# docker ps
進(jìn)入容器
[root@hadoop108 ~]# docker exec -it centos7 /bin/bash
在容器內(nèi)安裝必要工具
[root@hadoop ~]# yum install -y vim net-tools openssh-server openssh-clients rsync
配置 SSH 服務(wù)并啟動(dòng)
[root@hadoop ~]# vim /etc/ssh/sshd_config Port 22 PermitRootLogin yes
[root@hadoop ~]# systemctl start sshd.service [root@hadoop ~]# systemctl enable sshd.service [root@hadoop ~]# systemctl status sshd.service
創(chuàng)建軟件目錄
[root@hadoop ~]# mkdir -p /opt/module /opt/software
退出容器并提交為新的鏡像
[root@hadoop ~]# exit [root@hadoop108 ~]# docker commit 容器ID centos:hadoop [root@hadoop108 ~]# docker images
2)創(chuàng)建 Hadoop
基于新鏡像啟動(dòng) Master 和 Slave 容器
[root@hadoop108 ~]# docker run --privileged=true --name master -h master -p 50070:50070 -itd centos:hadoop /usr/sbin/init [root@hadoop108 ~]# docker run --privileged=true --name slave01 -h slave01 -p 8088:8088 -itd centos:hadoop /usr/sbin/init [root@hadoop108 ~]# docker run --privileged=true --name slave02 -h slave02 -itd centos:hadoop /usr/sbin/init
進(jìn)入容器配置 hosts 文件(在每個(gè)容器中執(zhí)行)
[root@master ~]# vim /etc/hosts 172.17.0.3 master 172.17.0.4 slave01 172.17.0.5 slave02
設(shè)置 root 密碼
[root@master ~]# passwd root [root@slave01 ~]# passwd root [root@slave02 ~]# passwd root
配置 SSH 免密登錄
[root@master ~]# ssh-keygen -t rsa [root@master ~]# ssh-copy-id master [root@master ~]# ssh-copy-id slave01 [root@master ~]# ssh-copy-id slavse02
從宿主機(jī)拷貝 Hadoop 和 JDK 安裝包到容器
[root@hadoop108 ~]# docker cp jdk-8u144-linux-x64.tar.gz master:/opt/software [root@hadoop108 ~]# docker cp hadoop-2.7.2.tar.gz master:/opt/software
安裝 JDK
[root@master ~]# tar -xzvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
[root@master ~]# vim /etc/profile # JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
[root@master ~]# source /etc/profile [root@master ~]# java -version
安裝 Hadoop
[root@master ~]# tar -xzvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
[root@master ~]# vim /etc/profile # HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
[root@master ~]# source /etc/profile [root@master ~]# hadoop version
配置 Hadoop 配置文件
[root@master ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop
配置 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
配置 hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置 hdfs-site.xml
<property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave02:50090</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
配置 slaves 文件
master slave01 slave02
配置 yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置 yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>slave01</value> </property>
配置 mapred-site.xml
[root@master hadoop]# mv mapred-site.xml.template mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
分發(fā)配置文件到 slave 節(jié)點(diǎn)
[root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave01:/opt/module/ [root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave02:/opt/module/ [root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave01:/opt/module/ [root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave02:/opt/modusle/
在 slave 節(jié)點(diǎn)配置環(huán)境變量(在 slave01 和 slave02 中執(zhí)行)
[root@slave01 ~]# vim /etc/profile # JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin # HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
[root@slave01 ~]# source /etc/profile
3)啟動(dòng) Hadoop
- 格式化 HDFS 并啟動(dòng) Hadoop
- 在 master 節(jié)點(diǎn)執(zhí)行:
[root@master ~]# hdfs namenode -format [root@master ~]# start-dfs.sh
- 在 slave01 節(jié)點(diǎn)執(zhí)行:
[root@slave01 ~]# start-yarn.sh
瀏覽器訪問
- HDFS:
http://宿主機(jī)IP:50070 - YARN:
http://宿主機(jī)IP:8088
4)保存鏡像
停止 Hadoop 集群
[root@slave01 ~]# stop-yarn.sh [root@master ~]# stop-dfs.sh
將容器提交為鏡像
[root@hadoop108 ~]# docker commit master centos:master [root@hadoop108 ~]# docker commit slave01 centos:slave01 [root@hadoop108 ~]# docker commit slave02 centos:slave02
總結(jié)
本文完整演示了:
- 制作 Hadoop 基礎(chǔ)鏡像
- 構(gòu)建三節(jié)點(diǎn)集群
- 配置 SSH 免密
- 配置 HDFS + YARN
- 啟動(dòng)并驗(yàn)證 Web UI
- 保存為可復(fù)用鏡像
核心思想:
用 Docker 模擬分布式環(huán)境
用容器復(fù)刻真實(shí)大數(shù)據(jù)架構(gòu)
對(duì)于正在做大數(shù)據(jù)方向?qū)W習(xí)或畢業(yè)設(shè)計(jì)的同學(xué),這種方式可以極大降低實(shí)驗(yàn)成本。
到此這篇關(guān)于Docker 部署分布式 Hadoop(超詳細(xì)實(shí)戰(zhàn)版)的文章就介紹到這了,更多相關(guān)Docker 部署分布式 Hadoop內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決docker目錄內(nèi)存不足擴(kuò)容處理方案
文章介紹了Docker存儲(chǔ)目錄遷移方法:因系統(tǒng)盤空間不足,需將Docker數(shù)據(jù)遷移到更大磁盤(如/home/docker),通過修改daemon.json配置、重啟服務(wù)并驗(yàn)證遷移成功,最終釋放系統(tǒng)盤空間2025-09-09
創(chuàng)建支持SSH服務(wù)的Docker鏡像的方法
這篇文章主要介紹了創(chuàng)建支持SSH服務(wù)的Docker鏡像的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Docker查看是否開機(jī)自啟及容器自啟動(dòng)設(shè)置
Docker是當(dāng)前最流行的容器技術(shù),通過運(yùn)用容器打包應(yīng)用程序并部署到生產(chǎn)環(huán)境中,可大大提高部署的速度和可靠性,下面這篇文章主要給大家介紹了關(guān)于Docker查看是否開機(jī)自啟及容器自啟動(dòng)設(shè)置的相關(guān)資料,需要的朋友可以參考下2024-01-01

