首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >纱线火花作业调度较慢

纱线火花作业调度较慢
EN

Stack Overflow用户
提问于 2017-01-26 06:42:38
回答 1查看 1.4K关注 0票数 3

我有两个具有以下配置的mapr集群,

代码语言:javascript
运行
复制
cluster 1: hosted on aws, 3 nodes with 32g of memory/32 cores each
cluster 2: hosted on bare-metal servers, 8 nodes with 128g of memory/32 cores each

我正在两个集群上通过纱线运行下面的电火花代码

代码语言:javascript
运行
复制
df=hc.sql("select * from hive_table")
df.registerTempTable("df")
df.cache().count()
for: 100times
    result=hc.sql('select xxxx from df')
    result.write.saveAsTable('some hive table', mode='append')

上述代码提交了100个新作业的火花(运行在纱线之上)。在群集1上,整个操作在30分钟内完成,而对于较大的集群2,则需要90分钟才能完成相同的操作。经过检查,我发现虽然每个作业花费的时间几乎相同(集群2中的时间稍微快一点),但每个作业之间的时间在2中比1中要高得多。

可能的原因,

  1. 驱动程序和执行程序节点之间的延迟?--我正在运行 纱线-客户模式
  2. 驱动器内存低,还是我在纱线上启动火花簇的方式是错误的?

我如何提交工作?

代码语言:javascript
运行
复制
Cluster 1: /opt/mapr/spark/spark-1.6.1/bin/spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 10g --executor-cores 5 --driver-memory 10g --driver-cores 10 --conf spark.driver.maxResultSize="0" --conf spark.default.parallelism="100" --queue default

Cluster 2: /opt/mapr/spark/spark-1.6.1/bin/spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 80g --executor-cores 28 --driver-memory 25g --driver-cores 25 --conf spark.driver.maxResultSize="0" --conf spark.default.parallelism="100" --queue default

PS:只粘贴代码的一部分。代码中还有其他模块。总的来说,集群2处理代码的速度比集群1快3x,所以我不认为“一般”速度有问题。

我的问题更具体的是工作之间的“时间”。对于ex,上面的代码运行100个spark作业,每个作业在集群2中平均占用2s,在集群1中运行5s。与集群1相比,集群2中每个作业之间的时间要长得多。

EN

回答 1

Stack Overflow用户

发布于 2017-01-26 07:36:16

在您的伪代码中,我没有看到任何与驱动程序相关的操作(假设执行者将数据保存到分布式FS中)

请注意:

  1. 您可以使用df.cache(),但似乎没有使用缓存的df。
  2. 您的纱线客户端配置似乎存在问题。

看起来您正在尝试使用比可用的更多的执行器内存和内核。

在集群#1中,有3个具有32 In内存的节点,您的执行代码是:--num-executors 10 --executor-memory 10g

最好的情况下,您将有9个执行器,每个10 of的RAM。在每个节点上最多有3个执行者。我假设每个节点只能执行2个执行器(从32 2GB的RAM中,超过2GB的内存将用于纱线、开销等,因此,每个10 2GB的==> 2容器只剩下不到29 2GB)。

==>集群#1将有6到9个执行程序。

在集群2中,有5个具有128 In内存的节点,您的执行代码是:--num-executors 10 --executor-memory 80g

最好的情况是,您将有5个带有80GB RAM的执行器。一个节点上的每个执行器。

由于集群#1有更多的执行器(即使它们更小),所以它可能运行得更快(取决于应用程序)。

减少集群#2中的执行器、内存和核心,同时增加执行程序的数量,将提供更好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41868082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档