jjzjj

hadoop - spark.dynamicAllocation 的 EMR 配置与 Spark 官方文档不匹配

coder 2024-01-06 原文

根据官方 Spark 文档 ( http://spark.apache.org/docs/latest/job-scheduling.html#configuration-and-setup ),在 YARN 中使用“spark.dynamicAllocation”选项时,您需要:

In the yarn-site.xml on each node, add spark_shuffle to yarn.nodemanager.aux-services ...

set yarn.nodemanager.aux-services.spark_shuffle.class to org.apache.spark.network.yarn.YarnShuffleService

尽管 AWS EMR 文档说,

"..Spark Shuffle Service is automatically configured by EMR. (http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-spark-configure.html)

我注意到,EMR 节点上“yarn-site”中的“yarn.nodemanager.aux-services”设置为:

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle,</value>
</property>

并且根本没有添加“yarn.nodemanager.aux-services.spark_shuffle.class”部分。

我对 Spark/Hadoop 生态系统有点陌生,所以这在我脑海中提出了几个问题:

  • 为什么我仍然能够在“spark.dynamicAllocation”设置为“true”的情况下成功运行 Spark 作业,但不满足基本配置要求?这是否意味着 Spark 可以以某种方式使用“mapreduce_shuffle”作为后备?
  • 如果上述假设(Spark 回退到“mapreduce_shuffle”)为真,使用不正确的 shuffle 类(“mapreduce_shuffle”映射到“org.apache.hadoop.mapred.ShuffleHandler”是否可能对性能(其他?)产生影响类(class))?

注意:我使用的是 emr-ami v. 4.6.0

最佳答案

yarn.nodemanager.aux-services 属性只需要在运行 YARN NodeManager 的节点上设置,在 EMR 上只有 CORE/TASK 实例而不是 MASTER 实例(除非它是单节点集群).

在 EMR 上,yarn.nodemanager.aux-services 和 yarn.nodemanager.aux-services.spark_shuffle.class 属性确实在 CORE/TASK 实例上正确设置,但不是在 MASTER 实例上,因此 AWS EMR 文档是正确的因为启用 dynamicAllocation 所需要做的就是设置 spark.dynamicAllocation.enabled=true(在创建集群时或通过 spark-submit 选项为单个应用程序设置)。

事实上,从 emr-4.4.0 开始,dynamicAllocation 已默认启用,因此您实际上根本不需要执行/配置任何操作即可在 emr-4.4.0+ 上使用 dynamicAllocation。 (一个异常(exception)是如果您启用了 maximizeResourceAllocation 功能。您仍然可以将 dynamicAllocation 与 maximizeResourceAllocation 一起使用,但是您需要在创建集群时在配置中显式启用 dynamicAllocation 以防止 spark.executor.instances 被设置maximizeResourceAllocation,因为设置执行器实例的数量会有效地禁用 dynamicAllocation。)

顺便说一下,您说 MASTER 实例确实将 yarn.nodemanager.aux-services 仅设置为 mapreduce_shuffle 是正确的,但这只是在 EMR 上如何设置此值的配置的产物。尽管在 MASTER 实例上看到此值似乎设置不正确(即缺少 spark_shuffle 值)可能会让人感到困惑,但它实际上没有任何效果,因为 MASTER 实例不运行 NodeManager。

此外,您关于 Spark 回退到 mapreduce_shuffle 的假设是不正确的,因为 spark_shuffle 不存在。 MapReduce Shuffle Service 仅供 MapReduce 应用程序使用,不能供 Spark 应用程序使用。

关于hadoop - spark.dynamicAllocation 的 EMR 配置与 Spark 官方文档不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38211901/

有关hadoop - spark.dynamicAllocation 的 EMR 配置与 Spark 官方文档不匹配的更多相关文章

  1. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  2. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  3. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby - 匹配大写字母并用后续字母填充,直到一定的字符串长度 - 2

    我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种

  6. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  7. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  8. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  9. ruby - rbenv 安装 ruby​​ 校验和不匹配 osx - 2

    我已经在mountainlion上成功安装了rbenv和ruby​​build。运行rbenvinstall1.9.3-p392结束于:校验和不匹配:ruby-1.9.3-p392.tar.gz(文件已损坏)预期f689a7b61379f83cbbed3c7077d83859,得到1cfc2ff433dbe80f8ff1a9dba2fd5636它正在下载的文件看起来没问题,如果我使用curl手动下载文件,我会得到同样不正确的校验和。有没有人遇到过这个?他们是如何解决的? 最佳答案 tl:博士;使用浏览器从http://ftp.rub

  10. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

随机推荐