在中国大陆,Debian 系统上部署 Hadoop 通常推荐采用 “手动安装 + 伪分布式模式” 作为入门,或者 “手动安装 + 完全分布式模式” 用于生产环境。由于 Hadoop 官方主要提供基于 Linux 的二进制包,且 Debian 的软件源中 Hadoop 版本往往较旧,因此手动下载官方二进制包是最稳妥、最通用的方式。
以下是基于 Debian 11/12 部署 Hadoop 3.x 的详细步骤(以伪分布式为例,这是学习和开发最常用的模式)。
Hadoop 3.x 需要 Java 8 或 Java 11。在 Debian 上推荐使用 OpenJDK。
sudo apt update
sudo apt install openjdk-11-jdk -y
验证安装:
java -version
记下 JAVA_HOME 路径,通常是 /usr/lib/jvm/java-11-openjdk-amd64,后续配置需要。
为了安全,不要使用 root 运行 Hadoop。创建一个 hadoop 用户。
sudo adduser hadoop
sudo usermod -aG sudo hadoop # 赋予sudo权限(可选)
su - hadoop # 切换到该用户
Hadoop 需要通过 SSH 管理节点,即使是单机伪分布式也需要。
sudo apt install ssh -y
生成密钥并授权给自己:
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
测试是否免密成功(第一次可能需要输入 yes):
ssh localhost
如果不需要输入密码直接登录,说明成功。退出 SSH 回到原终端。
前往 Apache Hadoop 官方归档 或 清华 TUNA 镜像 下载稳定版(例如 3.3.6)。
cd /home/hadoop
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -zxvf hadoop-3.3.6.tar.gz
sudo mv hadoop-3.3.6 /usr/local/hadoop
sudo chown -R hadoop:hadoop /usr/local/hadoop
编辑 ~/.bashrc 文件:
nano ~/.bashrc
在文件末尾添加以下内容(请根据实际路径调整):
# Hadoop Environment Variables
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
使配置生效:
source ~/.bashrc
验证 Hadoop 版本:
hadoop version
进入配置目录:
cd $HADOOP_HOME/etc/hadoop
你需要修改以下 4 个核心文件:
hadoop-env.sh设置 Java 环境变量(虽然 bashrc 里有,但 Hadoop 脚本有时需要显式指定)。
nano hadoop-env.sh
找到并修改(取消注释并修改):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
core-site.xml配置默认文件系统和临时目录。
nano core-site.xml
在 <configuration> 标签内添加:
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!-- 指定 Hadoop 运行时临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_tmp</value>
</property>
</configuration>
注意:确保 /home/hadoop/hadoop_tmp 目录存在,或者手动创建 mkdir -p /home/hadoop/hadoop_tmp。
hdfs-site.xml配置 HDFS 副本数(伪分布式设为 1)。
nano hdfs-site.xml
<configuration>
<!-- 副本数量,伪分布式设为1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml (可选,用于 YARN)配置 MapReduce 使用 YARN 框架。
nano mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
yarn-site.xml配置 YARN 资源管理器。
nano yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
注意:这是第一次运行前必须做的,且只能做一次(除非你想清空所有数据)。
hdfs namenode -format
start-dfs.sh
start-yarn.sh
使用 jps 命令查看是否所有守护进程都启动了:
jps
你应该看到类似以下进程(名称可能略有不同):
在 Debian 本机上打开浏览器,或通过端口转发访问:
http://localhost:9870http://localhost:8088创建一个 HDFS 目录并上传文件测试:
# 创建用户目录
hdfs dfs -mkdir -p /user/hadoop
# 创建一个本地测试文件
echo "Hello Hadoop" > test.txt
# 上传到 HDFS
hdfs dfs -put test.txt /user/hadoop/
# 查看文件
hdfs dfs -ls /user/hadoop/
运行 Hadoop 自带的 WordCount 示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /user/hadoop/test.txt /user/hadoop/output
# 查看结果
hdfs dfs -cat /user/hadoop/output/part-r-00000
JAVA_HOME 找不到:
确保 hadoop-env.sh 和 ~/.bashrc 中的路径完全一致,且路径真实存在。/usr/local/hadoop 和临时目录的所有者是 hadoop 用户,而不是 root。sudo ufw disable 仅用于测试)。如果你需要在多台 Debian 机器上部署:
/etc/hosts 绑定所有节点的 IP 和主机名。workers 文件(旧版叫 slaves),填入所有 DataNode 的主机名。core-site.xml 中的 localhost 改为 NameNode 的主机名。