问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

超详细!在Docker中安装Hadoop并部署单点集群

创作时间:
作者:
@小白创作中心

超详细!在Docker中安装Hadoop并部署单点集群

引用
CSDN
1.
https://blog.csdn.net/ffhhsxvhh/article/details/144215118

本文将详细介绍如何在Docker中安装Hadoop并部署单点集群。通过本文,你将学习到环境准备、配置本地JDK8、拉取JDK8镜像、创建工作目录、编写Dockerfile、编写Hadoop配置文件、构建Docker镜像、运行Docker容器以及验证Hadoop部署等多个步骤。

环境准备

确保已经安装好Docker,并且更新到最新版本。

配置本地JDK8

  1. 到官网下载对应系统版本的JDK8:

    Java Archive Downloads - Java SE 8u211 and later

    https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

  2. 安装完成后,配置环境变量:

    # 进入 JDK 安装目录
    cd /Library/Java/JavaVirtualMachines
    
    # 查看文件
    ls
    ➜  jdk-1.8.jdk	jdk-11.jdk
    
    # 查看路径
    pwd
    ➜  /Library/Java/JavaVirtualMachines
    
  3. 配置环境变量文件:

    # 进入当前用户的 home 目录
    cd /Users/xxx    # 将xxx替换为自己的电脑用户名称
    
    # 打开环境变量配置文件
    vi ~/.bash_profile
    # 注意这里用touch命令第一次配置环境变量会报错:.bash_profile does not exist.,意思需要创建文件 直接vi、vim都行。
    
  4. 将下述配置信息粘贴到文件中,注意将JAVA_HOME替换为自己目录:

    # JDK Config
    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
    CLASS_PATH="$JAVA_HOME/lib"
    PATH="$PATH:$JAVA_HOME/bin"
    
  5. 保存并退出编辑,使配置生效:

    # 配置文件立即生效
    source ~/.bash_profile
    
    # 验证:查看 JAVA_HOME 目录
    echo $JAVA_HOME
    
    # 查看 JDK 版本信息
    java -version
    

Docker中拉取jdk8镜像

docker pull openjdk:8-jdk

创建工作目录

在本地创建一个目录,用于存放Dockerfile和配置文件:

mkdir hadoop-docker
cd hadoop-docker

编写 Dockerfile

在hadoop-docker目录下创建Dockerfile文件:

touch Dockerfile

编辑Dockerfile,内容如下:

# 使用 OpenJDK 8 作为基础镜像
FROM openjdk:8-jdk
# 设置正确的 JAVA_HOME 路径
ENV JAVA_HOME=/usr/local/openjdk-8
ENV PATH=$JAVA_HOME/bin:$PATH
# 设置 Hadoop 版本和相关环境变量
ENV HADOOP_VERSION=3.3.6
ENV HADOOP_HOME=/usr/local/hadoop
ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 安装必要工具
RUN apt-get update && apt-get install -y \
    wget \
    ssh \
    rsync \
    vim && \
    apt-get clean
# 下载并解压 Hadoop
RUN wget https://downloads.apache.org/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz && \
    tar -xzf hadoop-${HADOOP_VERSION}.tar.gz && \
    mv hadoop-${HADOOP_VERSION} ${HADOOP_HOME} && \
    rm hadoop-${HADOOP_VERSION}.tar.gz
# 配置 SSH(Hadoop 集群通信需要 SSH)
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && \
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \
    chmod 600 ~/.ssh/authorized_keys
# 复制 Hadoop 配置文件到镜像
COPY core-site.xml ${HADOOP_HOME}/etc/hadoop/core-site.xml
COPY hdfs-site.xml ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
COPY yarn-site.xml ${HADOOP_HOME}/etc/hadoop/yarn-site.xml
COPY mapred-site.xml ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
# 暴露 Hadoop 服务端口
EXPOSE 50070 8088 9000
# 启动 SSH 服务并保持容器运行
CMD ["bash", "-c", "service ssh start && bash"]

编写 Hadoop 配置文件

在当前目录下创建以下配置文件:

core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

构建 Docker 镜像

在hadoop-docker目录下,运行以下命令构建镜像:

docker build -t hadoop-single-node .

运行 Docker 容器

创建并启动容器:

docker run -it --name hadoop-container -p 50070:50070 -p 8088:8088 -p 9000:9000 hadoop-single-node

进入容器后,按照以下步骤启动 Hadoop 服务:

  1. 格式化 HDFS:

    hdfs namenode -format
    

    如果遇到找不到JAVA_HOME的错误,需要运行JDK8镜像容器,查找java路径:

    which java
    

    然后到Dockerfile文件中去修改JAVA_HOME。重新构建镜像:

    docker rm hadoop-container
    docker build -t hadoop-single-node .
    

    后续只需要启动就行,不用重新重建:

    docker start -ai hadoop-container
    
  2. 启动 HDFS:

    start-dfs.sh
    

    如果遇到权限问题,需要创建一个新的用户(如hadoop):

    adduser hadoop
    

    切换到hadoop用户并配置环境变量:

    echo 'export JAVA_HOME=/usr/local/openjdk-8' >> ~/.bashrc
    echo 'export HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc
    echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
    source ~/.bashrc
    

    配置 SSH 无密码访问:

    ssh-keygen -t rsa -P ""
    ls ~/.ssh/
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    ssh localhost
    

    配置 Hadoop 环境:

    echo 'export JAVA_HOME=/usr/local/openjdk-8' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
    echo 'export HADOOP_HOME=/usr/local/hadoop' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
    echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
    source ~/.bashrc
    

    给hadoop用户配置读取/usr/local/hadoop/logs的权限:

    chown -R hadoop:hadoop /usr/local/hadoop/logs
    chmod -R 755 /usr/local/hadoop/logs
    

    重新启动hdfs,如果没有namenode,重新格式化hdfs。

  3. 启动 YARN:

    start-yarn.sh
    

验证 Hadoop 部署

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号