2

的我正在一個2節點集羣紗上的火花工作。我的數據集不大(< 100MB)只是爲了測試,工作人員因爲要求太多的虛擬內存而被殺。這裏的數額是荒謬的。在使用的11GB物理內存中佔用2GB,使用300GB虛擬內存。在階段2.1(TID 22,IP-172-31-6-141.ec2.internal)丟失任務0.0::星火工人要求的荒謬金額虛擬內存

16/02/12 5點49分43秒WARN scheduler.TaskSetManager ExecutorLostFailure(執行人2退出由其中一個正在運行的任務引起)原因:容器標記爲失敗:container_1455246675722_0023_01_000003在主機上:ip-172-31-6-141.ec2.internal。退出狀態:143。診斷:容器[pid = 23206,containerID = container_1455246675722_0023_01_000003]超出了虛擬內存限制。當前使用情況:使用的2.1 GB物理內存爲2.1 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(字節)RSSMEM_USAGE(頁)FULL_CMD_LINE | - 23292 23213 23292 23206(蟒)15 3 101298176 5514蟒-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-root/nm-local-dir/usercache/root/appcache/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://[email protected] .0.92:37386 --executor-ID 2 --hostname IP-172-31-6-141.ec2.internal --cores 8 --app-ID application_1455246675722_0023 --user級路徑的文件:/ TMP/hadoop-根/納米本地-DIR/usercache /根/應用程序緩存/ application_1455246675722_0023/container_1455246675722_0023_01_000003/應用的.jar 1>的/ mnt /紗線/日誌/ application_1455246675722_0023/container_1455246675722_0023_01_000003 /標準輸出2>的/ mnt /紗線/日誌/ application_1455246675722_0023/container_1455246675722_0023_01_000003 /標準錯誤 | - 23341 23292 23292 23206(蟒)87 8 39464374272 23281蟒-m pyspark.daemon | - 23350 23292 23292 23206(蟒)86 7 39463976960 24680蟒-m pyspark.daemon | - 23329 23292 23292 23206(蟒)90 6 39464521728 23281蟒-m pyspark.daemon | - 23213 23206 23206 23206(JAVA)1168 61 11967115264 359820/usr/lib中/ JVM/JAVA -7-的openjdk-AM d64/bin/java -server -XX:OnOutOfMemoryError = kill%p -Xms10240m -Xmx10240m -Djava.io.tmpdir =/tmp/hadoop-root/nm-local-dir/usercache/root/appcache/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-網址火花://[email protected]:37386 --executor-ID 2 --hostname IP-172-31-6-141.ec2.internal --cores 8 --app-ID application_1455246675722_0023 --user-類 - 路徑的文件:/ TMP/Hadoop的根/納米本地-DIR/usercache /根/應用程序緩存/ application_1455246675722_0023/container_1455246675722_0023_01_000003/應用的.jar | - 23347 23292 23292 23206(蟒)87 10 39464783872 23393蟒-m pyspark。守護進程 | - 23335 23292 23292 23 206 python 83 9 39464112128 23216 python -m pyspark.daemon 23338 23292 23292 23206(python)81 9 39463714816 24614 python -m pyspark.daemon | - 23332 23292 23292 23206(python)86 6 39464374272 24812 python - m pyspark.daemon | - 23344 23292 23292 23206(蟒蛇)85 30 39464374272 23281 python -m pyspark.daemon 根據要求死亡的容器。退出代碼是143

有誰知道爲什麼會發生這種情況?我一直在嘗試修改各種紗線和火花的配置,但是我知道它要求這麼多vmem是非常錯誤的。

+0

請提供有關用於提交作業的命令和環境詳細信息的詳細信息。從錯誤你似乎提交了一些Python作業看到** - Xms10240m **在錯誤 - '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-root/nm- local-dir/usercache/root/appcache/application_1455246675722_0023/container_1455246675722_0023_01_000003/tmp' – Sumit

回答

6

我正在運行的命令是

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

原來的執行,核心標誌沒有做什麼,我想它。它使pyspark.daemon進程的8個副本運行8個工作進程副本來運行作業。每個進程使用38GB的虛擬內存,這是不必要的大,但8 * 38〜300,所以解釋這一點。

它實際上是一個很差的國旗。如果我將executor-cores設置爲1,它會創建一個守護進程,但守護進程將使用多個內核,如htop所示。

+0

然後,它應該被命名爲「每個執行者守護進程的數目」。我想避免執行者失敗,所以你建議每個執行者或多個執行者使用1個守護進程? (我的物理服務器每個服務器有24個核心) –

+0

我認爲這取決於你想要做的事情。問題是你想在執行層或守護層進行多路複用。我認爲如果你有一臺機器,它不應該有很大的不同,所以我會爲每個執行器和num-executors == 24/num-cores-used-per-executor做守護進程。我不確定它會影響你的執行者失敗率, – syzygy