xiaolin_wxl
xiaolin_wxl
采纳率83.3%
2018-09-11 10:53 阅读 1.7k
已采纳

关于spark离线程序读写本地文件的问题

80

我目前在学着写spark离线程序,用Java写的
目前我要做的是:在java代码里读取服务器上的/root/config.properties配置文件,
然后我处理完之后会生成一个文件file.txt,我希望将这个file.txt也放到该服务器的特定目录下。
目前我读取配置文件的做法是:先将config.properties上传到hdfs,
然后java代码中写prop.load("hdfs:///root/config.properties");
这样是可以达到效果的,但事实上我不可能每次都手动将配置文件放一下hdfs。
生成的文件在哪目前我还没测试。。。
请大佬指点下这个需要怎么做。包括java代码里和sh脚本里。谢谢。
大佬给代码的时候请详细点,因为不会,能顺带加点注释就最好了。
我测试能用的话保证立马采纳。
环境是jdk1.8和spark2.2,linux系统

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    chanyue123 silentct 2018-09-12 07:34

    读取数据文件的接口不是有SparkContext的textFile么,读取本地文件只是需要指明file://即可(但是要保证所有节点本地上都有该文件,路径一致),
    所以一般不会去读取本地的数据文件,而是读取hdfs文件。对于你说的是不是想要加载自己的配置文件,一种是直接打包到jar中去,一种是加载
    本地配置文件的话,可以使用SparkContext的addFile接口,然后获取时使用SparkFiles.get()接口即可获取到

    点赞 评论 复制链接分享
  • weixin_37893887 玄尺 2018-09-11 11:09

    首先我来理解一下你的目的:
    你现在是有一份properties格式的配置文件,在项目启动的时候你需要加载这份文件,当前你把这份配置文件放在了hdfs上。最终结果也是一个文件,你当前也存在hdfs上。
    你的问题是properties文件放在哪里更为合适。
    我推荐的做法:
    1、像properties文件直接放在项目中,不要把配置文件放在其他地方,除非该文件有特殊需求(比如安全)或者框架需要或者动态配置
    2、这样你可以在代码中直接访问到这个配置文件
    2.1 如果你的项目是基于spring框架,你可以:

     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="locations"> 
            <list> 
                <value>classpath:system.properties</value> 
            </list> 
        </property> 
    </bean>
    

    2.2 如果只是一般工程,你可以:

     <dependency>
        <groupId>commons-configuration</groupId>
         <artifactId>commons-configuration</artifactId>
         <version>1.10</version>
    </dependency>
    
     /**
     * 把配置文件读出来
     */
    private static void readBaseDir() {
         String file = Resources.getResource("conf.properties").getFile();
         try {
             PropertiesConfiguration configuration = new PropertiesConfiguration(file);
             TEMP_FILE_DIR = configuration.getString("temp_file_dir");
         } catch (ConfigurationException e) {
             e.printStackTrace();
         }
     }
    

    类似这种方式:
    图片说明

    点赞 评论 复制链接分享
  • hu_belif huwao 2018-09-11 11:12

    可以同时提交作业的,没必要每次先手动放配置文件的。写好spark运行时的配置信息后,接着编写其他模块嘛,最后一同提交任务。因为我们每次想要做的
    操作不尽相同,每次可能都需要配置一下才能正常运行,不能一劳永逸的,您也是懒得话,自己写一个工具类吧。

    点赞 评论 复制链接分享
  • xiaolin_wxl xiaolin_wxl 2018-09-11 13:01

    简单点说我就是想知道spark程序里怎么读写linux系统里的文件

    点赞 评论 复制链接分享

相关推荐