微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过简单案例SparkPi分析Spark源码执行逻辑

一.案例SparkPi代码

 1 package org.apache.spark.examples
 2 
 3 import scala.math.random
 4 import org.apache.spark.sql.SparkSession
 5 
 6 /** Computes an approximation to pi */
 7 object SparkPi {
 8   def main(args: Array[String]) {
 9     val spark = SparkSession
10       .builder
11       .appName("Spark Pi")
12       .getorCreate()
13     val slices = if (args.length > 0) args(0).toInt else 2
14     val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
15     val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>
16       val x = random * 2 - 1
17       val y = random * 2 - 1
18       if (x*x + y*y <= 1) 1 else 0
19     }.reduce(_ + _)
20     println(s"Pi is roughly ${4.0 * count / (n - 1)}")
21     spark.stop()
22   }
23 }

二.执行结果

  

 

 三.日志分析

  1.在使用提交命令./run-example SparkPi 10执行案例SparkPi时,根据警告信息可知,因为是local【本地模式】,Spark会先检查本地IP。

  

 

   2.其次,Spark会检测是否配置本地Hadoop及相关log4j等配置,配置会优先加载用户指定的Hadoop,无配置则使用自带认Hadoop.

  

   3.基本信息检查完之后,开始启动Spark任务,向服务器注册该任务,启动可视化组件acls,开启服务sparkDriver

  

 

   4.Spark开始注册任务调度器和资源管理器

  

 

   5.创建本地临时目录,根据缓存模式缓存数据

  

 

   6.SparkUI开启成功

  

 

   7.开启Spark自带的netty web服务器

  

 

   8.执行计算

  

 

   9.执行成功,关闭SparkUI、任务调度器、资源管理器

  

四.源码分析

  1.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐