" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 206 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Spark部署 之 YARN

PySuper
2022-04-05 / 0 评论 / 0 点赞 / 41 阅读 / 0 字
温馨提示:
本文最后更新于2024-06-12,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

基本原理

在已有 YARN 集群的前提下在单独准备 Spark StandAlone 集群,对资源的利用就不高

所以,在企业中,多数场景下,会将 Spark 运行到 YARN 集群中

  • Spark On Yarn的本质
    • 资源管理层面
      • Master 角色由 YARN 的 ResourceManager 担任
      • Worker 角色由 YARN 的 NodeManager 担任
    • 任务执行层面
      • Driver 角色运行在YARN容器内 或 提交任务的客户端进程中
      • 真正干活的 Executor 运行在YARN提供的容器内
  • Spark On Yarn 前提
    • YARN集群
    • Spark客户端工具,如spark-submit, 可以将Spark程序提交到YARN中
    • 被提交的代码程序:如spark/examples/src/main/python/pi.py,或自己开发的Spark任务

环境搭建

在spark-env.sh 以及 环境变量配置文件中即可:

  • HADOOP_CONF_DIR
  • YARN_CONF_DIR

bin/pyspark

# 启动Pyspark
bin/spark --master yarn

# 执行一行代码
sc.parallelize([1,2,3,4,5]).map(lambda x:x*10).collect()

bin/pyspark --master yarn --deploy-mode client|cluster
# --deploy-mode 选项是指定部署模式, 默认是 客户端模式
# client就是客户端模式
# cluster就是集群模式
# --deploy-mode 仅可以用在YARN模式下

注意: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式

bin/spark-shell

bin/spark-shell --master yarn --deploy-mode client|cluster

注意: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式

bin/spark-submit (PI)

bin/spark-submit --master yarn --deploy-mode client|cluster /xxx/xxx/xxx.py 参数

部署模式

Spark-On-YARN

Client 模式

Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内

Spark-On-YARN
# 客户端模式启动
bin/spark-submit \
--master yarn \
--deploy-mode client \	# Client模式
--driver-memory 512m \
--executor-memory 512m \
--num-executors 3 \
--total-executor-cores 3 \
/hadoop/software/spark/examples/src/main/python/pi.py 100

# 终端有日志输出
Spark-On-YARN
  • Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster
  • 随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存;
  • ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分
    配指定的NodeManager上启动Executor进程;
  • Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数;
  • 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。

Cluster 模式

Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中

Spark-On-YARN
# Cluster模式启动

bin/spark-submit \
--master yarn \
--deploy-mode cluster \	# Cluster模式
--driver-memory 512m \
--executor-memory 512m \
--num-executors 3 \
--total-executor-cores 3 \
/hadoop/software/spark/examples/src/main/python/pi.py 100

# 客户端上没有日志输出
Spark-On-YARN
  • 任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
  • 随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver
  • Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程
  • Executor进程启动后会向Driver反向注册
  • Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行;

二者区别

Client 模式和 Cluster 模式最最本质的区别是:Driver程序运行在哪里

  • Client 模式
    • 学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)
    • Driver 运行在 Client 上,和集群的通信成本高
    • Driver 输出结果会在客户端显示
  • Cluster 模式
    • 生产环境中使用该模式
    • Driver 程序在 YARN 集群中,和集群的通信成本低
    • Driver输出结果不能在客户端显示
    • 该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理
    • 如果出现问题,yarn会重启ApplicattionMaster(Driver)

SparkOnYarn 本质是什么?

  • Master由ResourceManager代替
  • Worker由NodeManager代替
  • Driver可以运行在容器内(Cluster模式)或客户端进程中(Client模式)
  • Executor全部运行在YARN提供的容器内

Why Spark On YARN?

  • 提高资源利用率,在已有YARN的场景下让Spark收到YARN的调度可以更好的管控
    资源提高利用率并方便管理

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区