spark2.1.0之配置与源码分析

Posted 加米谷学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark2.1.0之配置与源码分析相关的知识,希望对你有一定的参考价值。



      Spark作为一款优秀的计算框架,也配备了各种各样的系统配置参数(例如:spark.master,spark.app.name,spark.driver.memory,spark.executor.memory等)。


      Spark的配置通过以下三种方式获取:

1、来源于系统参数(即使用System.getProperties)中以spark作为前缀的那部分属性;


2、使用SparkConf的API进行设置;

3、从其它SparkConf中克隆。


下面将具体说明这三种方式的实现。



系统属性中的配置


      在SparkConf中有一个Boolean类型的构造器属性loadDefaults,当loadDefaults为true时将会从系统属性中加载Spark配置,代码如下:

spark2.1.0之配置与源码分析

      

      以上代码调用了Utils工具类[2] 的getSystemProperties方法,其作用为获取系统的键值对属性。loadFromSystemProperties方法在获取了系统属性后,使用Scala守卫过滤出其中以“spark.”字符串为前缀的key和value并且调用set方法最终设置到settings中。


代码清单3-1 SparkConf中set方法的实现

spark2.1.0之配置与源码分析



使用SparkConf配置的API


      给SparkConf添加配置的一种常见方式是使用SparkConf中提供的API。其中有些API最终实际调用了set的重载方法。


代码清单3-2 SparkConf中重载的set方法

spark2.1.0之配置与源码分析

 

      可以看到代码清单3-2中的set方法实际也是调用了代码清单3-1中的set方法。

SparkConf中的setMaster、setAppName、setJars、setExecutorEnv、setSparkHome、setAll等方法最终都是通过代码清单3-2中的set方法完成Spark配置的,本书以其中最为常用的setMaster和setAppName为例,用代码清单3-3和代码清单3-4来展示他们的实现。


代码清单3-3 设置Spark的部署模式的配置方法setMaster

spark2.1.0之配置与源码分析

 

代码清单3-4 设置Spark的应用名称的配置方法setAppName

spark2.1.0之配置与源码分析



克隆SparkConf配置


      有些情况下,同一个SparkConf实例中的配置信息需要被Spark中的多个组件共用,例如:组件A中存在一个SparkConf实例a,组件B中也很需要实例a中的配置信息,这时该如何处理?


      我们往往首先想到的方法是将SparkConf实例定义为全局变量或者通过参数传递给其它组件,但是这会引入并发问题。虽然settings是线程安全的ConcurrentHashMap类,而且ConcurrentHashMap也被证明是高并发下性能表现不错的数据结构,但是只要存在并发就一定会有性能的损失问题。


      我们可以新建一个SparkConf实例b,并将a中的配置信息全部拷贝到b中,这种方式显然不是最优雅的,复制代码会散落在程序的各个角落。现在是时候阅读下SparkConf的构造器了,代码如下所示:

 

spark2.1.0之配置与源码分析

 

      SparkConf继承了Cloneable特质并实现了clone方法,clone方法(见代码清单3-5)的实现跟我们所讨论的方式是一样的,并且通过Cloneable特质提高了代码的可复用性。


代码清单3-5 克隆SparkConf配置 

 

      这样我们就可以在任何想要使用SparkConf的地方使用克隆方式来优雅的编程了。



成都加米谷大数据科技有限公司,一家专注于大数据人才培养的机构。由来自阿里、华为、京东、星环等国内知名企业的多位技术大牛联合创办,技术底蕴丰厚,勤奋创新,精通主流前沿大数据及人工智能相关技术。面向社会提供大数据、人工智能等前沿技术的培训业务。



成都加米谷大数据科技有限公司

个人培训 丨 企业内训

成都市高新区天府二街蜀都中心1栋705



以上是关于spark2.1.0之配置与源码分析的主要内容,如果未能解决你的问题,请参考以下文章

Spark RPC 框架源码分析运行时序

archaius源码分析之概述

Spark2.1.0编译

openfalcon源码分析之agent

Fresco源码分析之DraweeView

Spring Cloud之Eureka源码分析2