**

Hadoop 集群通常由多个节点组成,其中每个节点都在处理大规模的数据存储和计算任务。为了方便搭建和实验,我们可以使用 Docker 容器化技术来搭建一个简单的 Hadoop 集群。本文将介绍如何使用 Docker 容器搭建一个基于 Hadoop 3.1.3 的分布式集群。


一、准备工作

  1. 安装 Docker:首先需要在系统上安装 Docker,确保 Docker 服务正在运行。

  2. 下载 Hadoop 镜像:我们可以选择官方的 Hadoop 镜像,或者自己构建镜像。在本示例中,我们使用的是基于 Hadoop 3.1.3 版本的自定义镜像。


二、配置 Docker 镜像与容器

1. 创建 Dockerfile

我们可以通过编写 Dockerfile 来创建一个自定义的 Hadoop 镜像,以下是一个简单的 Dockerfile 配置:

# 基础镜像选择 Ubuntu
FROM ubuntu:18.04

# 环境变量设置
ENV HADOOP_VERSION 3.1.3
ENV HADOOP_HOME /opt/hadoop
ENV HADOOP_CONF_DIR $HADOOP_HOME/etc/hadoop
ENV PATH $HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

# 安装必要的工具和库
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget ssh pdsh && \
    rm -rf /var/lib/apt/lists/*

# 下载 Hadoop 安装包
RUN wget http://apache.mirror.1-bln-1.phx.biz/3/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz && \
    tar -xzvf hadoop-$HADOOP_VERSION.tar.gz -C /opt && \
    mv /opt/hadoop-$HADOOP_VERSION $HADOOP_HOME && \
    rm -f hadoop-$HADOOP_VERSION.tar.gz

# 配置 SSH 无密码登录
RUN ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa && \
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 设置容器启动时执行的命令
CMD ["/bin/bash"]
2. 构建 Docker 镜像

在创建好 Dockerfile 后,可以通过以下命令构建自定义镜像:

docker build -t hadoop-3.1.3 .
3. 创建 Docker 网络

为了确保不同容器能够通信,我们创建一个 Docker 网络:

docker network create hadoop-cluster

三、配置 Hadoop 集群

我们需要设置 Hadoop 的相关配置文件。可以在宿主机上提前配置好 core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml,然后将这些配置文件挂载到 Docker 容器内。

1. 配置核心文件
  • core-site.xml 配置文件内容:
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://namenode:9000</value>
    </property>
</configuration>
  • hdfs-site.xml 配置文件内容:
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/hadoop/data/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/hadoop/data/data</value>
    </property>
</configuration>
  • mapred-site.xml 配置文件内容:
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • yarn-site.xml 配置文件内容:
<configuration>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>resourcemanager:8032</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
2. 配置 Hadoop 环境变量

编辑 Hadoop 配置文件 $HADOOP_CONF_DIR/hadoop-env.sh,配置 Hadoop 环境变量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
3. 初始化 HDFS 文件系统

启动容器后,需要格式化 HDFS 文件系统。这可以在主节点容器中执行:

hdfs namenode -format

四、启动 Hadoop 集群

在 Docker 中,使用 docker-compose 可以方便地启动和管理多个容器。我们需要配置 docker-compose.yml 文件来定义多个节点(如 NameNode、DataNode、ResourceManager、NodeManager)。

1. 创建 docker-compose.yml 文件
version: '3'

services:
  namenode:
    image: hadoop-3.1.3
    container_name: namenode
    networks:
      - hadoop-cluster
    ports:
      - "50070:50070"
    volumes:
      - /opt/hadoop/data:/opt/hadoop/data
    command: /bin/bash -c "start-dfs.sh && tail -f /dev/null"

  datanode:
    image: hadoop-3.1.3
    container_name: datanode
    networks:
      - hadoop-cluster
    volumes:
      - /opt/hadoop/data:/opt/hadoop/data
    command: /bin/bash -c "start-dfs.sh && tail -f /dev/null"

  resourcemanager:
    image: hadoop-3.1.3
    container_name: resourcemanager
    networks:
      - hadoop-cluster
    command: /bin/bash -c "start-yarn.sh && tail -f /dev/null"

  nodemanager:
    image: hadoop-3.1.3
    container_name: nodemanager
    networks:
      - hadoop-cluster
    command: /bin/bash -c "start-yarn.sh && tail -f /dev/null"

networks:
  hadoop-cluster:
    driver: bridge
2. 启动 Hadoop 集群

使用 docker-compose 启动 Hadoop 集群:

docker-compose up -d

该命令会启动四个容器:namenodedatanoderesourcemanagernodemanager,并将它们连接到同一个 Docker 网络中。


五、测试 Hadoop 集群

  1. 访问 NameNode Web 界面

打开浏览器,访问 NameNode 的 Web 界面:

http://localhost:50070

这里可以看到 Hadoop 集群的状态、文件系统信息以及 HDFS 的状态。

  1. 使用 HDFS 命令测试

进入 namenode 容器,执行以下 HDFS 命令测试集群是否正常:

docker exec -it namenode bash
hdfs dfs -ls /

如果能够成功列出根目录内容,表示集群已经正常运行。


六、总结

通过 Docker 容器搭建 Hadoop 集群是一个快速且高效的方式,尤其适用于开发和测试环境。本文介绍了如何通过 Docker 构建 Hadoop 3.1.3 集群,配置必要的环境变量和 Hadoop 配置文件,并使用 Docker Compose 管理多个容器。通过这种方式,你可以快速地在本地机器上搭建一个完整的 Hadoop 集群,进行大数据处理实验。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐