Apache Spark:核心数量与执行器数量

2024-01-07

我试图了解在 YARN 上运行 Spark 作业时核心数量和执行器数量的关系。

测试环境如下:

  • 数据节点数量:3
  • Data node machine spec:
    • CPU:Core i7-4790(核心数:4,线程数:8)
    • 内存:32GB(8GB x 4)
    • 硬盘:8TB(2TB x 4)
  • 网络:1Gb

  • 火花版本:1.0.0

  • Hadoop 版本:2.4.0(Hortonworks HDP 2.1)

  • Spark作业流程:sc.textFile ->filter ->map ->filter ->mapToPair ->reduceByKey ->map ->saveAsTextFile

  • 输入数据

    • 类型:单个文本文件
    • 大小:165GB
    • 行数:454,568,833
  • Output

    • 第二次过滤后的行数:310,640,717
    • 结果文件行数:99,848,268
    • 结果文件大小:41GB

该作业使用以下配置运行:

  1. --master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3(每个数据节点的执行器,使用与核心一样多的数量)

  2. --master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3(减少的核心数量)

  3. --master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12(更少的核心,更多的执行者)

经过时间:

  1. 50分15秒

  2. 55分48秒

  3. 31分23秒

令我惊讶的是,(3)要快得多。
我认为(1)会更快,因为洗牌时执行器之间的通信会更少。
尽管 (1) 的核心数少于 (3),但核心数并不是关键因素,因为 2) 确实表现良好。

(以下内容是在 pwilmot 回答后添加的。)

作为信息,性能监视器屏幕截图如下:

  • Ganglia 数据节点摘要 (1) - 作业于 04:37 开始。
  • Ganglia 数据节点摘要 (3) - 作业于 19:47 开始。请忽略该时间之前的图表。

该图大致分为 2 个部分:

  • 第一:从start到reduceByKey:CPU密集型,无网络活动
  • 第二:reduceByKey之后:CPU降低,网络I/O完成。

如图所示,(1) 可以使用给定的 CPU 能力。所以,这可能不是线程数量的问题。

如何解释这个结果呢?


为了让这一切变得更加具体,这里有一个配置 Spark 应用程序以使用尽可能多的集群的工作示例 可能:想象一个集群六个节点运行 NodeManagers,每个 配备有16 核和 64GB 内存。 NodeManager 的容量, yarn.nodemanager.resource.memory-mb 和 yarn.nodemanager.resource.cpu-vcores,可能应该设置为 63 * 1024 = 64512(兆字节)和 15。我们避免分配 100% 的资源到 YARN 容器,因为节点需要一些 运行操作系统和 Hadoop 守护进程的资源。在这种情况下,我们留下一个 千兆字节和这些系统进程的核心。 Cloudera Manager 提供帮助 通过考虑这些并配置这些 YARN 属性 自动地。

第一个冲动可能是使用--执行器数量 6 --执行器核心 15 --执行器内存 63G。然而,这是错误的方法,因为:

63GB + 执行器内存开销不适合 63GB 容量 NodeManager 的。应用主控会占用一个核心 节点数,这意味着将没有空间容纳 15 核执行器 在该节点上。每个执行器 15 个核心可能会导致 HDFS I/O 不良 吞吐量。

更好的选择是使用--执行者数量 17 --执行器核心 5 --执行器内存 19G. Why?

此配置会导致除第一个执行程序外的所有节点上都有三个执行程序 AM 将有两名执行者。 --executor-memory 的计算公式为(每个节点 63/3 个执行程序)= 21. 21 * 0.07 = 1.47。 21 – 1.47 ~ 19。

Cloudera 博客的一篇文章中给出了解释,操作方法:调整您的 Apache Spark 作业(第 2 部分) https://blog.cloudera.com/how-to-tune-your-apache-spark-jobs-part-2/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Spark:核心数量与执行器数量 的相关文章

随机推荐

  • Python 3 中列表内的列表分组

    我有一个字符串列表列表 如下所示 List1 John Doe 1 2 3 Henry Doe 4 5 6 我想变成这样的东西 List1 John Doe 1 2 3 Henry Doe 4 5 6 但我似乎很难这样做 List1 Joh
  • 为什么通用 ICollection 不在 .NET 4.5 中实现 IReadOnlyCollection?

    在 NET 4 5 C 5 中 IReadOnlyCollection
  • UISwipeGestureRecognizer 滑动长度

    知道是否有办法获取滑动手势或触摸的长度 以便我可以计算距离 不可能通过滑动手势获得距离 因为当手势结束时 SwipeGesture 会触发您可以准确访问该位置一次的方法 也许您想使用 UIPanGestureRecognizer 如果您可以
  • 如何从 Azure 数据工厂运行 PowerShell

    I have PowerShell该脚本将复杂的 CSV 文件分割为每 1000 条记录的较小的 CSV 文件 这是代码 i 0 Get Content C Users dell Desktop Powershell Input bigsi
  • SignTool 错误:访问被拒绝

    我正在尝试使用 pfx 文件签署外部 dllSignTool在cmd exe中使用以下代码 SignTool 签名 f MyCert pfx p MyPassword MyControl dll 但是 我不断收到以下错误消息 Done Ad
  • 如何过滤列表

    我正在编写一个简单的函数 从列表中取出任何奇数并返回仅包含偶数的列表 def purify numbers for i in numbers if i 2 0 numbers remove i return numbers print pu
  • 无法从其他应用程序读取 SharedPreferences

    EDITED 我有一个应用程序可以像这样写入 SharedPreferences Context otherAppsContext null try otherAppsContext createPackageContext AfroKey
  • 如何获取 jPlayer 中歌曲当前播放的时间? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用 jPlayer 控件来播放音
  • 在notifyAppWidgetViewDataChanged之后没有调用RemoteViewService中的onDataSetChanged()

    在我的 AppWidgetProvider 类中 我有以下代码onUpdate method Update each of the widgets with the remote adapter for int appWidgetId ap
  • 完美转发、可变参数模板、initializer_list - 一起

    gcc 4 8 1 和 clang 3 3 c 11 功能完整 我需要在某些构造 make shared c 14 make unique 等元素的函数中转发参数 但我对类型推导 转发初始值设定项列表 数组有问题 我需要的工作示例foo f
  • 了解托管 bean/支持 bean [重复]

    这个问题在这里已经有答案了 我正在学习 Java EE 6 我正在尝试掌握它的整体形象 我正在阅读有关 JSF 以及如何添加组件的内容 我正在将组件中的值设置 读取到具有 ManagedBean 注释的 bean 我在正确理解它时遇到一些困
  • 单个变量的线程安全

    我了解线程安全的概念 我正在寻找在尝试保护单个变量时简化线程安全的建议 假设我有一个变量 double aPass 我想保护这个变量 所以我创建了一个互斥体 pthread mutex t aPass lock 现在我可以想到两种好方法 但
  • 导入打字稿时如何在路径中使用变量

    是否可以将变量 或常量 放入路径中 而不是将整个路径写为字符串文字 看起来 Angular 除了字符串文字之外不接受任何内容 import aClass require simpleClass import aComponent from
  • 将 pandas 数据框转换为 pandas 系列

    我需要一些有关数据类型问题的帮助 我正在尝试转换 pandas 数据框 如下所示 timestamp number 2018 01 01 1 2018 02 01 0 2018 03 01 5 2018 04 01 0 2018 05 01
  • 从 NSURLConnection 的响应头中读取数据

    如何从服务器响应中发送的标头中读取数据 我正在使用 NSURLConnection 发送请求 如果 URL 是 HTTP URL 则NSURLResponse您在连接的委托中收到的 connection didReceiveResponse
  • xampp mysql 和 phpmyadmin 不起作用

    昨天我使用 xampp 并使用 apache 和 mysql 服务 今天想启动mysql服务 没成功 我尝试在论坛上搜索解决方案 但找不到任何内容 所以我问你 在 mysql 停止工作后 我在日志文件中找到此消息 2015 10 29 12
  • ASP.NET MVC 将数据从视图传递到控制器

    我有一个带有网格的视图 其中包含添加到工作站的项目 用户可以从下拉列表中选择一个项目 然后单击一个操作链接 该链接调用控制器将该项目添加到工作站 我可以通过读取控制器的 Post 操作中的 FormCollection 对象来使其工作 p
  • 如何在 AWS 负载均衡器响应中禁用 Apache HTTP 标头信息?

    我在 Apache 服务器上使用 AWS Elastic Beanstalk 部署了一个 node js 环境 我对环境运行了 PCI 扫描 但出现了 2 次失败 Apache ServerTokens 信息披露 Web服务器HTTP头信息
  • 从逗号分隔字段中选择

    说我有一个subscribers表 每个用户都有一行 如下所示 id name subscribers 1 user1 user2 user3 user4 2 user2 user4 user5 user3 3 user3 user1 us
  • Apache Spark:核心数量与执行器数量

    我试图了解在 YARN 上运行 Spark 作业时核心数量和执行器数量的关系 测试环境如下 数据节点数量 3 Data node machine spec CPU Core i7 4790 核心数 4 线程数 8 内存 32GB 8GB x