提交任务


spark-submit --class org.apache.spark.examples.SparkPi  --master yarn  --deploy-mode client  --driver-memory 600M  --executor-memory 500M  --num-executors 1  /usr/local/spark/examples/jars/spark-examples_2.11-2.3.0.jar  3

console报错


2020-08-11 10:39:50 INFO  YarnSchedulerBackend$YarnSchedulerEndpoint:54 - ApplicationMaster registered as NettyRpcEndpointRef(spark-client://YarnAM)
2020-08-11 10:39:53 WARN  YarnSchedulerBackend$YarnSchedulerEndpoint:66 - Requesting driver to remove executor 1 for reason Container marked as failed: container_1597065725323_0004_02_000002 on host: bj3-dev-search-02.tencn. Exit status: 1. Diagnostics: Exception from container-launch.
Container id: container_1597065725323_0004_02_000002
Exit code: 1
Stack trace: ExitCodeException exitCode=1:at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)at org.apache.hadoop.util.Shell.run(Shell.java:455)at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Container exited with a non-zero exit code 1

查看nodemanager的yarn日志


java.lang.IllegalArgumentException: System memory 466092032 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.at org.apache.spark.memory.UnifiedMemoryManager$.getMaxMemory(UnifiedMemoryManager.scala:217)at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:199)at org.apache.spark.SparkEnv$.create(SparkEnv.scala:330)at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175)at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:256)at org.apache.spark.SparkContext.<init>(SparkContext.scala:423)at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)at com.kk.search.spark.SparkPi.main(SparkPi.java:27)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)

这个和container的内存分配有关系

https://www.jianshu.com/p/bb0bdcb26ccc

这个错误目前还是很难完全排查,使用的是yarn client模式
报异常的代码是在这里

 /*** Return the total amount of memory shared between execution and storage, in bytes.*/private def getMaxMemory(conf: SparkConf): Long = {val systemMemory = conf.getLong("spark.testing.memory", Runtime.getRuntime.maxMemory)val reservedMemory = conf.getLong("spark.testing.reservedMemory",if (conf.contains("spark.testing")) 0 else RESERVED_SYSTEM_MEMORY_BYTES)val minSystemMemory = (reservedMemory * 1.5).ceil.toLongif (systemMemory < minSystemMemory) {throw new IllegalArgumentException(s"System memory $systemMemory must " +s"be at least $minSystemMemory. Please increase heap size using the --driver-memory " +s"option or spark.driver.memory in Spark configuration.")}

这里的systemMemory 实际上就是Runtime.getRuntime.maxMemory,理论上这个值应该等于(jvm设置的值减去一个survivor的值)。
在本地的idea中使用local模式运行的时候显示的值和预期的是一致的。但是在yarn上使用client模式则是不一致的,不太容易判断。
也就是当设置 --driver-memory 500M的时候对应的到了yarn中并不是这些,这是需要注意的。具体的实现暂时没有看到相关的分析,估计还有一些难度,毕竟不是java的,只能看一个大概。

在deploy-mode 为client的方式下,进行提交如下


[root@bj3-dev--03 search_jar]# spark-submit --class com.kk.search.spark.SparkPi  --master yarn  --deploy-mode client  --driver-memory 600M  --executor-memory 1500M  --conf spark.yarn.am.memory=1500M --num-executors 1  spark-1.0-SNAPSHOT.jar  30
# 控制台输出,做了一些修改,增加了一些shell日志和代码日志
----------------------will do submit
/usr/local/jdk1.8.0_91/bin/java -cp /usr/local/spark/conf/:/usr/local/spark/jars/*:/usr/local/hadoop/etc/hadoop/ -Xmx600M org.apache.spark.deploy.SparkSubmit --master yarn --deploy-mode client --conf spark.yarn.am.memory=1500M --conf spark.driver.memory=600M --class com.kk.search.spark.SparkPi --executor-memory 1500M --num-executors 1 spark-1.0-SNAPSHOT.jar 30
----------------------
2020-08-13 18:23:24 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
# 这里的输出是driver端的main方法获取了一下当前的jvm的情况,可以看到,Runtime.getRuntime().maxMemory() 获取到的可用内存和-Xmx600M 并不相等,也不等于(Eden+Survivor*2+Old)
---------------------------
max: 559415296 (533.50 M)
Non-heap: -1 (-0.00 M)
Heap: 559415296 (533.50 M)
Pool: Code Cache (type Non-heap memory) = 251658240 (240.00 M)
Pool: Metaspace (type Non-heap memory) = -1 (-0.00 M)
Pool: Compressed Class Space (type Non-heap memory) = 1073741824 (1024.00 M)
Pool: PS Eden Space (type Heap memory) = 166723584 (159.00 M)
Pool: PS Survivor Space (type Heap memory) = 21495808 (20.50 M)
Pool: PS Old Gen (type Heap memory) = 419430400 (400.00 M)
---------------------------
***************

从上面看到我们设置了-Xmx600M之后,对应的driver通过Runtime.getRuntime().maxMemory()获取到的最大可用系统内存和jvm当前的最大内存并不一致。
也就是说Runtime.getRuntime().maxMemory()获取的并不是jvm的内存,jvm的内存有可能以某种方式进行了限制,Runtime.getRuntime().maxMemory()获取的内存是动态变化的,某种对jvm内存的使用方式可能导致可用内存减少。
具体是那种使用方式会导致减小还不太清楚,可能是用来做缓存之类的。

https://blog.csdn.net/u011564172/article/details/68496848
https://www.cnblogs.com/mengrennwpu/p/11754341.html
https://cloud.tencent.com/developer/article/1198464

spark的内存过小报错相关推荐

  1. Spark(二): 内存管理

    2019独角兽企业重金招聘Python工程师标准>>> Spark 作为一个以擅长内存计算为优势的计算引擎,内存管理方案是其非常重要的模块: Spark的内存可以大体归为两类:exe ...

  2. Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  3. spark executor内存分配_二十二、Spark之图解Executor端内存管理

    Spark应用程序执行时,Spark集群会启动Driver和Executor两种JVM进程,Driver端负责创建SparkContext上下文(通往集群的唯一通道),构建DAG, 创建Task并进行 ...

  4. ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

    ANSYS-CFX,计算时报错,内存参数报错,return code 1[终极解决方案] 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题 ...

  5. spark减少内存消耗_将内存消耗减少20倍

    spark减少内存消耗 这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOf ...

  6. spark抽取mysql数据到hive_使用spark将内存中的数据写入到hive表中

    使用spark将内存中的数据写入到hive表中 hive-site.xml hive.metastore.uris thrift://master:9083 Thrift URI for the re ...

  7. 超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓

    摘要:memoryStore主要是将没有序列化的java对象数组或者序列化的byteBuffer放到内存中. 本文分享自华为云社区<spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌 ...

  8. 【学习react中遇到的坑:内存泄漏报错】

    学习react中遇到的坑:内存泄漏报错 对就是这个错误 Can't perform a React state update on an unmounted component. This is a ...

  9. oracle lms进程 内存,【案例】Oracle ges resource消耗内存高报错ORA-04031 MOS解决办法...

    天萃荷净 Oracle研究中心案例分析:运维DBA反映Oracle数据库10.2.0.4.12每间隔一段时间就必须重启,运行一断时间报ORA-04031错误oracle ges res cache l ...

最新文章

  1. 最新语义视觉SLAM综述:面向应用的移动机器人自主导航解决方案
  2. 仅发送options请求,没有发送post解决方案
  3. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
  4. android 绘图软件,安卓最强大的绘图软件 妙笔生花最新评测
  5. UIBackgroundTaskIdentifier 进入后台后结束任务再挂起APP
  6. 安卓手机管理软件_日程管理软件哪个好?
  7. netty源码解解析(4.0)-15 Channel NIO实现:写数据
  8. git使用puttygen生成公钥私钥
  9. Origin无法修改语言为灰色
  10. “菜刷刷”系统装机流程
  11. C#编程,获取当前时间为一年的第几周的一种方法。
  12. CentOS8安装与配置jdk1.8 与远程分发复制jdk到另一个虚拟机
  13. 数字模型制作规范(转自Unity3D群)
  14. 赵雅智_名片夹(4)_Android中listview可折叠伸缩仿手风琴效果(静态)
  15. 那么如何求出这个长轴和短轴呢?于是线性代数就来了
  16. 深度学习 Ai 换脸
  17. C语言面试题 - static的使用
  18. 磨刀不误砍柴 - 配置适合工作学习的桌面环境
  19. FFmpeg源代码简单分析-编码-av_write_trailer()
  20. 艾特网能“高效节能三板斧”亮相第22届机房协会年会

热门文章

  1. Valgrind简单用法
  2. Windows Socket五种I/O模型详细介绍(精)
  3. OkHttp3的连接池及连接建立过程分析
  4. 战斗民族开源神器。ClickHouse为什么能够征服各个大厂?
  5. scrapy 设置随机UA
  6. 构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
  7. 机器学习帮助WebRTC视频质量评价
  8. 计算机网络常见问题总结
  9. 14W 行代码量的前端页面长什么样
  10. 腾讯开源 TurboTransformers:自然语言处理推理加速工具