Spark 集群任务提交方式

Spark 集群的模式及提交任务的方式

  • 本文大致的内容图
1571831092670
  • Spark 集群的两种模式:

    • Standalone 模式

      • Standalone-client 任务提交方式

        • 提交命令

          ./spark-submit 
          --master spark://node1:7077 (主节点的位置)
          --class 类的包+类名
          jar包的位置 
          1000 # 分区参数, 也可以说是并行度
          

          ||

          ./spark-submit 
          --master spark://node1:7077 
          --deploy-mode client 
          --class 类的包+类名
          jar包的位置 
          100 # 分区参数, 也可以说是并行度
          
  - 执行原理

  
    <img src="https://images.cnblogs.com/cnblogs_com/ronnieyuan/1572760/o_1571834959295.png" width="600" hegiht="400" align=center />

  - 执行流程

    1. client 模式提交任务后, 会在客户端启动Driver进程
    2. Driver 会向 Master 申请启动 Application启动的资源
    3. 资源申请成功, Driver 端将 task 发送到 worker端执行
    4. Worker 端将 task 执行结果 返回 到 Driver 端

  - 总结

    - client模式适用于测试调试程序。
    - Driver进程是在客户端启动的。这里的客户端指的是应用程序的当前节点
    - 在Driver端可以看到task执行的情况。
    - 生产环境下不能使用client模式是因为: 假设提交100个 Application 到集群运行, Driver每次都会在client端启动, 那么就会导致客户端100次网卡流量暴增。

- Standalone-cluster 任务提交方式

  - 提交命令

    ```shell
    ./spark-submit 
    --master spark://node1:7077 
    --deploy-mode cluster
    --class 包+类名
    jar包的位置
    100 # 分区参数, 也可以说是并行度
    
    #注意:Standalone-cluster提交方式,应用程序使用的所有jar包和文件,必须保证所有的worker节点都要有,因为此种方式,spark不会自动上传包。
    # 解决方式:
    # 1.将所有的依赖包和文件打到同一个包中,然后放在hdfs上。
    # 2.将所有的依赖包和文件各放一份在worker节点上。
    ```

    

  - 执行原理


    <img src="https://images.cnblogs.com/cnblogs_com/ronnieyuan/1572760/o_1571836935184.png" width="700" hegiht="500" align=center />

  - 执行流程

    1. cluster模式提交应用程序后会先向 Master 请求启动 Driver
    2. Master 接收请求, 随机在集中的一台节点启动Driver进程
    3. Driver启动后为当前的应用程序申请资源
    4. Driver端发送task到worker节点上执行
    5. worker 将执行情况和执行结果返回 Driver

  - 总结

    - Standalone-cluster 运行方式适用于生产环境
    - 此时在driver端界面看不到执行任务情况
    - 由于driver会被随机分配到worker节点上启动, 那么不会有流量激增问题
  • On Yarn 模式

    • Yarn-client 任务提交方式

      • 提交命令

        ./spark-submit 
        --master yarn
         --class 包+类名
        jar文件位置
        100
        

        ||

        ./spark-submit 
        --master yarn–client
         --class 包+类名
        jar文件位置
        100
        

        ||

        ./spark-submit 
        --master yarn 
        --deploy-mode  client 
         --class 包+类名
        jar文件位置
        100
        
  - 执行原理


    <img src="https://images.cnblogs.com/cnblogs_com/ronnieyuan/1572760/o_1571837314206.png" width="700" hegiht="500" align=center />

  - 执行流程

    1. 客户端提交一个 Application, 在客户端启动一盒Driver 进程。
    2. 应用程序启动后会向RM(ResourceManager) 发送请求, 启动AM(ApplicationMaster)
    3. RM 收到请求,  随机选择一台 NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点
    4. AM 启动后, 会向 RS 请求一批container资源, 用于启动Executor
    5. RM会找到一批NM返回给AM, 用于启动Executor
    6. AM会向NM发送命令启动Executor
    7. Executor 启动后, 会反向注册给Driver, Driver 发送 task 到 Executor, 执行情况和结果返回给Driver端

  - 总结

    - Yarn-client模式同样适用于测试, 因为Driver运行在本地, Driver会与yarn集群中的Executor 进行大量的通信, 会造成客户机网卡流量的大量增加

    - ApplicationMaster 的作用:

      - 为当前的Application申请资源

      - 给NodeManager发送消息启动Executor

        

- Yarn-cluster 任务提交方式

  - 提交命令

    ```shell
    ./spark-submit 
    --master yarn 
    --deploy-mode cluster 
    --class 包+类名 
    jar文件位置
    100
    ```

    ||

    ```shell
    /spark-submit 
    --master yarn-cluster
    --class 包+类名
    jar文件位置
    100
    ```

    

  - 执行原理


    <img src="https://images.cnblogs.com/cnblogs_com/ronnieyuan/1572760/o_1571837356604.png" width="700" hegiht="500" align=center />

  - 执行流程

    1.  客户机提交Application应用程序, 发送请求到RM(ResourceManager), 请求启动(ApplicationMaster)
    2.  RM收到请求后随即在一台 NM(NodeManager) 上启动 AM(相当于Driver 端)
    3. AM启动后, AM 发送请求到 RM, 申请一批容器(container)来启动Executor
    4. RM 返回一批 NM 节点 给 AM
    5. AM 连接到 NM, 发送请求到 NM 启动 Executor
    6. Executor 反向注册到 AM 所在节点的 Driver,Driver再发送task到Executor

  - 总结

    - Yarn-Cluster 主要用于生产环境中, 因为 Driver运行在 Yarn 集群中某一台NodeManager中, 每次提交任务的 Driver 所在机器都是随机的, 并不会产生一台机器网卡流量激增的现象。
    - 缺点是提交任务不能看到日志, 只能通过yarn查看日志
    - ApplicationMaster的作用
      - 为当前的 Application 申请资源
      - 给NodeManger 发送消息启动 Executor
      - 任务调度
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • spark-submit的时候如何引入外部jar包 在通过spark-submit提交任务时,可以通过添加配置参数...
    博弈史密斯阅读 2,702评论 1 14
  • Scala语法 至于scala语法而言,大致上和Java的语法类似,增加了一些函数式编程,具体语法可以参考Scal...
    卡卡xx阅读 2,742评论 0 1
  • 提交的应用程序 Spark的bin目录中的Spark -submit脚本用于在集群上启动应用程序。它可以通过一个统...
    利伊奥克儿阅读 11,115评论 2 4
  • 最近公司部署mesos,在测试\的时候遇见一些问题,顺便研究了下spark任务的提交过程。将研究的结果和大家分享一...
    沈颖阅读 762评论 0 1
  • 只要胆子大,天天寒暑假 来形容闲暇而又迷茫的大三生活 再合适也不过了 看着的身边的朋友相继利用闲暇时间来做兼职 看...
    建行小伙阅读 461评论 0 4