温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行spark on yarn集群调优

发布时间:2021-12-17 10:39:04 来源:亿速云 阅读:174 作者:柒染 栏目:大数据

今天就跟大家聊聊有关如何进行spark on yarn集群调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

  • jar包管理:在spark-default.conf文件中指定Spark.YARN.jars在hdfs上的SPARK需要的jar包。否则每次提交application,spark会将driver端的SPARK_HOE下的jar.node, spark.locality.wait.pack包分发到各节点上。浪费磁盘资源和网络资源。

  • yarn队列资源不足导致的应用运行失败,这类问题主要针对提交作业的调优:

  • 1.在J2EE中间层,通过线程池技术提交作业,并设置线程池大小为1。

  • 2.若只有一个应用,可以将资源调整到最大

  • 3.若有些spark应用明显的耗时,可以spark拥有的资源进行分类(耗时任务和快速任务),此时可以使用两个线程池提交作业,每个线程池大小为1。

  • 数据本地化:分布式存储是大数据技术的核心,而为了提高大数据计算的效率,使计算靠近数据,减少移动大量数据而产生的网络io和磁盘io。

    • spark中的本地级别有:PROCESS_LOCAL(进程本地化,效率最高), NODE_LOCAL(节点本地化), PACK_LOCAL(机架本地化), ANY, NO_PREF。在实际运行中我们希望的是大多数计算是进程本地化或节点本地化。

    • 调优方式:1. 优化算法 2. 数据设置合理的副本数 3. 将常用的rdd设置缓存 4. 设置spark相关参数spark.locality.wait,spark.locality.wait.process, spark.locality.wait.node, spark.locality.wait.pack。 在client模式下运行,观察运行日志,使得大多数计算是PROCESS_LOCAL,同时application运行时间减少了,才是有效的优化。为了提升数据计算本地化级别而牺牲application运行时间,是不可取得,这样也会造成大量资源的闲置和较长的等待时间。

  • Executor经常被kill掉,出现Container killed by YARN for exceeding memory limits,内存被用完导致此类问题的发生:

    • 移除rdd缓存

    • spark.storage.memoryFraction:spark数据缓存的的内存占比,默认0.6,即可以使用executor的60%内存持久化数据。在缓存达到临界值,数据可能不能缓存或写入到磁盘。当executor经常被kill的时候,应该降低该值。

    • spark.yarn.Executor.memoryoverhead:该参数是在yarn模式下堆外内存的调节,默认情况下为是每一个executor的内存大小的10%

  • YARN-Cluster模式下JVM栈内存溢出:

    • JVM永久代PermGen设置 Spark.Driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"(PermGen out of Memory error log)

    • 在spark-sql中将复杂的sql语句简化为多个简单的sql进行处理(JVM stack overflow)

看完上述内容,你们对如何进行spark on yarn集群调优有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI