[Spark 进阶] -- Spark 如何在运行时读取 --files 添加的 README.md 文件?

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 节点访问该目录文件。

参考

  1. https://stackoverflow.com/questions/35865320/apache-spark-filenotfoundexception
  2. https://stackoverflow.com/questions/41677897/how-to-get-path-to-the-uploaded-file
  3. https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/SparkContext.html#addFile-java.lang.String-
  4. http://spark.apache.org/docs/2.3.0/running-on-yarn.html#configuration
发布了508 篇原创文章 · 获赞 613 · 访问量 201万+

猜你喜欢

转载自blog.csdn.net/high2011/article/details/96288072
今日推荐