从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件

Posted

技术标签:

【中文标题】从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件【英文标题】:Access files in resources directory in JAR from Apache Spark Streaming context 【发布时间】:2016-10-26 02:17:00 【问题描述】:

我有一个作为 Spark Streaming 作业编写的 Java 应用程序,它需要一些文本资源,这些资源已包含在资源目录的 jar 中(使用默认的 Maven 目录结构)。通过单元测试,我可以毫无问题地访问这些文件,但是当我使用 spark-submit 运行我的程序时,我得到了 FileNotFoundException。使用 spark-submit 运行时,如何访问 JAR 中类路径上的文件?

我目前用来访问我的文件的代码大致如下:

    InputStream input;

    try 
        URL url = this.getClass().getClassLoader().getResource("my file");
        if (url == null) 
            throw new IOException("file does not exist");
        
        String path = url.getPath();
        input = new FileInputStream(path);
     catch(IOException e) 
        throw new RuntimeException(e);
    

谢谢。

请注意,这不是 Reading a resource file from within jar(建议的)的副本,因为此代码在本地运行时有效。只有在 Spark 集群中运行时才会失败。

【问题讨论】:

这与 Spark 或 Streaming 无关,这是纯 java 代码。 ***.com/questions/20389255/…的可能重复 没有。以上在正常运行时有效。使用 spark-submit 运行时失败。因此,引发问题。 【参考方案1】:

我通过以不同的方式(并且明显不那么愚蠢)访问资源目录来解决此问题:

input = MyClass.class.getResourceAsStream("/my file");

【讨论】:

我也有同样的问题。 Settings 类来自哪里以及如何提取文件路径(发送到构建 sparkContext 的 newAPIHadoopFile)? 啊,我应该更清楚。设置只是我使用的类。将其替换为您正在编写代码的任何类。编辑答案以使其更清楚。

以上是关于从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件的主要内容,如果未能解决你的问题,请参考以下文章

从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进

spark streaming kafka example

从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进 | 技术头条

Spark Streaming基于案例详解

Spark Streaming

对象 kafka010 不是包 org.apache.spark.streaming 的成员