当前位置 博文首页 > Shockang的博客:SparkEnv 是什么?有什么作用?

    Shockang的博客:SparkEnv 是什么?有什么作用?

    作者:[db:作者] 时间:2021-08-24 09:55

    前言

    本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

    本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

    正文

    Spark 对任务的计算都依托于 Executor 的能カ,所有的 Executor 都有自己的 Spark 执行环境 SparkEnv 。

    有了 SparkEnv ,就可以将数据存储在存储体系中,就能利用计算引对计算任务进行处理,就可以在节点间进行通信等。

    SparkEnv 还提供了多种多样的内部组件,实现不同的功能。

    SparkEnv 是一个很重要的组件,虽然在创建 SparkContext 的时候也涉及它(只是因为 local 模式的需要),但是它与 Executor 的关系则更为紧密。

    SparkEnv 源码类注释 (3.2.0-SNAPSHOT)

    /**
     * 开发者 API(指面向开发者的低层次不稳定的 API)
     * 
     * 保存正在运行的Spark实例( master 或者 worker )的所有运行时环境对象,
     * 
     * 包括序列化器、RpcEnv、块管理器、map 输出跟踪器等。
     * 
     * 当前Spark代码通过全局变量查找SparkEnv,因此所有线程都可以访问相同的SparkEnv。
     * 
     * 可以通过 SparkEnv.get 访问它(例如,在创建SparkContext之后)。
     * 
     * @param executorId executor 的 ID
     * @param rpcEnv RPC 环境
     * @param serializer 序列化器
     * @param closureSerializer 闭包序列化器
     * @param serializerManager 序列化器管理者
     * @param mapOutputTracker map 输出的追踪器,Shuffle 时会用到
     * @param shuffleManager Shuffle 管理者
     * @param broadcastManager 广播变量管理者
     * @param blockManager 块管理者
     * @param securityManager 安全管理者
     * @param metricsSystem 度量系统
     * @param memoryManager 内存管理者
     * @param outputCommitCoordinator 输出提交协调者
     * @param conf Spark 的配置对象
     */
    @DeveloperApi
    class SparkEnv (
        val executorId: String,
        private[spark] val rpcEnv: RpcEnv,
        val serializer: Serializer,
        val closureSerializer: Serializer,
        val serializerManager: SerializerManager,
        val mapOutputTracker: MapOutputTracker,
        val shuffleManager: ShuffleManager,
        val broadcastManager: BroadcastManager,
        val blockManager: BlockManager,
        val securityManager: SecurityManager,
        val metricsSystem: MetricsSystem,
        val memoryManager: MemoryManager,
        val outputCommitCoordinator: OutputCommitCoordinator,
        val conf: SparkConf) extends Logging
    
    cs