Yarn 任务最大并行数量

问题

有大量资源的情况下提交的spark任务一直处于Pending状态,无法获取资源并运行。

Spark On Yarn

对spark on yarn研究比较多的朋友都应该发现过你明明给executor申请了1GB内存,结果发现该executor占用了yarn的2GB内存。对于spark的driver和executor在申请内存的时候有个计算公式:

spark.yarn.am.memoryOverhead 
除了指定的申请资源外额外申请(yarn-client模式):
AM memory * 0.10, with minimum of 384
spark.driver.memoryOverhead 
除了指定的申请资源外,额外申请:
driverMemory * 0.10, with minimum of 384
spark.executor.memoryOverhead 
除了指定的申请资源外,额外申请:
executorMemory * 0.10, with minimum of 384

由于1GB*0.10才100MB,所以会是1GB+384MB<2GB,不符合预期。实际上这个还依赖于yarn的内存调度粒度。resourcemanager的参数

最小值
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
最大值
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>20480</value>
</property>

默认yarn的调度最小单元就是1GB,所以结果就是使你原本申请1GB(+额外内存)的内存变为了2GB。

Yarn为了方便控制任务并行总数,提供了一个参数配置

配置文件:hadoop-2.7.4/etc/hadoop/capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.1</value>
<description> Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications. </description>
</property>

参数含义就是所有AM占用的总内存数要小于yarn所管理总内存的一定比例,默认是0.1。
也即是yarn所能同时运行的任务数受限于该参数和单个AM的内存。

举个例子

集群400GB内存,提交了10个任务后就不能继续提交任务了,
资源还剩余300GB,CPU也很充足,完全满足新任务的资源,为什么提交的新任务一直处于Pending状态?

400GB * 0.1 = 40GB。

配置的yarn的内存调度最小单元是4GB,虽然申请的任务AM每个都是1GB,
但是由于调度单位是4GB,所以在这里实际内存就是4GB,刚好10个任务40GB,也就不能提交第11个任务了。

所以需要将调度内存调到默认值1GB,其实一般情况下没必要调整,然后将AM总内存占比提高,比如1,即可。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink 可以在 Apache Hadoop YARN 上运行,利用 YARN 的资源管理和调度功能来管理 Flink 应用程序在集群上的执行。 要在 YARN 上运行 Flink,需要进行以下步骤: 1. 安装和配置 Hadoop:首先,需要安装和配置 Hadoop 集群。确保 Hadoop 集群正常运行,并且 YARN ResourceManager 和 NodeManager 正在运行。 2. 下载和配置 Flink:从 Flink 官方网站下载 Flink 的二进制包,并解压到你的机器上。在 `conf/flink-conf.yaml` 配置文件中设置以下参: ``` # 设置执行模式为 YARN execution.mode: yarn-session # 设置 YARN 的 Application Master 内存 yarn.application-master.memory: 1024m # 设置任务管理器的数量和内存 taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 1 # 设置 YARN 的队列名称(可选) yarn.application-master.queue: default ``` 还可以根据需要进行其他配置,例如并行度、检查点设置等。 3. 启动 Flink 集群:使用以下命令启动 Flink 集群: ``` ./bin/yarn-session.sh -n <num_taskmanagers> -tm <taskmanager_memory> ``` 其中 `<num_taskmanagers>` 是任务管理器的数量,`<taskmanager_memory>` 是每个任务管理器的内存大小。例如,`./bin/yarn-session.sh -n 2 -tm 1024m` 启动了两个任务管理器,每个任务管理器的内存大小为 1024MB。 Flink 集群会与 YARN ResourceManager 进行通信,并为应用程序分配资源。 4. 提交应用程序:一旦 Flink 集群启动,你可以使用 Flink 提供的命令行工具或 API 来提交应用程序。例如,使用 `./bin/flink run <program_jar_or_class>` 来提交一个 Java/Scala 程序。 Flink 应用程序将在集群中的任务管理器上执行,并利用由 YARN 分配的资源。 5. 监控和管理:可以使用 Flink 的 Web UI 或 Hadoop YARN 的相关工具来监控和管理正在运行的 Flink 应用程序和集群资源。 通过以上步骤,你可以在 YARN 上运行 Flink 应用程序,利用 YARN 的资源管理和调度功能来实现分布式的据处理。请注意,具体的配置和操作步骤可能会因不同的版本和环境而有所不同,建议参考 Flink 的官方文档或相关教程来进行详细的配置和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值