目录
3、创建serializerManager和closureSerializer
8、创建输出提交协调器outputCommitCoordinator
SparkEnv简述
Java程序运行需要Java运行环境,Scala程序运行需要Scala运行环境,同样Spark程序运行也需要Spark运行环境,这个运行环境就是SparkEnv。SparkEnv中保留了所有运行的spark实例(master或worker)中运行的环境对象。具体包括的内容如下图所示:

SparkEnv的代码结构不算复杂,提供了停止方法和建立、销毁、释放pysparkworker的方法。其主要核心代码,在SparkEnv伴生对象中。
SparkEnv伴生对象提供了创建Driver运行环境和Executor运行环境的方法。
创建Driver运行环境的方法如下:
private[spark] def createDriverEnv(
conf: SparkConf,
isLocal: Boolean,
listenerBus: LiveListenerBus,
numCores: Int,
mockOutputCommitCoordinator: Option[OutputCommitCoordinator] = None): SparkEnv = {
/** spark.driver.host 校验Driver对外宣称的地址 */
assert(conf.contains(DRIVER_HOST_ADDRESS),
s"${DRIVER_HOST_ADDRESS.key} is not set on the driver!")
/** spark.driver.port 校验Driver端口号 */
assert(conf.contains("spark.driver.port"), "spark.driver.port is not set on the driver!")
/**
* Driver绑定的地址:DRIVER_BIND_ADDRESS:
* 优先获取顺序依次是:spark.driver.bindAddress-》spark.driver.host-》Utils.localHostName()
* Driver对外宣称的地址:DRIVER_HOST_ADDRESS
* 优先获取顺序依次是:spark.driver.host-》Utils.localHostName()
* Dirver的端口:port:从spark.driver.port中获取
*
* */
val bindAddress = conf.get(DRIVER_BIND_ADDRESS)
val advertiseAddress = conf.get(DRIVER_HOST_ADDRESS)
val port = conf.get("spark.driver.port").toInt
/** park.io.encryption.enabled默认是fasle,当为true时,建立密钥 */
val ioEncryptionKey = if (conf.get(IO_ENCRYPTION_ENABLED)) {
Some(CryptoStreamUtils.createKey(con