一.案例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.

01-08 21:36
查看更多