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成功! 此处应该有掌声!!!

相关推荐
光路科技2 分钟前
光路科技将携工控四大产品亮相工博会,展示工业自动化新成果
运维·科技·自动化
~光~~32 分钟前
【问题解决】VMware +Ubuntu20.04创建用户后无法登陆的问题
ubuntu
PAQQ38 分钟前
解决 ubuntu 重启串口号变化
linux·运维·ubuntu
币须赢1 小时前
英伟达Thor芯片套件9月发货 “物理AI”有哪些?
大数据·人工智能
dyxal1 小时前
linux系统安装wps
linux·运维·wps
lily363926046a2 小时前
智联未来 点赋科技
大数据·人工智能
学习中的阿陈2 小时前
Hadoop伪分布式环境配置
大数据·hadoop·分布式
Xxtaoaooo2 小时前
Nginx 502 网关错误:upstream 超时配置的踩坑与优化
运维·nginx·负载均衡·502错误·upstream超时
程序员小羊!2 小时前
大数据电商流量分析项目实战:Spark SQL 基础(四)
大数据·sql·spark
zzzsde3 小时前
【Linux】初识Linux
linux·运维·服务器