本文共 10210 字,大约阅读时间需要 34 分钟。
【编者的话】Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭建多节点Hadoop集群的详细步骤。作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群。
请查看
一. 项目简介
GitHub:
直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。 我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的Hadoop on Docker项目以及其存在的问题。项目 镜像大小 问题sequenceiq/hadoop-docker:latest 1.491GB 镜像太大,只支持单个节点sequenceiq/hadoop-docker:2.7.0 1.76 GB sequenceiq/hadoop-docker:2.60 1.624GB sequenceiq/ambari:latest 1.782GB 镜像太大,使用太慢,使用复杂sequenceiq/ambari:2.0.0 4.804GB sequenceiq/ambari:latest:1.70 4.761GB alvinhenrick/hadoop-mutinode 4.331GB 镜像太大,构建太慢,增加节点麻烦,有bug我的项目参考了alvinhenrick/hadoop-mutinode项目,不过我做了大量的优化和重构。alvinhenrick/hadoop-mutinode项目的GitHub主页以及作者所写的博客地址如下:
镜像名称 构建时间 镜像层数 镜像大小alvinhenrick/serf 258.213s 21 239.4MBalvinhenrick/hadoop-base 2236.055s 58 4.328GBalvinhenrick/hadoop-dn 51.959s 74 4.331GBalvinhenrick/hadoop-nn-dn 49.548s 84 4.331GB
镜像名称 构建时间 镜像层数 镜像大小kiwenlau/serf-dnsmasq 509.46s 8 206.6 MBkiwenlau/hadoop-base 400.29s 7 775.4 MBkiwenlau/hadoop-master 5.41s 9 775.4 MBkiwenlau/hadoop-slave 2.41s 8 775.4 MB可知,我主要优化了这样几点:
二. 镜像简介
本项目一共开发了4个镜像:
sudo docker images
的运行结果: REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEindex.alauda.cn/kiwenlau/hadoop-slave 0.1.0 d63869855c03 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-master 0.1.0 7c9d32ede450 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-base 0.1.0 5571bd5de58e 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/serf-dnsmasq 0.1.0 09ed89c24ee8 17 hours ago 206.7 MBubuntu 15.04 bd94ae587483 3 weeks ago 131.3 MB易知以下几个结论:
sudo docker history index.alauda.cn/kiwenlau/hadoop-base:0.1.0
的部分运行结果 IMAGE CREATED CREATED BY SIZE2039b9b81146 44 hours ago /bin/sh -c #(nop) ADD multi:a93c971a49514e787 158.5 MBcdb620312f30 44 hours ago /bin/sh -c apt-get install -y openjdk-7-jdk 324.6 MBda7d10c790c1 44 hours ago /bin/sh -c apt-get install -y openssh-server 87.58 MBc65cb568defc 44 hours ago /bin/sh -c curl -Lso serf.zip https://dl.bint 14.46 MB3e22b3d72e33 44 hours ago /bin/sh -c apt-get update && apt-get install 60.89 MBb68f8c8d2140 3 weeks ago /bin/sh -c #(nop) ADD file:d90f7467c470bfa9a3 131.3 MB可知:
三. 3节点Hadoop集群搭建步骤
1. 拉取镜像
sudo docker pull index.alauda.cn/kiwenlau/hadoop-master:0.1.0sudo docker pull index.alauda.cn/kiwenlau/hadoop-slave:0.1.0sudo docker pull index.alauda.cn/kiwenlau/hadoop-base:0.1.0sudo docker pull index.alauda.cn/kiwenlau/serf-dnsmasq:0.1.03~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:
sudo docker pull kiwenlau/hadoop-master:0.1.0sudo docker pull kiwenlau/hadoop-slave:0.1.0sudo docker pull kiwenlau/hadoop-base:0.1.0sudo docker pull kiwenlau/serf-dnsmasq:0.1.0查看下载的镜像:
sudo docker images运行结果:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEindex.alauda.cn/kiwenlau/hadoop-slave 0.1.0 d63869855c03 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-master 0.1.0 7c9d32ede450 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-base 0.1.0 5571bd5de58e 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/serf-dnsmasq 0.1.0 09ed89c24ee8 17 hours ago 206.7 MB其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就777.4MB。2. 修改镜像tag
sudo docker tag d63869855c03 kiwenlau/hadoop-slave:0.1.0sudo docker tag 7c9d32ede450 kiwenlau/hadoop-master:0.1.0sudo docker tag 5571bd5de58e kiwenlau/hadoop-base:0.1.0sudo docker tag 09ed89c24ee8 kiwenlau/serf-dnsmasq:0.1.0查看修改tag后镜像:
sudo docker images运行结果:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEindex.alauda.cn/kiwenlau/hadoop-slave 0.1.0 d63869855c03 17 hours ago 777.4 MBkiwenlau/hadoop-slave 0.1.0 d63869855c03 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-master 0.1.0 7c9d32ede450 17 hours ago 777.4 MBkiwenlau/hadoop-master 0.1.0 7c9d32ede450 17 hours ago 777.4 MBkiwenlau/hadoop-base 0.1.0 5571bd5de58e 17 hours ago 777.4 MBindex.alauda.cn/kiwenlau/hadoop-base 0.1.0 5571bd5de58e 17 hours ago 777.4 MBkiwenlau/serf-dnsmasq 0.1.0 09ed89c24ee8 17 hours ago 206.7 MBindex.alauda.cn/kiwenlau/serf-dnsmasq 0.1.0 09ed89c24ee8 17 hours ago 206.7 MB之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub, 因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorry for this....不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag...不过Alauda镜像下载速度很快的哈~3.下载源代码
git clone https://github.com/kiwenlau/hadoop-cluster-docker为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:
git clone http://git.oschina.net/kiwenlau/hadoop-cluster-docker4. 运行容器
cd hadoop-cluster-docker./start-container.sh运行结果:
start master container...start slave1 container...start slave2 container...root@master:~#一共开启了3个容器,1个master, 2个slave。开启容器后就进入了master容器root用户的根目录(/root)。查看master的root用户家目录的文件:
ls运行结果:
hdfs run-wordcount.sh serf_log start-hadoop.sh start-ssh-serf.shstart-hadoop.sh是开启hadoop的shell脚本,run-wordcount.sh是运行wordcount的shell脚本,可以测试镜像是否正常工作。5.测试容器是否正常启动(此时已进入master容器)查看hadoop集群成员:
serf members运行结果:
master.kiwenlau.com 172.17.0.65:7946 alive slave1.kiwenlau.com 172.17.0.66:7946 alive slave2.kiwenlau.com 172.17.0.67:7946 alive若结果缺少节点,可以稍等片刻,再执行“serf members”命令。因为serf agent需要时间发现所有节点。测试ssh:
ssh slave2.kiwenlau.com运行结果:
Warning: Permanently added 'slave2.kiwenlau.com,172.17.0.67' (ECDSA) to the list of known hosts.Welcome to Ubuntu 15.04 (GNU/Linux 3.13.0-53-generic x86_64)* Documentation: https://help.ubuntu.com/The programs included with the Ubuntu system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted byapplicable law.root@slave2:~#退出slave2:
exit运行结果:
logoutConnection to slave2.kiwenlau.com closed.若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!6. 开启Hadoop
./start-hadoop.sh上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能....7. 运行wordcount
./run-wordcount.sh运行结果:
input file1.txt:Hello Hadoopinput file2.txt:Hello Dockerwordcount output:Docker 1Hadoop 1Hello 2wordcount的执行速度取决于机器性能....
四. N节点Hadoop集群搭建步骤
1. 准备工作
./resize-cluster.sh 5
./start-container.sh 5
个人公众号:程序员黄小斜
微信公众号【程序员黄小斜】新生代青年聚集地,程序员成长充电站。作者黄小斜,职业是阿里程序员,身份是斜杠青年,希望和更多的程序员交朋友,一起进步和成长!专注于分享技术、面试、职场等成长干货,这一次,我们一起出发。
关注公众号后回复“2019”领取我这两年整理的学习资料,涵盖自学编程、求职面试、算法刷题、Java技术学习、计算机基础和考研等8000G资料合集。
技术公众号:Java技术江湖
微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,专注于 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
关注公众号后回复“PDF”即可领取200+页的《Java工程师面试指南》强烈推荐,几乎涵盖所有Java工程师必知必会的知识点。
转载地址:http://zclzb.baihongyu.com/