一、前置准备
1.1 系统要求
- 操作系统:建议使用 CentOS 7/RHEL 7 或 Ubuntu 20.04。
- Java:Hadoop 推荐 Java 8,但也支持 Java 11。
- 内存 :
- Master 节点:4 GB(建议)
- Worker 节点:2 GB(建议)
- 硬盘:每个节点至少 20 GB
1.2 下载 Hadoop
访问 Hadoop 官方下载页面 下载最新的稳定版(例如 Hadoop 3.4.1)。
或者直接使用命令下载二进制包(以 Hadoop 3.4.1 为例):
1.3 节点角色
假设你有三台机器(或虚拟机):
master
:运行 NameNode 和 ResourceManager。worker1
和worker2
:运行 DataNode 和 NodeManager。
1.4 下载 Hadoop 3.4.1
在所有节点下载并解压 Hadoop 二进制包:
bash
wget https://downloads.apache.org/hadoop/common/hadoop-3.4.1/hadoop-3.4.1.tar.gz tar -zxvf hadoop-3.4.1.tar.gz sudo mv hadoop-3.4.1 /usr/local/hadoop
1.5 注意
Hadoop 不允许以 root
用户直接操作,创建一个普通用户(如 hadoop
)并赋予权限。
二、配置集群环境
2.1 配置主机名和通信
在所有节点上编辑 /etc/hosts
文件,添加以下内容:
text
<master_IP> hadoop001
<worker1_IP> hadoop002
<worker2_IP> hadoop003
在每台机器上设置主机名:
bash
hostnamectl set-hostname hadoop001 # 在主节点
hostnamectl set-hostname hadoop002 # 在worker1节点
hostnamectl set-hostname hadoop003 # 在worker2节点
2.2 配置 SSH 免密登录
在主节点 master
上生成 SSH 密钥:
bash
ssh-keygen -t rsa -P ""
将密钥分发到所有节点(包括自己):
bash
ssh-copy-id hadoop001
ssh-copy-id hadoop002
ssh-copy-id hadoop003
验证免密登录:
bash
ssh hadoop001
ssh hadoop002
ssh hadoop003
三、配置 Hadoop
在所有节点上配置 Hadoop(/usr/local/hadoop
)。以下配置以 master 节点为主,完成后将同步到其他节点。
3.1 配置环境变量
编辑 ~/.bashrc
文件,添加以下内容:
bash
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
加载环境变量:
bash
source ~/.bashrc
[!NOTE]
找到 Java 的安装路径
运行以下命令查找 Java 的安装路径:
bashreadlink -f $(which java)
输出类似:
bash/usr/lib/jvm/java-1.8.0-openjdk/jre/bin/java
去掉
/bin/java
部分,得到 Java 的根目录。例如:
bash/usr/lib/jvm/java-1.8.0-openjdk
3.2 配置 hadoop-env.sh
编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
:
bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
3.3 配置 core-site.xml
编辑 $HADOOP_HOME/etc/hadoop/core-site.xml
:
xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
3.4 配置 hdfs-site.xml
编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml
:
xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> <!-- 数据副本数 -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop_data/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop_data/hdfs/datanode</value>
</property>
</configuration>
在所有节点上创建数据目录:
bash
mkdir -p /usr/local/hadoop_data/hdfs/namenode
mkdir -p /usr/local/hadoop_data/hdfs/datanode
3.5 配置 mapred-site.xml
复制模板文件:
bash
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml
:
xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.6 配置 yarn-site.xml
编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml
:
xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
3.7 配置 slaves
文件
编辑 $HADOOP_HOME/etc/hadoop/slaves
,指定所有 Worker 节点的主机名:
text
worker1
worker2
四、启动 Hadoop 集群
4.1 格式化 HDFS
在主节点(master
)上运行以下命令:
bash
hdfs namenode -format
4.2 启动 HDFS 和 YARN
在主节点启动集群:
启动 HDFS:
bash
start-dfs.sh
启动 YARN:
bash
start-yarn.sh
验证:
在所有节点运行:
bash
jps
- 在
master
节点应该看到:NameNode
ResourceManager
- 在
worker1
和worker2
节点应该看到:DataNode
NodeManager
五、验证 Hadoop 集群
5.1 验证 HDFS
运行以下命令验证 HDFS 是否工作:
bash
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/<your-username>
hdfs dfs -ls /
5.2 上传文件到 HDFS
bash
echo "Hello Hadoop" > hello.txt
hdfs dfs -put hello.txt /user/<your-username>
hdfs dfs -ls /user/<your-username>
5.3 访问 Web 界面
- HDFS NameNode:
http://master:9870
- YARN ResourceManager:
http://master:8088
六、停止 Hadoop 集群
停止 HDFS 和 YARN 服务:
bash
stop-dfs.sh
stop-yarn.sh
七、注意事项
-
确保所有节点时间同步 :
安装
ntp
服务,确保集群中时间一致:bashsudo yum install -y ntp sudo systemctl start ntpd sudo systemctl enable ntpd
-
检查防火墙 :
如果启用了防火墙,确保开放以下端口:
- HDFS:9000、9870
- YARN:8088
-
多节点通信 :
确保
master
和worker
节点之间能够通过主机名通信。