【发布时间】:2015-11-20 15:57:23
【问题描述】:
我正在使用 yarn-cluster master 运行我的 spark 应用程序。
应用程序做什么?
- 外部服务根据对 RESTService 的 HTTP 请求生成 jsonFile
- Spark 需要读取这个文件并在解析完 json 后做一些工作
想到的最简单的解决方案是使用 --files 来加载该文件。 在 yarn-cluster 模式下读取文件意味着它必须在 hdfs 上可用(如果我是对的?)并且我的文件被复制到这样的路径:
/hadoop_user_path/.sparkStaging/spark_applicationId/myFile.json
我当然可以在哪里阅读它,但我找不到从任何配置/SparkEnv 对象获取此路径的方法。在 spark 代码中硬编码 .sparkStaging 就像一个坏主意。
为什么简单:
val jsonStringData = spark.textFile(myFileName)
sqlContext.read.json(jsonStringData)
无法读取通过 --files 传递的文件并抛出 FileNotFoundException?为什么 spark 只在 hadoop_user_folder 中查找文件?
我现在可行的解决方案:
在运行 spark 之前,我将文件复制到正确的 hdfs 文件夹,将文件名作为 Spark 参数传递,从已知路径处理文件,并在作业完成后删除 hdfs 格式的文件。
我认为将文件作为 --files 传递会让我忘记保存和删除该文件。类似于 pass-process-andforget。
那么你如何读取通过 --files 传递的文件呢?唯一的解决方案是手动创建路径,硬编码“.sparkStaging”文件夹路径?
【问题讨论】:
标签: hadoop apache-spark hdfs hadoop-yarn