一、介绍
Hadoop集群共分配了5个节点,包括:namenode(管理命名空间)、datanode(提供读写请求)、nodemanager(运行程序并监控节点)、resourcemanager(全局资源监控)、historyserver(记录作业信息)节点各一个。
镜像使用了DockerHub上开源的bde2020/hadoop系列镜像,所使用的Hadoop版本为3.2.1。
二、下载docker-Hadoop仓库
在相应目录下执行克隆命令下载docker-Hadoop仓库
git clone https://github.com/big-data-europe/docker-hadoop.git
三、启动集群
导航到克隆的文件夹,然后运行以下命令,使用docker-compose
,启动容器。
docker-compose up -d
docker-compose up
将检查在docker-compose.yml
中设置的容器,下载它们并在Docker引擎中运行它们。
-d
标志将设置容器以可分离的模式运行,即在后台运行。一切完成后,你可以使用以下命令检查运行中的Hadoop容器。
docker ps
浏览器访问本机ip:9870,开打页面如下
四、测试集群
使用Docker对Hadoop进行容器化的目的是为了能够使用Hadoop分布式文件系统(HDFS)运行和测试你的作业。我们将使用一个小的数据样本来演示你如何实现这一目标。要测试MapReduce作业,请按照以下步骤进行。
- 从这里下载一个样本
jar
文件。 - 将
jar
文件复制到容器中。在这个例子中,我们将使用namenode
容器来运行一个测试作业;请随意使用任何你想要的。
docker cp hadoop-mapreduce-examples-2.7.1-sources.jar namenode:/tmp/
- 创建一个简单的文件,即一个
.txt
文件。
vim simple-text.txt
- 在文件中任意写两到三行,然后用如下命令将
.txt
文件复制到namenode容器中。
docker cp simple-text.txt namenode:/tmp/
这将使该文件被容器访问,以使用并将其上传到HDFS,并运行一个Hadoop MapReduce作业。
- 导航到容器,用下面的命令以交互式方式执行它。
docker exec -it namenode /bin/bash
- 在产生的bash终端中,我们需要创建一个
input
文件夹来存放我们的sample-text.txt
文件。要做到这一点,我们将使用hdfs
命令,如下所示。
hdfs dfs -mkdir -p /user/root/input
该文件夹用ls
不可见
- 使用
hdfs
将sample-text.txt
文件复制到创建的文件夹中,如下所示。
hdfs dfs -put simple-text.txt /user/root/input
- 使用
Hadoop jar
在我们的jar
文件上运行MapReduce作业,以测试集群。如果产生了输出,那就说明一切正常了。要做到这一点,我们将运行以下命令。
hadoop jar hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount input output
从上面看。
org.apache.hadoop.examples
是类。WordCount
是函数。input
是我们的文件所在的目录。output
是文件将被生成的地方。
运行这个过程需要时间,然后它就会完成。
- 为了测试这个过程是否成功,通过以下方式列出所创建的
output
文件夹中的文件。
hdfs dfs -ls /user/root/output
- 查看计算结果文件内容
hdfs dfs -cat /user/root/output/part-r-00000
这时,你已经成功地建立并测试了一个Hadoop集群。由于你的容器仍在运行,你可以通过运行来停止它们。
docker-compose down