Yarn 模式启动Spark
准备运行环境
- 用下面的命令下载spark和hadoop包至mac电脑或虚拟机.
wget https://mirrors.estointernet.in/apache/spark/spark-3.1.1/spark-3.1.1-bin-hadoop2.7.tgz
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
- 将文件解压到opt文件夹
tar -zxvf spark-3.1.1-bin-hadoop2.7.tgz -C /opt
tar -zxvf hadoop-2.7.7.tar.gz -C /opt
- 改一下文件夹的名称,改为spark和hadoop
mv spark-3.1.1-bin-hadoop2.7 spark
mv hadoop-2.7.7 hadoop
- 已经有java,scala环境的,可以跳过下面这一步,下载完成之后我们可以用第三条语句查看jdk的位置。
apt-get update
apt-get install -y openjdk-8-jdk
apt-get install scala
$(dirname $(dirname $(realpath $(which javac))))
- 首先我们配置hadoop环境, 使用Pseudo-Distributed Operation(伪分布式)方式,具体操作可以参考下面这个链接.
- 进入 修改*/hadoop/etc/hadoop/hadoop-env.sh, 加入下面的代码。
hadoop伪分布式环境配置,注意只做Configuration,Setup passphraseless ssh,Execution 的 step 1,2.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}
- 配置yarn环境,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环境,yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<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>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认 是 true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>127.0.0.1</value>
</property>
</configuration>
- 修改spark-env.sh 文件, 加入java和yarn环境
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export YARN_CONF_DIR=/opt/hadoop/etc/hadoop
- 启动spark, hdfs, yarn服务。
# 启动spark
*/sbin/start-all.sh
# 启动hdfs
*/bin/hdfs namenode format
*/bin/start-hdfs.sh
# 启动yarn
*/bin/start-yarn.sh
- 测试一下集群模式,这是是用root用户做的,使用 sudo -s 切换root用户。
- 可以用显示结果里面的tracking URL来查看任务
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.1.1.jar \
10
# 输出结果 显示成功
21/04/13 12:27:09 INFO yarn.Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: ying-vm
ApplicationMaster RPC port: 37807
queue: default
start time: 1618316804207
final status: SUCCEEDED
tracking URL: http://ying-vm:8088/proxy/application_1618217240703_0004/
user: root
以上就是yarn模式下启动spark, 这里我没有做集群的部署,因为之前做项目的时候做了一遍。但是有一个重点需要提一下就是High Available(高可用),就是当master节点别shutdown的时候,或者故障时,需要启用其他的worker(备用master)来重新链接上服务,增加集群的可用性,这里可以用zookeeper来实现。高可用这里引用一篇知乎的文章,大家可以看一下。