You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Apache Spark (JIRA)" <ji...@apache.org> on 2018/04/26 08:59:00 UTC

[jira] [Assigned] (SPARK-24098) ScriptTransformationExec should wait process exiting before output iterator finish

     [ https://issues.apache.org/jira/browse/SPARK-24098?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Apache Spark reassigned SPARK-24098:
------------------------------------

    Assignee: Apache Spark

> ScriptTransformationExec should wait process exiting before output iterator finish
> ----------------------------------------------------------------------------------
>
>                 Key: SPARK-24098
>                 URL: https://issues.apache.org/jira/browse/SPARK-24098
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.2.1, 2.3.0
>         Environment: Spark Version: 2.2.1
> Hadoop Version: 2.7.1
>  
>            Reporter: Lijia Liu
>            Assignee: Apache Spark
>            Priority: Critical
>
> In our spark cluster, some users find that spark may lost data when they use transform in sql.
> We check the output file and discovery that some file are empty.
> Then we check the executor's log, some exception were found like follow:
>  
>  
> {code:java}
> 18/04/19 03:33:03 ERROR SparkUncaughtExceptionHandler: [Container in shutdown] Uncaught exception in thread Thread[Thread-ScriptTransformation-Feed,5,main]
> java.io.IOException: Broken pipe
> at java.io.FileOutputStream.writeBytes(Native Method)
> at java.io.FileOutputStream.write(FileOutputStream.java:326)
> at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
> at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
> at java.io.DataOutputStream.write(DataOutputStream.java:107)
> at org.apache.hadoop.hive.ql.exec.TextRecordWriter.write(TextRecordWriter.java:53)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread$$anonfun$run$1$$anonfun$apply$mcV$sp$2.apply(ScriptTransformationExec.scala:341)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread$$anonfun$run$1$$anonfun$apply$mcV$sp$2.apply(ScriptTransformationExec.scala:317)
> at scala.collection.Iterator$class.foreach(Iterator.scala:893)
> at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread$$anonfun$run$1.apply$mcV$sp(ScriptTransformationExec.scala:317)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread$$anonfun$run$1.apply(ScriptTransformationExec.scala:306)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread$$anonfun$run$1.apply(ScriptTransformationExec.scala:306)
> at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1952)
> at org.apache.spark.sql.hive.execution.ScriptTransformationWriterThread.run(ScriptTransformationExec.scala:306)
> 18/04/19 03:33:03 INFO FileOutputCommitter: Saved output of task 'attempt_20180419033229_0049_m_000001_0' to viewfs://hadoop-meituan/ghnn07/warehouse/mart_waimai_crm.db/.hive-staging_hive_2018-04-19_03-18-12_389_7869324671857417311-1/-ext-10000/_temporary/0/task_20180419033229_0049_m_000001
> 18/04/19 03:33:03 INFO SparkHadoopMapRedUtil: attempt_20180419033229_0049_m_000001_0: Committed
> 18/04/19 03:33:03 INFO Executor: Finished task 1.0 in stage 49.0 (TID 9843). 17342 bytes result sent to driver{code}
>  
> ScriptTransformation-Feed fail but the task finished successful.
> FInally, we analysed the class ScriptTransformationExec and find follow result:
> When feed thread doesn't set its _exception variable and the progress doesn't exit completely, output Iterator will return false in hasNext function.
>  
> Bug Reappearance:
> 1. Add Thread._sleep_(1000 * 600) before assign for _exception.
> 2. structure a python script witch will throw exception like follow:
> test.py
>  
> {code:java}
> import sys 
> for line in sys.stdin:   
>   raise Exception('error') 
>   print line
> {code}
> 3. use script created in step 2 in transform.
> {code:java}
> spark-sql>add files /path_to/test.py;
> spark-sql>select transform(id) using 'python test.py' as id from city;
> {code}
> The result is that spark will end successfully.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org