我在spark的大连接驱动程序中遇到以下错误。
我们有3个节点,32GB内存,连接总输入大小为150GB。 (当输入文件大小为50GB时,相同的应用程序正常运行)
我已将storage.memoryFraction设置为0.2并将shuffle.memoryFraction设置为0.2。但仍然继续运行beyong物理限制错误。
15/04/07 19:58:17 INFO yarn.YarnAllocator:标记为失败的容器: container_1426882329798_0674_01_000002。退出状态:143。诊断: 容器 [pid = 51382,containerID = container_1426882329798_0674_01_000002]是 超越物理内存限制。当前用法:16 GB 16 GB 使用的物理内存;使用16.8 GB的33.6 GB虚拟内存。杀 容器。转储进程树的转储 container_1426882329798_0674_01_000002: | - PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS)SYSTEM_TIME(MILLIS)VMEM_USAGE(BYTES)RSSMEM_USAGE(PAGES) FULL_CMD_LINE | - 51387 51382 51382 51382(java)717795 50780 17970946048 4221191 /usr/jdk64/jdk1.7.0_45/bin/java -server -XX:OnOutOfMemoryError = kill%p -Xms14336m -Xmx14336m -verbose:gc -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:+ StartAttachListener -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 9010 -Dcom.sun.management.jmxremote.local.only = false -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false -Dlog4j.configuration = file:/ softwares / log4j .properties -Djava.io.tmpdir = / hadoop / yarn / local / usercache / hdfs / appcache / application_1426882329798_0674 / container_1426882329798_0674_01_000002 / tmp -Dspark.driver.port = 20763 -Dspark.ui.port = 0 -Dspark.yarn.app.container.log.dir = / hadoop / yarn / log / application_1426882329798_0674 / container_1426882329798_0674_01_000002 org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url akka.tcp://sparkDriver@maxiq2.augmentiq.in:20763 /用户/ CoarseGrainedScheduler --executor-id 1 --hostname maxiq1.augmentiq.in --cores 4 --app-id application_1426882329798_0674 --user-class-path 文件:/ hadoop的/纱线/本地/ usercache / HDFS /应用程序缓存/ application_1426882329798_0674 / container_1426882329798_0674_01_000002 /的应用的.jar
请帮我解决这个问题?
答案 0 :(得分:3)
我们之前遇到过类似的问题。尝试改变火花的所有配置,但没有运气。
后来我们发现这是数据的问题。我们在连接中使用的键有多行。一些密钥在两个表中都有大约4000-5000行。因此,火花创造了大约5k * 5k记录的密钥,使得执行者的内存运行。
您可能需要检查一次数据。对输入数据进行一些分析,例如按键分组,然后获取计数。这可能会给你一些见解。
答案 1 :(得分:-1)
您可以尝试将--executor-memory
设置为低于此限制的内容。限制在yarn-site.xml
中定义,如果未设置则默认为默认值。
如果节点有更多内存,您也可以尝试增加限制。详细信息可在http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/中找到一些大小调整说明。
一般情况下请记住,您的资源分配是由YARN控制的,熟悉纱线工作和调试是一个神的想法