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