zoukankan      html  css  js  c++  java
  • spark复习总结02

    1.spark执行原理图

     spark程序启动后创建sparkContext作为程序的入口,sparkContext可以与不同类的集群资源管理器(Cluster Manager)进行通信,从而获得程序运行所需要的资源, 获取到集群中其他工作节点(worker node)上对应的Executors,之后sparkContext将任务分发给executor进行执行。

      1) 构建Spark Application运行环境

        在Driver Program中新建SparkContext(包含SparkContext的程序称为Driver Program)

      2) SparkContext向资源管理器申请运行Executor资源,并启动Executor,Executor向SparkContext申请task

      3)SparkContext获得Executor后,Application代码会被发送到各个executor上

      4)SparkContext构建RDD DAG图,将RDD DAG图分解为Stage DAG图,将stage提交给TaskScheduler,最后TaskSecheduler将Task发送给Executor执行

      5) Task在Executor上执行,执行完毕后释放所有资源

    2.Driver的运行方式(提交的部署模式):运行在worker节点上(集群模式)和运行在客户端上(客户端模式)

      2.1 Driver运行在worker节点上

    bin/spark-submit 
    --master spark://hadoop-senior.ibeifeng.com:7077
    --deploy-mode cluster
    /opt/datas/jars/SparkApp.jar

        

        客户端提交作业给Master,Master让一个worker启动Driver,其余的worker启动Executor,Executor启动后向Driver进行注册;

        Dirver启动后会创建DAGScheduler,Executor启动后会创建TaskScheduler;

        DAGScheduler将作业分解为一到多个Stage,每个Stage根据RDD的partition个数决定了Task的个数(TaskSet),然后将生产的task set 放入到TaskScheduler中,然后TaskScheduler将Task分配的不同的Executor中执行,所有的Stage执行完成作业结束。

      2.2 Driver运行在client上(此处的client表示提交作业的那台机器)

    bin/spark-submit 
    --master spark://hadoop-senior.ibeifeng.com:7077 
    --deploy-mode client 
    /opt/datas/jars/SparkApp.jar 

        

        客户端之间启动程序,启动Driver相关工作:DAGScheduler和Master,客户端的Driver和worker向Master进行注册;

        Master让worker节点启动Executor,并向Driver进行注册;

        Driver的DAGScheduler将作业分解为相应的Stage,每个Stage包含的Task分配给TaskScheduler,TaskScheduler将task分配到不同的Executor执行,所有的Stage执行完成后作业结束。

    2.窄依赖和宽依赖

      窄依赖:每个父RDD的Partition最多被子RDD的一个Partition所使用。

      宽依赖:每个父RDD的Partition会被多个子RDD的Partition所使用。

    3.Spark四大特性

      1)快速的:在内存中进行计算以及DAG图

      2)通用的:包括批处理,流处理,图像计算等

      3)简单的:Scale,Java、Python

      4)可以运行在任何地方:hdfs,hive,hbase,yarn等

    4.RDD的五大特性

      1)A list of partition

        一系列的分片

      2)A function for computing each split

        在每一个分片上都有一个函数去迭代/执行/计算它

      3)A list of dependences on other RDDS

        一系列的依赖:RDDa转换为RDDb,RDDb转换为RDDc,那么RDDc就依赖于RDDb,RDDb依赖于RDDa

      4)Optionally,a partitioner for key-value RDDs

        对于key-value的RDD,可指定一个parttitioner(分区函数),来告诉它如何分区,默认采用的是hash分区,常有:hash,range

      5) Optionally,a list of preferred locations to compute each split on

        处理RDD split进行计算时,split数据在哪里,我们尽量在那台机器上进行计算(移动计算而不是移动数据)

    5.spark历史日志监控配置

      1)服务端配置(conf/spark-env.sh)

    SPARK_HISTORY_OPTS=-Dspark.history.fs.logDirectory=hdfs://hadoop-senior.ibeifeng.com:8020/user/beifeng/spark/eventLogs

      2 ) 客户端配置(conf/spark-defaults.conf)

    spark.eventLog.enabled           true
    spark.eventLog.dir               hdfs://hadoop-senior.ibeifeng.com:8020/user/beifeng/spark/eventLogs

      3 ) 启动历史服务器

    sbin/start-history-server.sh
  • 相关阅读:
    随笔 -- NIO -- 相关 -- 系统概述
    Java -- 新IO -- 目录
    Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用
    Dubbo -- 系统学习 笔记 -- 示例 -- 结果缓存
    Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证
    Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合
    Dubbo -- 系统学习 笔记 -- 示例 -- 多版本
    Dubbo -- 系统学习 笔记 -- 示例 -- 服务分组
    Dubbo -- 系统学习 笔记 -- 示例 -- 多注册中心
    Dubbo -- 系统学习 笔记 -- 示例 -- 多协议
  • 原文地址:https://www.cnblogs.com/lifeone/p/7126377.html
Copyright © 2011-2022 走看看