You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

YARN集群部署Spark与Flink的三类技术疑问咨询

YARN集群上运行Spark与Flink的常见问题解答

问题1:部署Spark时,是否需要在ResourceManager及每个NodeManager上安装并配置Spark?

其实不用这么麻烦!Spark支持YARN客户端模式YARN集群模式,两种模式都不需要在YARN的所有节点上全量安装Spark。你只需要在提交应用的机器上(可以是ResourceManager所在节点,也可以是集群外的客户端机器)安装配置好Spark即可。

当提交应用时,Spark会把需要的核心依赖包(比如spark-assembly.jar这类胖包)上传到YARN对应的HDFS路径或者本地共享存储,NodeManager会自动下载这些依赖来启动Executor进程。不过有个小前提:所有NodeManager节点得先装好Java环境,毕竟Spark是基于Java运行的,但Spark本身真的不用每个节点都装。

问题2:向YARN提交Spark应用时,除运行YARN的ResourceManager和NodeManager外,是否还需要运行Spark集群(Master和Slaves)?

完全不需要!当你把YARN作为Spark的资源管理器时,Spark自身的Master-Slaves集群架构就彻底没用了——YARN的ResourceManager会全权接管资源调度的工作,NodeManager负责具体的容器启动和运行。

Spark的Driver程序(客户端模式下在你提交作业的本地机器,集群模式下会在YARN分配的容器里运行)会直接向ResourceManager申请资源,RM分配好容器后,NodeManager就会启动Spark Executor进程。整个过程中,你根本不需要启动Spark自己的Master和Worker(Slaves)服务,YARN已经把资源管理的活儿全包了。

问题3:是否可以配置YARN,让Flink运行在特定的NodeManager上?

必须可以!有几种灵活的方式能实现这个需求,推荐按优先级选择:

  • 节点标签(Node Labels):这是最常用也最优雅的方式。先给你指定的NodeManager节点打上专属标签(比如flink-exclusive),然后在YARN的队列配置里把特定队列和这个标签绑定。提交Flink作业时指定该队列,YARN就只会把Flink的容器调度到带有对应标签的节点上。
  • Flink提交参数直接指定:提交作业时,通过yarn.application.node-label-expression参数直接声明要使用的节点标签,比如:
    ./bin/flink run -m yarn-cluster -ynm my-flink-job -Dyarn.application.node-label-expression=flink-exclusive ./your-job.jar
    
  • 调度器节点亲和性配置:如果你用YARN的Capacity Scheduler或者Fair Scheduler,可以在调度器的配置文件里给目标队列设置节点亲和规则,绑定到特定NodeManager的IP或者主机名,不过这种方式灵活性不如节点标签。

内容的提问来源于stack exchange,提问作者Soheil Pourbafrani

火山引擎 最新活动