Docker+Hadoop 01:环境部署

本文介绍了基于docker部署hadoop环境的说明。

1. 概述

可以直接从docker hub下载,docker pull tyrival/hadoop

https://hub.docker.com/r/tyrival/hadoop

也可以基于centos镜像手工构建

1
2
3
centos镜像版本: 7.5.1804
hadoop版本: hadoop-2.9.2.tar.gz
java版本: jdk-8u191-linux-x64.tar.gz

hadoop和jdk下载完成后放在~/Documents/Workspace/Docker/hadoop文件夹中

2. 部署过程

1. 启动并进入centos容器

1
2
3
4
5
6
# 将下载的hadoop和jdk放在~/Documents/Workspace/Docker/hadoop中
# 启动镜像时,将此文件夹映射到容器中
docker run -dit -v ~/Documents/Workspace/Docker/hadoop:/root/tmp --name centos centos

# 进入容器
docker exec -it centos /bin/bash

2. 安装软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装必要软件
yum install -y wget vim openssh-server openssh-clients net-tools

# 进入hadoop和jdk所在文件夹
cd /root/tmp

# 创建java安装路径,并将jdk解压到此路径
mkdir /usr/java
tar zxf jdk-8u191-linux-x64.tar.gz -C /usr/java

# 设置jdk环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_191' >> /etc/bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/bashrc
echo 'export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/bashrc
source /etc/bashrc

# 解压hadoop安装包
tar zxf hadoop-2.9.2.tar.gz -C /usr/local
mv /usr/local/hadoop-2.9.2 /usr/local/hadoop

# 设置hadoop的环境变量
echo 'export HADOOP_HOME=/usr/local/hadoop' >> /etc/bashrc
echo 'export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop' >> /etc/bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/bashrc
source /etc/bashrc

3. hadoop准备

1
2
3
4
5
6
7
# 在hadoop目录下创建三个文件夹,
cd $HADOOP_HOME
mkdir tmp namenode datanode

# 根据模板创建配置文件
cd $HADOOP_HOME/etc/hadoop/
cp mapred-site.xml.template mapred-site.xml

4. hadoop设置

vim core-site.xml
1
2
3
4
5
6
7
8
9
10
11
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
vim hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
vim mapred-site.xml
1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vim yarn-site.xml
1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

5. 配置slave节点

1
2
cd $HADOOP_HOME
vim etc/hadoop/slaves

内容如下:

1
2
slave1
slave2

6. ssh key

生成ssh key,配置节点间的相互访问

1
2
3
4
5
6
7
8
cd ~/
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cd ~/.ssh
cat id_rsa.pub >> authorized_keys

7. 配置启动项

新建启动脚本vi /root/run.sh,内容如下:

1
2
3
#!/bin/bash
echo '172.17.0.4 master' >> /etc/hosts
/usr/sbin/sshd -D

设置脚本权限chmod +x /root/run.sh

退出容器exit

8. 保存镜像

1
2
# 5e为当前容器的id,hadoop为新建的镜像名称,v1为镜像版本
docker commit 5e hadoop:v1

9. 启动节点

1
2
3
docker run -d -p 10012:22 --name slave1 hadoop:v1 /root/run.sh
docker run -d -p 10022:22 --name slave2 hadoop:v1 /root/run.sh
docker run -d -p 10002:22 -p 50070:50070 -p 8088:8088 --name master -h master -P --link slave1:slave1 --link slave2:slave2 hadoop:v1 /root/run.sh

10. 启动hadoop

1
2
3
4
5
6
7
8
9
10
11
# 进入master容器
docker exec -it master /bin/bash

# 格式化namenode
hdfs namenode -format

# 启动dfs和yarn,需要多次输入yes
start-dfs.sh

# 启动yarn
start-yarn.sh

11. 验证

访问 http://localhost:50070 ,进入datanode页面,可以看到有2个节点。

分享到