环境准备

1. 系统要求

当前环境和版本:

ubuntu24

hadoop-3.2.4

2. 安装必要的软件包:jdk和系统依赖

jdk可以从oracle官网下载,也可以使用linux安装openjdk,

官网地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html

使用linux:

Ubuntu/Debian:

sudo apt update
sudo apt install ssh pdsh openjdk-8-jdk -y

CentOS/RHEL:

sudo yum update
sudo yum install ssh pdsh java-1.8.0-openjdk-devel -y

安装步骤

1. 创建Hadoop用户(非必须)

sudo useradd -m hadoop  # 添加hadoop账户
sudo passwd hadoop
sudo usermod -aG sudo hadoop   # 将用户 hadoop 添加到 sudo 组中,使其拥有管理员权限
su - hadoop

2. 配置SSH免密登录

Hadoop通过SSH来启动和停止集群中的各个守护进程,所以必须配置ssh免密登录,如果ssh登录需要鉴权,则会导致hadoop启动失败。

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 测试SSH连接shell: 如果不需要输入密码则配置成功
ssh localhost

3. 下载并安装Hadoop

cd ~/apps/bigdata
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/core/hadoop-3.2.4/hadoop-3.2.4.tar.gz
tar -xzf hadoop-3.2.4.tar.gz

4. 配置环境变量

编辑 ~/.bashrc 文件:

export HADOOP_HOME=/home/phoenix/apps/bigdata/hadoop-3.2.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/home/phoenix/apps/jdk1.8.0_202
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

使环境变量生效:

source ~/.bashrc

5. 配置Hadoop

配置 core-site.xml

这一步配置hdfs服务的通信地址和hadoop临时文件保存目录。

编辑 $HADOOP_HOME/etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/phoenix/apps/bigdata/hadoop_data/hadoop_tmp</value>
    </property>

  <!-- hive:用户代理配置 -->
      <property>
          <name>hadoop.proxyuser.hive.hosts</name>
          <value>*</value>
      </property>
      <property>
          <name>hadoop.proxyuser.hive.groups</name>
          <value>*</value>
  </property>
  
  	<!-- hive:或者针对特定用户 phoenix -->
    <property>
      <name>hadoop.proxyuser.phoenix.hosts</name>
      <value>*</value>
      <description>
        Allow phoenix user to impersonate from any host
      </description>
    </property>
    
    <property>
      <name>hadoop.proxyuser.phoenix.groups</name>
      <value>*</value>
      <description>
        Allow phoenix user to impersonate any group
      </description>
    </property>
  
</configuration>

配置 hdfs-site.xml

这一步配置hdfs的副本数和namenode和datanode节点的数据保存目录。

编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/phoenix/apps/bigdata/hadoop_data/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/phoenix/apps/bigdata/hadoop_data/datanode</value>
    </property>
</configuration>

配置 mapred-site.xml

配置mapreduce任务的执行引擎为yarn。

编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml

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

配置 yarn-site.xml

编辑 $HADOOP_HOME/etc/hadoop/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>

配置 hadoop-env.sh

配置一下环境变量:jdk和hadoop

编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/home/phoenix/apps/jdk1.8.0_202
export HADOOP_HOME=/home/phoenix/apps/bigdata/hadoop-3.2.4
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

6. 创建必要的目录

mkdir -p /home/phoenix/apps/bigdata/hadoop_data/hadoop_tmp
mkdir -p /home/phoenix/apps/bigdata/hadoop_data/namenode
mkdir -p /home/phoenix/apps/bigdata/hadoop_data/datanode

7. 格式化HDFS

hdfs namenode -format

8. 启动Hadoop服务

# 启动HDFS
start-dfs.sh

# 启动YARN
start-yarn.sh

9. 验证安装

# 检查Java进程
jps

# 应该看到类似以下进程:
# NameNode
# DataNode
# ResourceManager
# NodeManager
# SecondaryNameNode

# 访问Web界面

# HDFS: http://localhost:9870

# YARN: http://localhost:8088

测试Hadoop

1. 创建HDFS目录

bash

hdfs dfs -mkdir /input
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hadoop

2. 上传测试文件

bash

# 创建本地测试文件
echo "Hello Hadoop" > test.txt
echo "This is a test" >> test.txt

# 上传到HDFS
hdfs dfs -put test.txt /input/

3. 运行MapReduce示例

bash

# 运行wordcount示例
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount /input/test.txt /output

# 查看结果
hdfs dfs -cat /output/*

管理命令

启动服务

start-dfs.sh
start-yarn.sh

停止服务

stop-yarn.sh
stop-dfs.sh

单独启动/停止服务

# HDFS服务
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode

# YARN服务
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager

自启动配置:

cd /etc/systemd/system

vim hadoop.service

[Unit]
Description=start hadoop
After=networkd-dispatcher.service
  
[Service]
ExecStart=sudo su phoenix -c "/home/phoenix/apps/bigdata/hadoop-3.2.4/sbin/stop-all.sh && /home/phoenix/apps/bigdata/hadoop-3.2.4/sbin/start-all.sh && /home/phoenix/apps/bigdata/hadoop-3.2.4/sbin/mr-jobhistory-daemon.sh start historyserver"
SuccessExitStatus=143
  
[Install]
WantedBy=multi-user.target
# 开机自启动
sudo systemctl enable hadoop.service

#启动服务
systemctl start hadoop.service

故障排除

常见问题

  1. Java版本问题

    • 确保使用Java 8或11

    • 检查JAVA_HOME环境变量

  2. 权限问题

    • 确保hadoop用户有读写权限

    • 检查目录权限

  3. 端口冲突

    • 检查9870、8088等端口是否被占用

  4. SSH连接问题

    • 确保可以免密登录localhost

    • 检查.ssh目录权限

日志文件位置

# HDFS日志
$HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log
$HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log

# YARN日志
$HADOOP_HOME/logs/yarn-hadoop-resourcemanager-*.log
$HADOOP_HOME/logs/yarn-hadoop-nodemanager-*.log

这样就完成了Hadoop 3.2.4的伪分布式安装。你可以通过Web界面和命令行工具来管理和使用Hadoop集群。