1. 项目说明
关于Docker方面的内容,我们这里就不做介绍了,大家可以访问Docker官方网站(https://www.docker.com)获取详细的信息,包括Docker安装部署,基本操作命令等等。
我这个项目的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群,即通过一台Ubuntu节点运行Hadoop集群环境。
针对项目的环境信息如下:
Hadoop安装包:hadoop-2.7.3.tar.gz
JDK安装包:jdk-7u80-linux-x64.tar.gz
Linux操作系统(64位)以及内核版本:ubuntu-16.04/4.4.0-36-generic
Docker版本:1.12.1
过多的理论知识,我就不做讲解了,有问题的朋友可以咨询我。
2. 搭建3个节点的Hadoop集群
2.1 下载Hadoop的Docker镜像
docker pull jiangshouzhuang/hadoop2.7.3-cluster-on-docker:1.0
下载完成后,进行验证:
docker images
输出结果为:
REPOSITORY TAG IMAGE ID CREATED SIZE
jiangshouzhuang/hadoop2.7.3-cluster-on-docker 1.0 03b627a5544b About an hour ago 859.2 MB
2.2 下载Github仓库中所需要的配置文件
git clone https://github.com/jiangshouzhuang/hadoop-cluster-on-docker
2.3 创建Hadoop集群所需的网络
docker network create --driver=bridge hadoop
2.4 运行Docker容器
cd hadoop-cluster-on-docker
chmod +x *
./start-container.sh
输出结果为:
output:
start master container...
start slave1 container...
start slave2 container...
root@master:/#
这里我们启动了3个容器,包括一个Master节点,2个Slave节点。
下面步骤的执行都是在master的容器中(root@master:/#)操作的。
2.5 启动Hadoop,包括HDFS和YARN
root@master:/# start-hadoop.sh
或者你也可以单独启动HDFS和Yarn,如下:
root@master:/# start-dfs.sh
root@master:/# start-yarn.sh
2.6 运行WordCount程序验证Hadoop集群环境
root@master:/# run-wordcount.sh
如果运行成功的话,结果为:
input file1.txt:
Hello Hadoop
input file2.txt:
Hello Docker
wordcount output:
Docker 1
Hadoop 1
Hello 2
Hadoop相关管理页面如下:
NameNode: http://192.168.1.104:50070/
ResourceManager: http://192.168.1.104:8088/
192.168.1.104为Docker宿主的IP地址。
2.7 查看正在运行的容器
我们可以通过docker ps查看正在运行的容器,如下:
我们可以看到master容器将NameNode和ResourceManager的管理页面的端口号映射到宿主机上了,如图为0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp。
3. 定制需要的N个Hadoop集群
3.1 参考上面的3个Hadoop集群的2.1~2.3步骤
3.2 重新构建Docker镜像
其实这一步主要是修改Hadoop的Slave配置文件slaves。
首先请确保将JDK和Hadoop的安装包放到hadoop-cluster-on-docker目录中。
chmod +x *
./resize-cluster.sh 5
参数的大小根据实际情况指定。
3.3 启动Docker
./start-container.sh 5
参数的大小保持和上面一致。
3.4 运行Hadoop集群并测试
参考2.5~2.7步骤。
4. 最后的几点说明
4.1 目前的项目无法做到在已有的Hadoop集群中增加新节点
4.2 对于HBase,Hive等,可以在此镜像基础上进行构建新的镜像
4.3 如果想保存容器中的HDFS数据,那么可以使用docker volume解决
4.4 对于使用其他版本的JDK和Hadoop,需要修改Dockerfile等文件