[Spark 进阶] -- Spark 如何在运行时读取 --files 添加的 README.md 文件?
其他
2020-01-14 10:44:33
阅读次数: 0
Spark 如何在运行时读取 --files 添加的 README.md 文件?
方法 1
- 本方法适用于 spark local 和 spark on yarn-client 。
- --files 会把文件上传到 hdfs 的 .sparkStagin/applicationId 目录下,使用上面说的方法先获取到 hdfs 对应的这个目录,然后访问hdfs的这个文件,如下 spark.read().textFile(System.getenv("SPARK_YARN_STAGING_DIR") + "/README.md")
- 注意:addFile 方法上传的文件 不能使用 textFile 读取!!
方法 2
- 本方法适用于 Spark on Yarn-cluster ,因为本地文件使用 addFile 方法添加时,在集群的 executor 上是找不到文件的,因为只有本地有,所以必须使用 --files 上传,使用 SparkFiles.get(fileName) 读取。
- SparkFiles.get(fileName) ,我获取的结果是:/.../yarn/local/usercache/research/appcache/applicationId/spark-*******/userFiles-****/README.md 。
- 本地目录: /.../yarn/local/usercache/research/... 下的确有 README.md ,但是 worker 和 driver 的本地 README.md 路径不一样。
- 解释原因:SparkFiles.get(fileName String) 获取的目录是 driver node 下的本地目录,所以 sc.textFile 无法在 worker 节点访问该目录文件。
参考
- https://stackoverflow.com/questions/35865320/apache-spark-filenotfoundexception
- https://stackoverflow.com/questions/41677897/how-to-get-path-to-the-uploaded-file
- https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/SparkContext.html#addFile-java.lang.String-
- http://spark.apache.org/docs/2.3.0/running-on-yarn.html#configuration
发布了508 篇原创文章 ·
获赞 613 ·
访问量 201万+
转载自blog.csdn.net/high2011/article/details/96288072