Spark on yarn执行流程源代码分析
目前的分析主要基于spark0.9.0的cdh5的版本进行分析,
源代码下载地址:https://github.com/cloudera/spark.git
下载方式:git clone url ./spark
进入spark目录,执行git checkout cdh5-0.9.0_5.0.0
源代码编译
使用sbt编译spark
运行sbt命令需要使用http代理,不然连接不上网络,进入sbt/目录,使用vim sbt修改里面的内容,
在最下面java 命令的第二行添加 -Dhttp.proxyHost=myserver -Dhttp.proxyPort=port \
运行如下命令编译spark
SPARK_HADOOP_VERSION=2.3.0-cdh5.0.0 SPARK_YARN=true sbt/sbt assembly
SPARK_HADOOP_VERSION后是hadoop的版本号,
SPARK_HADOOP_VERSION=2.2.0 sbt/sbt assembly
In addition, if you wish to run Spark on YARN, set SPARK_YARN to true:
SPARK_HADOOP_VERSION=2.0.5-alpha SPARK_YARN=true sbt/sbt assembly
http连接代理设置:
编辑spark_home/sbt/sbt文件,在文件最后的如下脚本部分:
printf "Launching sbt from ${JAR}\n"
java \
-Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \
-jar ${JAR} \
"$@"
修改为
printf "Launching sbt from ${JAR}\n"
java \
-Dhttp.proxyHost=myserver -Dhttp.proxyPort=port \
-Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \
-jar ${JAR} \
"$@"
通过如下命令通过sbt对spark进行编译
SPARK_HADOOP_VERSION=2.3.0-cdh5.0.0 SPARK_YARN=true sbt/sbt assembly
sbt命令请参考http://www.scala-sbt.org/release/docs/Getting-Started/Running.html#common-commands
生成tar包
在spark_home的根目录下,执行如下命令,编译spark的分布式部署tar.gz包
修改make-distribution.sh文件,
在如下命令后
Make directories
rm -rf "$DISTDIR"
mkdir -p "$DISTDIR/jars"
echo "Spark $VERSION built for Hadoop $SPARK_HADOOP_VERSION" > "$DISTDIR/RELEASE"
# Copy jars
cp $FWDIR/assembly/target/scala*/*assembly*hadoop*.jar "$DISTDIR/jars/"
添加此信息,把examples添加到tar.gz包中(测试过程可以执行此操作,把示例的代码一起打包起来)。
# Make directories
mkdir -p "$DISTDIR/examples"
# Copy jars
cp $FWDIR/examples/target/scala*/*examples*assembly*.jar "$DISTDIR/examples/"
./make-distribution.sh --hadoop 2.3.0-cdh5.0.0 --with-yarn --tgz
命令执行完成后,在spark_home下会生成一个tar.gz包,spark-0.9.0-hadoop_2.3.0-cdh5.0.0-bin.tar.gz
通过Yarn运行spark示例程序
通过export命令设置yarn的conf环境变量,如果没有配置全局的yarn conf环境变量
export YARN_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop
export SPARK_JAR=<spark_home>/jars/spark-assembly-0.9.0-incubating-hadoop2.0.0-cdh4.3.0.jar
export YARN_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop
export HADOOP_CONF_DIR=/home/hadoop/test.spark.yang/hadoop-2.0.0-cdh4.3.0/etc/hadoop
SPARK_JAR=/home/hadoop/test.spark.yang/spark-0.9.0-incubating/jars/spark-assembly-0.9.0-incubating-hadoop2.0.0-cdh4.3.0.jar
./bin/spark-class org.apache.spark.deploy.yarn.Client \
--jar ./examples/spark-examples-assembly-0.9.0-incubating.jar \
--class org.apache.spark.examples.SparkTC \
--args yarn-standalone \
--num-workers 3 \
--worker-cores 1 \
--master-memory 512M \
--worker-memory 1g
通过java程序执行spark on yarn的启动
1.编写一个java应用程序,把core-site/hdfs-site/yarn-site的配置文件添加到工程中。
2.把spark的jar添加到工程中,作用于当前工程的class引用,
3.在工程中设置环境变量SPARK_JAR,来引用spark jar的位置,
4.在工程中设置环境变量SPARK_LOG4J_CONF,来引用spark log4j的位置
通过SPARK_YARN_USER_ENV配置其它用户定义的环境变量值。
通过SPARK_USE_CONC_INCR_GC配置是否使用默认的GC配置。,true/false
通过SPARK_JAVA_OPTS配置spark执行时的相关JAVA_OPTS.
通过JAVA_HOME配置java_home.
5.设置一些系统属性,共spark运行时的使用,当然这些个系统属性本身也有默认的值
a.属性名称QUEUE,默认值default。作用于am启动的队列名称,也可以在client调用进传入
b.属性名称spark.yarn.report.interval,默认值1000。app运行监控的间隔时间ms。
c.属性名称spark.yarn.submit.file.replication,默认值3。上传给yarn上运行的资源的复制份数,包括sparkjar,appjar
d.属性名称spark.yarn.max.worker.failures,默认值3或numworker传入参数的值*2取最大值。
作用于app失败的重试次数,如果重试次数超过了指定的值,表示app运行失败。
e.属性名称spark.yarn.applicationMaster.waitTries,默认值10。等待SparkContext初始化完成的等待次数,
每次的等待时,让ApplicationMaster.sparkContextRef.wait=10000ms
f.属性名称spark.yarn.scheduler.heartbeat.interval-ms,默认值5000,
通过此配置向RM设置am向其报告的时间间隔。
相关推荐
SparkSession spark = SparkSession.builder().appName("Java Spark on YARN").getOrCreate(); // 添加业务逻辑... jsc.stop(); } } ``` 编译Java项目,生成jar文件,例如`my-spark-job.jar`。然后使用`...
将Spark与Hadoop集成,首要任务是确保Spark编译时指定正确的Hadoop版本。在编译Spark 2.4.8以支持Hadoop 3.3.3时,你需要修改`pom.xml`文件中的Hadoop版本依赖,将其设置为3.3.3。执行`build/sbt -Phadoop-3.3 -...
Spark有三种运行模式:Spark on YARN、Standalone Mode和Spark on Mesos。Hive on Spark默认支持Spark on YARN,这是因为YARN作为资源管理器,可以更好地管理和调度Spark任务。在Spark on YARN模式下,又分为Cluster...
"SPARK3_ON_YARN"标签表明Spark3是在YARN上运行的,这允许Spark作业与其他Hadoop生态系统的应用共享集群资源。YARN作为Hadoop的第二代资源管理系统,负责集群中所有计算资源的管理和调度,确保高效利用硬件资源,...
参考文档包括Apache官方的Hive on Spark指南、Spark运行在YARN上的文档,以及相关技术博客,这些资源提供了更多详细的配置和使用信息。 总之,Hive on Spark的实施涉及多个步骤,包括编译、安装、配置和测试。通过...
Spark on YARN模式下,Spark作业会提交到YARN集群,由YARN负责资源分配和任务调度。这种方式允许Spark与Hadoop集群无缝集成,同时利用Hadoop的资源管理和容错机制。 在压缩包`spark-2.2.0-bin-hadoop2.6`中,通常...
当flink on yarn模式运行时,发生如下异常信息,需要将压缩包中的4个依赖jar包放入flink安装路径下的lib目录下。 Exception in thread "main" java.lang.NoClassDefFoundError: ...
- **Spark on YARN**:探讨如何在 Hadoop YARN 上部署和运行 Spark 应用程序。 #### 1.4 更多 - **Spark 配置**:提供有关如何配置 Spark 应用程序的详细信息。 - **Spark 监控**:介绍如何监控 Spark 应用程序的...
chown cloudera-scm SPARK2_ON_YARN-2.1.0.cloudera1.jar ``` ##### 3.3 上传Parcel包 - 将下载的Parcel包上传到每个节点的`/opt/cloudera/parcel-repo`目录下。 - 如果存在同名的`manifest.json`文件,需先对其...
Hadoop 2.x引入了YARN资源管理器,Spark可以作为一个YARN应用运行,充分利用Hadoop集群的计算资源。这个版本的Spark可能已经配置好与Hadoop 2.x的数据存储系统(如HDFS)的兼容性,允许Spark作业无缝地读取和写入...
Spark支持四种运行模式:本地模式(用于测试)、集群模式(如YARN、Mesos或standalone)、Spark on Kubernetes以及云服务提供商的托管Spark。 6. **编程接口**: Spark提供了Python(PySpark)、Java、Scala和R的...
- **Spark on YARN**:Spark可以在Hadoop的YARN资源管理器上运行,提供更好的集群管理和资源调度。 了解并掌握以上知识点,对于有效地使用Spark API进行大数据处理至关重要。通过深入理解Spark的工作原理和API,...
7. **Hadoop与Spark集成**:Hadoop 2.7.4编译的bin包可以用来支持Apache Spark,Spark是建立在Hadoop之上的快速数据处理引擎,支持批处理、交互式查询(如Spark SQL)和实时流处理。在Windows上搭建Spark环境时,...
下载Spark的预编译版本,配置`spark-env.sh`和`spark-defaults.conf`文件,指定Hadoop的配置路径、Spark的工作内存、主节点等参数。启动Spark的Master和Worker节点,可以通过`start-all.sh`命令完成。 在整个过程中...
2. **Python环境配置**:如果打算使用PySpark(Python on Spark),则需要确保安装了JDK 1.6.x版本。 3. **开发工具**:建议使用IntelliJ IDEA作为主要的开发工具,并且可以使用IDEA 13作为示例来进行操作。 4. **...
- 最后,启动Spark相关服务,如Spark History Server,如果需要,配置Spark on YARN。 8. **测试与优化** - 测试安装是否成功,可以上传文件到HDFS,运行Hadoop MapReduce作业,启动Hive会话,创建HBase表并插入...
每个版本都有其特定的特性、性能改进和修复的错误,因此在选择版本时,应考虑与现有系统和依赖库的兼容性。 接下来是安装步骤: 1. **下载并解压**:从 Apache Flink 官方网站下载对应版本的二进制包,例如 `flink...
1. **FLINK_ON_YARN-1.13.6.jar**:这是一个预打包的Flink on YARN的可执行JAR文件,使得用户可以直接在YARN集群上运行Flink任务,无需手动配置每个节点。 2. **CDH 集成 Flink(编译).pdf**:这很可能是详细的文档...
3. **配置Flink**:在每个节点上,配置`conf/flink-conf.yaml`,设置Flink与CDH的交互参数,如YARN的资源配置、日志路径等。 4. **启动Flink服务**:通过`flink-yarn-session.sh`或`flink-standalone.sh`命令启动...