超详细!在Docker中安装Hadoop并部署单点集群
超详细!在Docker中安装Hadoop并部署单点集群
本文将详细介绍如何在Docker中安装Hadoop并部署单点集群。通过本文,你将学习到环境准备、配置本地JDK8、拉取JDK8镜像、创建工作目录、编写Dockerfile、编写Hadoop配置文件、构建Docker镜像、运行Docker容器以及验证Hadoop部署等多个步骤。
环境准备
确保已经安装好Docker,并且更新到最新版本。
配置本地JDK8
到官网下载对应系统版本的JDK8:
Java Archive Downloads - Java SE 8u211 and later
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
安装完成后,配置环境变量:
# 进入 JDK 安装目录 cd /Library/Java/JavaVirtualMachines # 查看文件 ls ➜ jdk-1.8.jdk jdk-11.jdk # 查看路径 pwd ➜ /Library/Java/JavaVirtualMachines
配置环境变量文件:
# 进入当前用户的 home 目录 cd /Users/xxx # 将xxx替换为自己的电脑用户名称 # 打开环境变量配置文件 vi ~/.bash_profile # 注意这里用touch命令第一次配置环境变量会报错:.bash_profile does not exist.,意思需要创建文件 直接vi、vim都行。
将下述配置信息粘贴到文件中,注意将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"
保存并退出编辑,使配置生效:
# 配置文件立即生效 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 服务:
格式化 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
启动 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。
启动 YARN:
start-yarn.sh
验证 Hadoop 部署
访问 HDFS Web 界面:打开浏览器,访问http://localhost:50070
访问 YARN Web 界面:打开浏览器,访问http://localhost:8088
测试 Hadoop 命令:
hdfs dfs -mkdir /test hdfs dfs -ls /