Java 实现追加写入HDFS

原创
2017/04/24 17:31
阅读数 5K
  • 先要进行写入的配置:
  private static Configuration conf = new Configuration();

    static {
        conf.setBoolean("dfs.support.append", true);
        conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
        conf.setBoolean("dfs.client.block.write.replace-datanode-on-failure.enable", true);
    }

这些配置事固定的,第一个很容易理解,第二个和第三个,顾名思义替换数据节点datanode,如果不这样设置写入文件会报错。具体错误不在此罗列,有兴趣的可以不设置看一下

  • 创建追加写入的方法
     /**
         * json 存储
         *
         * @param
         * @param
         * @throws IOException
         */
        public static void write2hdfs(Object listContent, String filePath) throws IOException {
            ObjectMapper objectMapper = new ObjectMapper();
            FileSystem fs = null;
            Path path = new Path(filePath);
            FSDataOutputStream output = null;
            fs = path.getFileSystem(conf);
    //如果此文件不存在则创建新文件
            if (!fs.exists(path)) {
                fs.createNewFile(path);
            }
            output = fs.append(new Path(filePath));
            System.out.println(listContent.toString());
            output.write(objectMapper.writeValueAsString(listContent).getBytes("UTF-8"));
            output.write("\n".getBytes("UTF-8"));//换行
            fs.close();
            output.close();
        }
    

    由于起先的需求是要以一种文本格式写入hdfs,文本格式自己的规格,考虑到json格式的通用性,所以这里采用Jackson去处理数据封装成json格式的数据,你也可以创建自己的实体,规定实体各个字段写入hdfs的格式

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部