我正在使用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,批量加载它们。但是,当我使用YARN运行代码时,如下所示:
#!/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时,会在_temporary
目录上引发FileNotFoundException。我环顾四周,发现很多其他人遇到过这样的错误(here和here),但没有任何建议对我有用。我将执行程序的数量设置为1并将推测设置为false,因为这被认为是错误的可能原因,但问题仍然存在。如果有人可以建议我探索其他选择,我将不胜感激。