1.0 Hadoop 入门

axing
2025-09-17 / 0 评论 / 1 阅读 / 正在检测是否收录...

mfny99d8.png
一、Hadoop是什么?有什么用?

Hadoop 是一个开源的分布式计算和存储框架,由 Apache 基金会开发和维护。

Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。

Hadoop 使用 Java 开发,所以可以在多种不同硬件平台的计算机上部署和使用。其核心部件包括分布式文件系统 (Hadoop DFS,HDFS) 和 MapReduce。
Hadoop 的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。

也就是说, Hadoop 在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS 就相当于这台计算机的硬盘,而 MapReduce 就是这台计算机的 CPU 控制器。

二、Hadoop 运行环境
2.1 为什么要用docker部署

由于 Hadoop 是为集群设计的软件,所以我们在学习它的使用时难免会遇到在多台计算机上配置 Hadoop 的情况,这对于学习者来说会制造诸多障碍,主要有两个:
- 昂贵的计算机集群。多计算机构成的集群环境需要昂贵的硬件.
- 难以部署和维护。在众多计算机上部署相同的软件环境是一个大量的工作,而且非常不灵活,难以在环境更改后重新部署。

为了解决这些问题,我们有一个非常成熟的方式 Docker。
Docker 是一个容器管理系统,它可以向虚拟机一样运行多个"虚拟机"(容器),并构成一个集群。因为虚拟机会完整的虚拟出一个计算机来,所以会消耗大量的硬件资源且效率低下,而 Docker 仅提供一个独立的、可复制的运行环境,实际上容器中所有进程依然在主机上的内核中被执行,因此它的效率几乎和主机上的进程一样(接近100%)。

2.2 Docker 部署

#进入 Docker 命令行之后,拉取一个 Linux 镜像作为 Hadoop 运行的环境,这里推荐使用 CentOS 镜像(Debian 和其它镜像暂时会出现一些问题)。
docker pull centos:8
#创建容器
Hadoop 支持在单个设备上运行,主要有两种模式:单机模式和伪集群模式。
本章讲述 Hadoop 的安装与单机模式。
#配置 Java 与 SSH 环境 现在创建一个容器,名为 java_ssh_proto,用于配置一个包含 Java 和 SSH 的环境:
docker run -d --name=java_ssh_proto --privileged centos:8 /usr/sbin/init
#然后进入容器:
docker exec -it java_ssh_proto bash
# 1) 修复 DNS(容器内临时生效;宿主可用 docker --dns 永久设定)
echo -e 'nameserver 1.1.1.1\nnameserver 8.8.8.8' > /etc/resolv.conf

# 2) 把 CentOS Linux 8 的 repo 指向 USTC 的 vault(8.5.2111 是最终版本)
sed -ri \
  -e 's|^mirrorlist=|#mirrorlist=|g' \
  -e 's|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.ustc.edu.cn/centos-vault/8.5.2111|g' \
  /etc/yum.repos.d/CentOS-Linux-*.repo

# (可选)如果想用官方 vault,把上面的 baseurl 换成:
# https://vault.centos.org/8.5.2111

# 3) 更新缓存并安装
yum clean all
yum makecache --refresh
yum install -y java-1.8.0-openjdk-devel openssh-clients openssh-server

systemctl enable sshd && systemctl start sshd

#如果是 ubuntu 系统,使用以下命令启动 SSH 服务:
#systemctl enable ssh && systemctl start ssh
#报错镜像
docker stop java_ssh_proto
docker commit java_ssh_proto java_ssh

三、Hadoop 安装
3.1 下载hadoop

Hadoop 官网地址:http://hadoop.apache.org/

Hadoop 发行版本下载:https://hadoop.apache.org/releases.html

3.2 创建 Hadoop 单机容器

#将下载好的 hadoop 压缩包拷贝到容器中的 /root 目录下:
docker cp <你存放hadoop压缩包的路径> hadoop_single:/root/
#进入容器:
docker exec -it hadoop_single bash
#进入 /root 目录:
cd /root
#这里应该存放着刚刚拷贝过来的 hadoop-x.x.x.tar.gz 文件,现在解压它:
tar -zxf hadoop-3.4.2.tar.gz
mv ./hadoop-3.4.2 /usr/local/hadoop
ln -sfn /usr/local/hadoop-3.4.2 /usr/local/hadoop


# RHEL/CentOS/Alma/Rocky
yum install -y java-11-openjdk-devel || dnf install -y java-11-openjdk-devel
# 验证
java -version
javac -version
#现在以之前保存的 java_ssh 镜像创建容器 hadoop_single:
docker run -d --name=hadoop_single --privileged java_ssh /usr/sbin/init
#重写 /etc/profile.d/hadoop.sh(去掉 which)
cat >/etc/profile.d/hadoop.sh <<'EOF'
export HADOOP_HOME=/usr/local/hadoop

# 自动探测 JAVA_HOME(优先用 javac,退而求其次用 java)
if command -v javac >/dev/null 2>&1; then
  JBIN="$(readlink -f "$(command -v javac)")"
elif command -v java >/dev/null 2>&1; then
  JBIN="$(readlink -f "$(command -v java)")"
fi

if [ -n "$JBIN" ]; then
  # 去掉末尾的 /bin/xxx,得到上两级目录作为 JAVA_HOME
  export JAVA_HOME="${JBIN%/bin/*}"
fi

export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"
EOF

# 使其生效
source /etc/profile.d/hadoop.sh

# 验证探测结果
[root@596e7bed5026 ~]# echo "$JAVA_HOME"
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64

# 让 Hadoop 继承我们环境中的 JAVA_HOME
echo 'export JAVA_HOME=${JAVA_HOME}' >> "$HADOOP_HOME/etc/hadoop/hadoop-env.sh"

#测试
[root@596e7bed5026 hadoop]# hadoop version
Hadoop 3.4.2
Source code repository https://github.com/apache/hadoop.git -r 84e8b89ee2ebe6923691205b9e171badde7a495c
Compiled by ahmarsu on 2025-08-20T10:30Z
Compiled on platform linux-x86_64
Compiled with protoc 3.23.4
From source with checksum fa94c67d4b4be021b9e9515c9b0f7b6
This command was run using /usr/local/hadoop-3.4.2/share/hadoop/common/hadoop-common-3.4.2.jar
0

评论 (0)

取消