1. 环境准备
- 节点规划:假设有三个节点,分别为
master
、slave1
和slave2
。master
节点同时作为 Hadoop 的 NameNode 和 ResourceManager,slave1
和slave2
作为 DataNode 和 NodeManager。 - 安装 JDK:确保所有节点都安装了 Java 8 或更高版本,并且配置好
JAVA_HOME
环境变量。
# 示例:设置 JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
- 配置 SSH 免密登录:在
master
节点上生成 SSH 密钥,并将公钥分发到所有节点,包括master
自身。
# 在 master 节点生成密钥
ssh-keygen -t rsa
# 将公钥复制到所有节点
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
2. 安装和配置 Hadoop
2.1 下载和解压 Hadoop
从 Apache 官网下载 Hadoop 3.x 版本,并解压到指定目录。
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local
cd /usr/local
ln -s hadoop-3.3.4 hadoop
2.2 配置 Hadoop 环境变量
在 /etc/profile
或 ~/.bashrc
中添加以下内容:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置生效:
source /etc/profile
2.3 配置 Hadoop 核心文件
- core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
- 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/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hdfs/datanode</value>
</property>
</configuration>
- mapred-site.xml:
xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 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>
2.4 配置从节点
在 $HADOOP_HOME/etc/hadoop/slaves
文件中添加从节点的主机名:
plaintext
slave1
slave2
2.5 格式化 NameNode
在 master
节点上执行以下命令:
bash
hdfs namenode -format
2.6 启动 Hadoop 集群
在 master
节点上启动 HDFS 和 YARN:
bash
start-dfs.sh
start-yarn.sh
3. 安装和配置 Spark
3.1 下载和解压 Spark
从 Apache 官网下载 Spark 3.x 版本,并解压到指定目录。
bash
wget https://downloads.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -zxvf spark-3.3.2-bin-hadoop3.tgz -C /usr/local
cd /usr/local
ln -s spark-3.3.2-bin-hadoop3 spark
3.2 配置 Spark 环境变量
在 /etc/profile
或 ~/.bashrc
中添加以下内容:
bash
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使配置生效:
bash
source /etc/profile
3.3 配置 Spark 核心文件
- spark-env.sh:
bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_EXECUTOR_CORES=2
export SPARK_EXECUTOR_MEMORY=2G
export SPARK_DRIVER_MEMORY=1G
- spark-defaults.conf:
plaintext
spark.master yarn
spark.submit.deployMode cluster
3.4 分发 Spark 到所有节点
将 Spark 目录复制到所有节点:
bash
scp -r /usr/local/spark slave1:/usr/local
scp -r /usr/local/spark slave2:/usr/local
4. 验证集群
在 master
节点上运行一个简单的 Spark 应用程序:
bash
spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.2.jar 10
如果应用程序成功运行并输出结果,则说明 Spark YARN 模式集群搭建成功。
5. 常见问题及解决方法
- 网络问题:确保所有节点之间可以相互 ping 通,并且防火墙已开放必要的端口。
- 权限问题:确保所有节点上的 Hadoop 和 Spark 目录具有正确的权限。
- 配置问题:检查所有配置文件是否正确,特别是
core-site.xml
、hdfs-site.xml
、yarn-site.xml
和spark-env.sh
。