spark job继续显示TaskCommitDenied(驱动程序拒绝任务提交)

时间:2018-01-29 06:36:40

标签: apache-spark pyspark apache-spark-sql pyspark-sql apache-spark-2.0

环境:

我们正在使用EMR,Spark 2.1和EMR FS。

我们正在做的流程:

我们正在运行PySpark作业来加入2个Hive表并使用saveAsTable基于此结果创建另一个hive表并将其存储为带分区的ORC

问题:

18/01/23 10:21:28 INFO OutputCommitCoordinator: Task was denied committing, 
stage: 84, partition: 901, attempt: 10364
18/01/23 10:21:28 INFO TaskSetManager: Starting task 901.10365 in stage 84.0 
(TID 212686, ip-172-31-46-97.ec2.internal, executor 10, partition 901, 
PROCESS_LOCAL, 6235 bytes)
18/01/23 10:21:28 WARN TaskSetManager: Lost task 884.10406 in stage 84.0 
(TID 212677, ip-172-31-46-97.ec2.internal, executor 85): TaskCommitDenied 
(Driver denied task commit) for job: 84, partition: 884, attemptNumber: 10406

这个特定的日志信息是从Spark日志中递归出来的,当我们杀死这个作业时,我们已经看到这个约为~170000(160595)次,如下所示:Spark-Task Commit Denied

从它显示的Source Code

/** * :: DeveloperApi :: * Task requested the driver to commit, but was denied. */
@DeveloperApicase class TaskCommitDenied
(    jobID: Int,    
partitionID: Int,  
attemptNumber: Int) extends TaskFailedReason 
{ 
override def toErrorString: String = s"TaskCommitDenied (Driver denied task commit)" +    
s" for job: $jobID, partition: $partitionID, attemptNumber: $attemptNumber" 

/**   * If a task failed because its attempt to commit was denied, do not count this failure   * towards failing the stage. This is intended to prevent spurious stage failures in cases   * where many speculative tasks are launched and denied to commit.   */ 

 override def countTowardsTaskFailures: Boolean = false
}

请注意我们没有启用spark.speculation,即(它是假的)并且从spark作业环境我们根本没有看过这个属性。

但是当作业运行时,我们可以看到相应的文件是在EMRFS下的表临时目录下创建的,如:

HD​​FS://ip-172-31-18-155.ec2.internal:8020 /蜂房/位置/ hive.db / hivetable / _temporary / 0 / task_1513431588574_1185_3_01_000000 / 00000_0.orc < / p>

我们可以看到关于2001的这类文件夹(因为我们已经给出 spark.sql.shuffle.partitions = 2001

问题(S):

1)即使我们没有启用spark.speculation,也会导致作业启动~170000任务的原因

2)当它完成将数据写入HDFS(EMRFS)时,为什么每个执行者都试图启动新任务

3)我们有办法避免这种情况吗?

非常感谢您对此进行调查。任何与此相关的输入都会对我们有所帮助。

Venkat

1 个答案:

答案 0 :(得分:0)

当您尝试执行任何“ GroupBy”或“ Join”操作时,如果相应的结果超过2GB,Spark将引发错误。检查一下。

注意:请有效地进行分区,以提高性能。您可以在this处找到在Spark中编程时发生的最常见和最愚蠢的错误。