如何在Docke上部署Hadoop集群
原文:How to set up a Hadoop cluster in Docker
— May 14,2019
作者:Yen V 软件工程师
翻译:@奥创没有电 (kvimsg@live.com)
Apache Hadoop是一个流量的大数据框架,在软件领域中大量使用。作为一个分布式系统,Hadoop在从一个节点到数千个节点的集群上运行。
如果你想测试Hadoop或者当前没有机会连接到一个大的Hadoop集群网络,你可以使用Docker部署一个Hadoop集群在你自己的电脑上。Docker是一个流行的独立软件容器平台能让你构建和传播你的应用,容器里仅包含了应用所需的环境、库和依赖。容器是便携式的,因此您可以通过运行一些简单的 Docker 命令在另一台计算机上设置完全相同的系统。借助 Docker,无需依赖当前的操作系统配置,即可轻松在任何地方构建、共享和运行应用程序。
举例,如果你有一台运行Windows的笔记本但需要部署一个只能在Linux上运行的应用,多亏了Docker,你不需要安装一个新的操作系统或安装一个虚拟机,你可以用一个Docker容器来连接所有的你所需要的库,然后在你完成你的工作后删除它。
在这个教程中,我们会使用Docker安装一个有3个节点的Hadoop集群,然后运行一个经典的Hdaoop单词技术程序来测试这个系统。
1. 安装Docker
如果你还没安装好Docker,你可以遵循Docker官方指南很容易的安装它。
检查你的Docker Engine, Machine and Compose版本,使用下面的命令
$ docker --version
$ docker-compose --version
$ docker-machine –version
如果这是你第一次运行Docker,启动你第一个Docker化的web服务器来测试下,确保事情都能正确的运转。
docker run -d -p 80:80 --name myserver nginx
由于这是第一次运行此命令,并且镜像本地没有,Docker 将从Docker Hub下载。完成所有操作后,请访问 http://localhost 查看新服务器的主页。
2. 使用Docker部署Hadoop集群
为了在Docker容器中安装Hadoop,需要一个Hadoop Docker镜像,到Big Data Europe repository获得镜像。如果你系统上有Git,运行下面的命令;如果没有,就下载zip压缩包到你的电脑上,
$ git clone git@github.com:big-data-europe/docker-hadoop.git
一但我们有了docker-hadoop
文件夹,我们要去编辑docker-compose.yml
文件以启用一些监听接口,以及更改Docker-compose拉取镜像的位置,因为我们本地已经有了镜像文件(Docker 将尝试在第一次运行时下载文件并生成镜像,但在随后的时间,我们很乐意使用磁盘上现有的映像,而不是再次从头开始重建所有内容)。打开·docker-compose.yml·文件,并将内容替换为以下内容(您也可以从this Github Gist下载或复制和粘贴):
部署Hadoop集群,用这个命令
$ docker-compose up -d
Docker-Compose 是一种功能强大的工具,用于同时启动多个容器。-d 参数用于告诉 Docker-compose 在后台运行命令,并返回命令提示符,以便您可以执行其他操作。只需上述一个命令,即可设置一个 Hadoop 群集,该群集包含 3 个从属(数据节点)、一个 HDFS 命名节点(或用于管理数据节点的主节点)、一个 YARN 资源管理器、一个历史记录服务器和一个节点管理器。
如果所需镜像本地没有Docker-Compose会尝试从Docker-Hub库拉取所需镜像,构建镜像然后启动容器。这些我完成之后,你可以用下面的命令去查看当前运行的容器。
$ docker ps
打开http://localhost:9870查看namenode系统的当前状态。
3. 测试Hadoop集群
现在咱们可以通过跑一个经典的单词计数程序来测试Hadoop集群。
执行以下命令,进入正在运行的namenode节点:
$ docker exec -it namenode bash
首先,咱们创建一些简单的输入文本文件,以将这些文件馈入 WordCount 程序:
$ mkdir input
$ echo "Hello World" >input/f1.txt
$ echo "Hello Docker" >input/f2.txt
现在在HDFS上创建输入目录
$ hadoop fs -mkdir -p input
用下面的命令,把输入文件放到HDFS上所有的datanode
$ hdfs dfs -put ./input/* input
从这个链接下载单词计数程序实例(这里我把它下载到我docker-hadoop
父目录的文件夹里)
现在我们需要去拷贝这个单词计数程序,从我们的本地机器到我们的Docker namdenode 节点。
用下面的命令找出你 namenode 容器的ID:
$ docker container ls
复制你namenode容器ID(它在第一列),然后用下面的命令开始拷贝jar文件到你的Docker Hadoop 集群:
$ docker cp ../hadoop-mapreduce-examples-2.7.1-sources.jar cb0c13085cd3:hadoop-mapreduce-examples-2.7.1-sources.jar
现在你已经可以在namenode内运行单词计数程序了:
root@namenode:/# hadoop jar hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount input output
打印出单词技术程序的结果:
root@namenode:/# hdfs dfs -cat output/part-r-00000
World 1
Docker 1
Hello 2
恭喜,你刚刚成功地在Docker上部署了一个Hadoop集群!
安全地退出集群并删除容器,用下面的命令:
$ docker-compose down
???:如果大家有部分文件?下载⏬过慢?或出现其他问题?,可以在?评论区留言?。