首页 文章

Spark工作者要求荒谬的虚拟内存量

提问于
浏览
2

我在2节点纱线集群上运行火花作业 . 我的数据集不是很大(<100MB),仅用于测试,工作人员因为要求过多的虚拟内存而被杀死 . 这里的金额是荒谬的 . 使用11GB物理内存2GB,使用300GB虚拟内存 .

16/02/12 05:49:43 WARN scheduler.TaskSetManager:阶段2.1中丢失的任务0.0(TID 22,ip-172-31-6-141.ec2.internal):ExecutorLostFailure(执行者2退出由其中一个引起运行任务)原因:容器标记为失败:容器上的容器_1455246675722_0023_01_000003:ip-172-31-6-141.ec2.internal . 退出状态:143 . 诊断:容器[pid = 23206,containerID = container_1455246675722_0023_01_000003]正在超出虚拟内存限制 . 当前用法:使用2.1 GB的11 GB物理内存;使用305.3 GB的23.1 GB虚拟内存 . 杀死容器 . container_1455246675722_0023_01_000003的进程树转储:| - PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS)SYSTEM_TIME(MILLIS)VMEM_USAGE(BYTES)RSSMEM_USAGE(页面)FULL_CMD_LINE | - 23292 23213 23292 23206(python)15 3 101298176 5514 python -m pyspark .daemon | - 23206 1659 23206 23206(bash)0 0 11431936 352 / bin / bash -c / usr / lib / jvm / java-7-openjdk-amd64 / bin / java -server -XX:OnOutOfMemoryError ='kill%p '-Xms10240m -Xmx10240m -Djava.io.tmpdir = / TMP / Hadoop的根/纳米本地-DIR / usercache /根/应用程序缓存/ application_1455246675722_0023 / container_1455246675722_0023_01_000003 / TMP '-Dspark.driver.port = 37386' -Dspark.yarn .app.container.log.dir = / mnt / yarn / logs / application_1455246675722_0023 / container_1455246675722_0023_01_000003 -XX:MaxPermSize = 256m org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://CoarseGrainedScheduler@172.31.0.92:37386 --executor-id 2 --hostname ip-172-31-6-141.ec2.internal --cores 8 --app-id application_1455246675722_0023 --user-class-路径文件:/tmp/hadoop-root/nm-local-dir/usercache/root/appcache/application_1455246675722_0023/container_1455246675722_0023_01_000003/app.jar 1> / mnt / yarn / logs / application_1455246675722_0023 / container_1455246675722_0023_01_000003 / stdout 2> / mnt / yarn / logs / application_1455246675722_0023 / container_1455246675722_0023_01_000003 / stderr | - 23341 23292 23292 23206(python)87 8 39464374272 23281 python -m pyspark.daemon | - 23350 23292 23292 23206(python)86 7 39463976960 24680 python -m pyspark.daemon | - 23329 23292 23292 23206(python)90 6 39464521728 23281 python -m pyspark.daemon | - 23213 23206 23206 23206(java)1168 61 11967115264 359820 / usr / lib / jvm / java-7-openjdk-amd64 / bin / java -server -XX: OnOutOfMemoryError =杀死%p -Xms10240m -Xmx10240m -Djava.io.tmpdir = / TMP / Hadoop的根/纳米本地-DIR / usercache /根/应用程序缓存/ application_1455246675722_0023 / container_1455246675722_0023_01_000003 / TMP -Dspark.driver.port = 37386 -Dspark .yarn.app.container.log.dir = / MNT /纱线/日志/ application_1455246675722_0023 / container_1455246675722_0023_01_000003 -XX:MaxPermSize参数=256米org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-URL火花://CoarseGrainedScheduler@172.31.0.92:37386 --executor-ID 2 --hostname IP-172-31-6- 141.ec2.internal --cores 8 --app-ID application_1455246675722_0023 --user类路径文件:/tmp/hadoop-root/nm-local-dir/usercache/root/appcache/application_1455246675722_0023/container_1455246675722_0023_01_000003/app.jar | - 23347 23292 23292 23206(蟒)87 10 39464783872 23393蟒-m pyspark.daemon | - 23335 23292 23292 23206(蟒)83 9 39464112128 23216蟒-m pyspark.daemon | - 23338 23292 23292 23206(蟒)81 9 39463714816 24614蟒-m pyspark.daemon | - 23332 23292 23292 23206(蟒)86 6 39464374272 24812蟒-m pyspark.daemon | - 23344 23292 23292 23206(蟒)85 30 39464374272 23281蟒-m pyspark.daemon集装箱杀死上请求 . 退出代码是143

有谁知道为什么会这样?我一直在尝试修改各种纱线和火花配置,但我知道要求这么多vmem是非常错误的 .

1 回答

  • 7

    我正在运行的命令是

    spark-submit --executor-cores 8 ...
    

    事实证明,executor-cores标志不能达到我的想象 . 它生成8个pyspark.daemon进程副本,运行8个工作进程副本来运行作业 . 每个进程使用38GB的虚拟内存,这是不必要的大,但8 * 38~300,所以这解释了 .

    它实际上是一个非常糟糕的旗帜 . 如果我将executor-cores设置为1,它会生成一个守护进程,但守护进程将使用多个核心,如htop所示 .

相关问题