saveAsNewHadoopFile上的FileNotFoundException

saveAsNewHadoopFile上的FileNotFoundException,hadoop,apache-spark,yarn,Hadoop,Apache Spark,Yarn,我正在使用Spark将数据批量加载到HBase中。我的Python脚本可以完美地完成这项工作,但是我需要能够使用spark submit提交它,以便在集群上运行它 当我使用以下命令在本地运行脚本时: #!/bin/bash sudo /usr/hdp/current/spark-client/bin/spark-submit\ --master local[*]\ --deploy-mode client\ --verbose\ --num-executors 3\ --ex

我正在使用Spark将数据批量加载到HBase中。我的Python脚本可以完美地完成这项工作,但是我需要能够使用spark submit提交它,以便在集群上运行它

当我使用以下命令在本地运行脚本时:

#!/bin/bash
sudo /usr/hdp/current/spark-client/bin/spark-submit\
  --master local[*]\
  --deploy-mode client\
  --verbose\
  --num-executors 3\
  --executor-cores 1\
  --executor-memory 512m\
  --driver-memory 512m\
  --conf\
    spark.logConf=true\
  /test/BulkLoader.py
它可以完美地工作——加载数据、写入HFiles、批量加载它们。但是,当我使用纱线运行代码时,如下所示:

#!/bin/bash
sudo /usr/hdp/current/spark-client/bin/spark-submit\
  --master yarn\
  --deploy-mode client\
  --verbose\
  --num-executors 3\
  --executor-cores 1\
  --executor-memory 512m\
  --driver-memory 512m\
  --conf\
    spark.logConf=true\
  --conf\
    spark.speculation=false\
  /test/BulkLoader.py
事情很快就会出差错。一旦脚本尝试写入HFile,我就会出现以下错误:

 An error occurred while calling z:org.apache.spark.api.python.PythonRDD.saveAsNewAPIHadoopFile.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 15.0 failed 26 times, most recent failure: 
Lost task 0.25 in stage 15.0 (TID 67, sandbox.hortonworks.com): java.io.FileNotFoundException: File file:/tmp/hfiles-06-46-57/_temporary/0/_temporary/attempt_201602150647_0019_r_000000_25/f1 does not exist
        at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609)
        at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822)
...

写入HFile时,会在
\u临时
目录上引发FileNotFoundException。我环顾四周,发现许多其他人都遇到过这样的错误,但没有任何建议对我有效。我将执行者的数量设置为1,并将推测设置为false,因为这可能是错误的原因,但问题仍然存在。如果有人能为我提供其他选择,我将不胜感激。

首先,我会检查文件是否存在,以便您知道问题是文件未创建,还是找不到。大多数情况下,它是第一个,如果是这样的话,以前可能有一些警告说它无法创建,可能是由于权限的原因。@DanielZolnai这是我的第一个猜测。但是,这是在创建HFile期间创建的临时目录。通常,将部分文件写入临时目录,然后复制回临时目录并删除临时目录。这看起来更像是一个并行化问题,但我无法真正控制Spark如何并行化任务。如果不是太多数据,您可以
rdd。将(1)
与您的数据合并,这将在一台机器上的一个分区中收集数据。如果您在之后编写,那么就不应该有并行化问题,因为它只在一台机器上(这不是很有效,但可以帮助您过滤问题)。@DanielZolnai-Hmmm。我会尝试并报告。谢谢。请尝试此设置(“spark.eventLog.enabled”、“false”);