docker-compose搭建Hadoop

105 阅读3分钟

一、介绍

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 ,启动容器。

image.png

docker-compose up -d

docker-compose up 将检查在docker-compose.yml 中设置的容器,下载它们并在Docker引擎中运行它们。

-d 标志将设置容器以可分离的模式运行,即在后台运行。一切完成后,你可以使用以下命令检查运行中的Hadoop容器。

docker ps

image.png

浏览器访问本机ip:9870,开打页面如下

image.png

四、测试集群

使用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 是文件将被生成的地方。

运行这个过程需要时间,然后它就会完成。 image.png

  • 为了测试这个过程是否成功,通过以下方式列出所创建的output 文件夹中的文件。
hdfs dfs -ls /user/root/output

image.png

  • 查看计算结果文件内容
hdfs dfs -cat /user/root/output/part-r-00000

image.png

这时,你已经成功地建立并测试了一个Hadoop集群。由于你的容器仍在运行,你可以通过运行来停止它们。

docker-compose down