Docker部署hadoop+运行wordcount详解

一、拉取 ubuntu镜像

抓取ubuntu的镜像作为基础搭建hadoop环境

复制代码
# 如果不指定版本号的话,默认拉取最新的ubuntu版本
docker pull ubuntu

二、创建容器

复制代码
# 1.查看已拉取的镜像
docker images

# 2.创建容器
docker run -it --name myhadoop -p 80:80 ubuntu
# docker run :创建并运行一个容器
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# --name:给容器起一个名字,比如叫做:myhadoop
# -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是docker容器端口
# ubuntu:容器名称

容器启动后,会自动进入容器的控制台

在容器的控制台安装所需软件和更换源

复制代码
# 3.更换国内源
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt-get clean
apt-get update

安装所需软件

复制代码
apt-get install net-tools vim openssh-server
复制代码
/etc/init.d/ssh start

让ssh服务器自动启动

复制代码
vi ~/.bashrc

在文件的最末尾按O进入编辑模式,加上:

复制代码
/etc/init.d/ssh start

按ESC返回命令模式,输入:wq保存并退出。

让修改即刻生效

复制代码
source ~/.bashrc

配置ssh的无密码访问

复制代码
ssh-keygen -t rsa

连续按回车

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

三、安装JDK 8

进入docker中ubuntu里面的容器

安装JDK 8

hadoop 3.x目前仅支持jdk 7, 8

复制代码
apt-get install openjdk-8-jdk

在环境变量中引用jdk,编辑bash命令行配置文件

复制代码
vi ~/.bashrc

在文件的最末尾加上

复制代码
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin

让jdk配置即刻生效

复制代码
source ~/.bashrc

测试jdk正常运作

复制代码
java -version

将当前容器保存为镜像

复制代码
sudo docker commit a4157fc08b47 ubuntu-hadoop

可以看到该镜像已经创建成功,下次需要新建容器时可直接使用该镜像

四、下载hadoop-3.2.3

上传到虚拟机中

将压缩包复制到Docker容器中

复制代码
docker cp /home/cyh/hadoop-3.2.3.tar.gz a4157fc08b47:/home/hadoop/build/

在容器控制台上解压hadoop(就是之前创建的容器的控制台,不是自己的控制台!)

复制代码
tar -zxvf hadoop-3.2.3.tar.gz -C /usr/local

安装完成了,查看hadoop版本

复制代码
cd /usr/local/hadoop-3.2.3
./bin/hadoop version

为hadoop指定jdk位置

复制代码
vi etc/hadoop/hadoop-env.sh

查找到被注释掉的JAVA_HOME配置位置,更改为刚才设定的jdk位置

复制代码
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

五、hadoop联机配置

1、配置core-site.xml文件

vi etc/hadoop/core-site.xml

XML 复制代码
<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop-3.2.3/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
</configuration>

2、配置hdfs-site.xml文件

vi etc/hadoop/hdfs-site.xml

XML 复制代码
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop-3.2.3/namenode_dir</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop-3.2.3/datanode_dir</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
</configuration>

3、配置mapred-site.xml文件

复制代码
vi etc/hadoop/mapred-site.xml
XML 复制代码
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
</configuration>

4、配置yarn-site.xml文件

复制代码
vi etc/hadoop/yarn-site.xml
XML 复制代码
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
</configuration>

过程 如下

六、服务启动权限配置

1、配置start-dfs.sh与stop-dfs.sh文件

XML 复制代码
vi sbin/start-dfs.sh 和 vi sbin/stop-dfs.sh
vi sbin/start-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

继续修改配置文件

XML 复制代码
vi sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2、配置start-yarn.sh与stop-yarn.sh文件

XML 复制代码
vi sbin/start-yarn.sh 和 vi sbin/stop-yarn.sh
vi sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
XML 复制代码
vi sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

核心文件一定不能配错,否则后面会出现很多问题!

配置完成,保存镜像

docker ps

复制代码
docker commit 11f9454b301f ubuntu-myx

保存的镜像名为 ubuntu-myx

七、网络配置

启动hadoop,并进行网络配置

打开三个宿主控制台,启动一主两从三个容器

1、master

打开端口映射:8088 => 8088

复制代码
sudo docker run -p 8088:8088 -it -h master --name master ubuntu-myx

2、启动节点worker01

复制代码
sudo docker run -it -h worker01 --name worker01 ubuntu-myx

3、节点worker02

复制代码
sudo docker run -it -h worker02 --name worker02 ubuntu-myx

4、映射信息补全

分别打开三个容器的/etc/hosts,将彼此的ip地址与主机名的映射信息补全(三个容器均需要如此配置)

复制代码
vi /etc/hosts

使用以下命令查询ip

复制代码
ifconfig

5、检查配置

检查配置是否有效

复制代码
ssh master
ssh worker01
ssh worker02

master 连接worker01节点successfully:

worker01节点连接master 成功:

worker02连接worker01节点successfully:

6、master容器上配置

在master容器上配置worker容器的主机名

复制代码
cd /usr/local/hadoop-3.2.3
vi etc/hadoop/workers

网络配置完成

八、启动hadoop

在master主机上

复制代码
cd /usr/local/hadoop-3.2.3
./bin/hdfs namenode -format

1、正常启动

2、启动服务

复制代码
./sbin/start-all.sh

3、hdfs上建立目录

在hdfs上建立一个目录存放文件

假设该目录为:/home/hadoop/input

复制代码
./bin/hdfs dfs -mkdir -p /home/hadoop/input
./bin/hdfs dfs -put ./etc/hadoop/*.xml /home/hadoop/input

4、查看分发复制

查看分发复制是否正常

复制代码
./bin/hdfs dfs -ls /home/hadoop/input

5、运行案例

在hdfs上建立一个目录存放文件

例如

复制代码
./bin/hdfs dfs -mkdir -p /home/hadoop/wordcount

把文本程序放进去

复制代码
./bin/hdfs dfs -put hello /home/hadoop/wordcount

查看分发情况

复制代码
./bin/hdfs dfs -ls /home/hadoop/wordcount

运行MapReduce自带wordcount的示例程序(自带的样例程序运行不出来,可能是虚拟机性能的问题,这里就换成了简单的wordcount程序)

复制代码
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar wordcount /home/hadoop/wordcount /home/hadoop/wordcount/output

6、运行成功

运行结束后,查看输出结果

复制代码
./bin/hdfs dfs -ls /home/hadoop/wordcount/output
./bin/hdfs dfs -cat /home/hadoop/wordcount/output/*

至此,Docker部署hadoop成功! 此处应该有掌声!!!

相关推荐
CableTech_SQH16 分钟前
华中科技大学同济医学院附属协和医院重庆医院智能化建设 F5G 全光方案百盛分析报告
大数据·网络·5g·运维开发·信息与通信
NiceCloud喜云18 分钟前
IntelliJ IDEA 保姆级安装 + ClaudeAPI 配置教程
java·开发语言·前端·ide·chrome·docker·intellij-idea
xingyuzhisuan33 分钟前
哪里可以一键部署Stable Diffusion XL的GPU云环境?(2026实测指南)
运维·人工智能·stable diffusion·gpu算力
陆水A42 分钟前
用CASE WHEN实现横向迭代,节点数据串行推算
大数据·数据仓库·数据库开发·etl·etl工程师
Agent手记42 分钟前
采购合同智能审核自动化,落地步骤与落地风险管控方案 —— 2026年企业级Agent深度实战指南
运维·人工智能·ai·自动化
3D探路人1 小时前
模灵 大模型聚合API 转发流程技术实现
java·大数据·开发语言·前端·人工智能·计算机视觉
咖啡里的茶i1 小时前
在Docker环境中安装Hadoop cluster
docker
Liangwei Lin1 小时前
LeetCode 22. 括号生成
linux·运维·服务器
( •̀∀•́ )9201 小时前
Linux 下部署 `social-auto-upload` 遇到的问题及完整解决方案
linux·运维·服务器
代码中介商1 小时前
Libevent实战:高性能网络编程指南
linux·运维·网络