一、环境准备
-
操作系统:建议使用 CentOS、Ubuntu 等 Linux 系统。
-
Java 环境:安装 JDK 1.8 或以上版本。
-
Hadoop 环境:安装并配置 Hadoop 集群,确保 HDFS 和 YARN 服务正常运行。
二、安装 Spark
- 下载并解压 Spark:
下载 Spark 安装包(如 `spark-3.1.2-bin-hadoop3.2.tgz`)。
解压到指定目录,例如 `/opt/installs`:
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
重命名并创建符号链接:
mv /opt/installs/spark-3.1.2-bin-hadoop3.2 /opt/installs/spark-yarn
ln -s /opt/installs/spark-yarn /opt/installs/spark
- 配置环境变量:
在 `/etc/profile` 或用户主目录下的 `.bashrc` 文件中添加:
export SPARK_HOME=/opt/installs/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
执行 `source /etc/profile` 或 `source ~/.bashrc` 使环境变量生效。
三、配置 Spark
- 修改 `spark-env.sh` 配置文件:
进入 Spark 配置目录:
cd /opt/installs/spark/conf
复制模板文件并编辑:
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
添加以下内容:
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export SPARK_DAEMON_MEMORY=1g
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:9820/spark/eventLogs -Dspark.history.fs.cleaner.enabled=true"
其中 `master` 是 NameNode 的主机名。
- 修改 `spark-defaults.conf` 文件:
复制模板文件并编辑:
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
添加以下内容:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9820/spark/eventLogs
spark.eventLog.compress true
spark.yarn.historyServer.address master:18080
spark.yarn.jars hdfs://master:9820/spark/jars/*
- 修改 `log4j.properties` 文件:
复制模板文件并编辑:
cp log4j.properties.template log4j.properties
修改日志级别为 `WARN`:
log4j.rootCategory=WARN, console
-
上传 Spark JAR 包到 HDFS:
hdfs dfs -mkdir -p /spark/jars hdfs dfs -put /opt/installs/spark/jars/* /spark/jars/
四、配置 YARN
- 修改 `yarn-site.xml` 文件:
编辑 Hadoop 的 `yarn-site.xml` 文件:
vim /opt/installs/hadoop/etc/hadoop/yarn-site.xml
添加或修改以下配置:
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
- 分发配置文件:
使用工具(如 `xsync.sh`)将修改后的 `yarn-site.xml` 文件分发到集群的其他节点。
五、启动集群
-
启动 Hadoop 集群:
start-dfs.sh start-yarn.sh
-
启动 Spark 的 History Server:
/opt/installs/spark/sbin/start-history-server.sh
六、测试集群
- 提交测试作业:
使用 Spark Shell 测试:
spark-shell --master yarn
在 Spark Shell 中运行示例代码,如计算 PI 值:
Scala
spark.sparkContext.setLogLevel("WARN")
val count = spark.sparkContext.parallelize(1 to 1000000, 10).map{i =>
val x = Math.random()
val y = Math.random()
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println(s"Pi is roughly ${4.0 * count / 1000000}")
- 查看 YARN Web UI:
访问 `http://master:8088`,查看作业运行情况。
通过以上步骤,即可成功搭建并运行 Spark on YARN 模式的集群。