序言
我自己本身是从事 Java 后端开发,与大数据关系不大,只不过出于业务考虑,来借用下 Hadoop 的 Mapreduce 进行一些非实时的千万级数据处理,前前后后花费不少时间进行踩坑,主要是一开始就是想着 Spring-hadoop ,老是基于后端开发的思想来去学习大数据,导致走了不少弯路,如果有和我处境一样的伙伴,还是建议老老实实从最基础的 Mapreduce 开始弄起。
接下来该文章主要讲讲我是如何免配置编辑进行快速搭建 Hadoop 集群的过程。
参考博客
前期准备
- 虚拟机/服务器
- Docker环境,git 环境
环境准备
- 在 虚拟机/服务器 根路径上创建文件夹 hadoop ,这个文件夹是为了用于挂载,方便我们将写好的程序挂载到容器里面运行
mkdir /hadoop
- 下载 git 项目 (主要是 Dockerfile 文件和一些配置好的配置文件)
cd /hadoop
git clone https://github.com/AlphonesEric/hadoop-cluster-docker.git
这个 git 项目是基于大神 kiwenlau 创建的 Dockerfile 进行改进,主要改进点是将 jdk 升级为 8,要不然我通过 jdk8 编写的 mapreduce 程序无法在上面运行
- 设置 docker 网桥,用于集群之间的通信 (集群里面是已经配置了对应的 hosts 的,因此只需要在同一个网桥上面即可)
docker network create --driver=bridge hadoop
这里的网桥名字要填写 hadoop,如果你想改为别的,那就修改
hadoop-cluster-docker/start-container.sh 脚本里面的 docker 启动命令,指定对应网桥名。
- 接下来就是构造 docker 镜像,由于已经有对应的 Dockerfile ,进入 hadoop-cluster-docker 文件夹 ,运行以下命令:
cd /hadoop/hadoop-cluster-docker
docker build -t jdk8-hadoop-master .
这里镜像名同理,如果你要指定自己的镜像名字,那就修改 hadoop-cluster-docker/start-container.sh 脚本里面的 docker 启动命令
docker build 命令最后还有个 “ . ” ,别忘了
如果觉得构建镜像过久,有可能是你的 docker 镜像源没有设置为国内的,参考最上面的菜鸟网站设置镜像源
启动集群
做完了环境相关的准备,接下来启动集群也是极为简单的事情,我们只需要在 hadoop-cluster-docker 文件夹里面运行以下命令即可启动集群:
./start-container.sh
命令后面可以接一个整数参数,例如 ./start-container.sh 5 代表我要启动五个 docker 容器,其中一个 master ,四个 slave ,如果不传,默认创建一个 master 和一个 slave1 容器
命令执行完后,我们会直接进入 master 容器里面,这个时候其实只是启动了容器,但是容器里面的 hadoop 还没启动,因此我们直接运行以下命令来启动 hadoop(记住是在 master 容器里执行以下命令):
./start-hadoop.sh
现在我们 master 节点的 hadoop 也已经启动了,这个时候我们要测试一下这个节点有没有启动成功,直接运行以下命令来跑一个 hadoop 的经典例子,wordcount :
./run-wordcount.sh
结果:
input file1.txt:
Hello Hadoop
input file2.txt:
Hello Docker
wordcount output:
Docker 1
Hadoop 1
Hello 2
接下来如果要启动从节点的 hadoop ,建议是打开新的 ssh 客户端窗口,然后运行以下命令进入对应的从节点容器:
docker exec -it hadoop-slave1 /bin/bash
./start-hadoop.sh
hadoop-slave1最后的1代表了是第一个从节点,可以通过 docker ps -a 来查看你的其他从节点名字
启动完从节点后,我们可以通过进入主节点的管理页面进行查看,在浏览器输入:
你的虚拟机/服务器ip:50070/dfshealth.html#tab-datanode
看到以下界面说明子节点启动成功
至此,hadoop集群环境的搭建就告一段落了,如果有问题,建议在下方评论提出。