zoukankan      html  css  js  c++  java
  • java程序向hdfs中追加数据,异常以及解决方案

    今天在学习hdfs时,遇到问题,就是在向hdfs中追加数据总是报错,在经过好几个小时的努力之下终于将他搞定

    解决方案如下:在hadoop的hdfs-sit.xml中添加一下三项

    1. <property>  
      <name>dfs.support.append</name>  
      <value>true</value>  
      </property>

      注:hdfs默认是不支持追加数据的

    2. <property>
        <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
        <value>NEVER</value>
      </property>
    3. <property>  
      <name>dfs.client.block.write.replace-datanode-on-failure</name>  
      <value>true</value>  
      </property>

      因为我是从window本地的eclipse传文件上去,所以还要再java程序中声明一下以上三个配置项

              本人代码如下:

    @Test
        public void updateload() throws IOException,  Exception {
            System.setProperty("hadoop.home.dir", "D:\hadoop-2.4.1");
            //配置文件
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://192.168.252.200:9000/");
            conf.setBoolean("dfs.support.append", true);
            conf.setBoolean("dfs.client.block.write.replace-datanode-on-failure", true);
            conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
            //首先要拿到客户端的对象
            FileSystem fs = FileSystem.get(new URI("hdfs://192.168.252.200:9000/"), conf, "hadoop");
            //hdfs上的路径
            Path dst = new Path("hdfs://192.168.252.200:9000/aa/f.txt");
            //设置元数据的地址        
            FileInputStream is = new FileInputStream("d:/a.txt");
            //判断目的文件是否存在
            if(fs.exists(dst)) {
                System.out.println("路径已存在");
                FSDataOutputStream os = fs.append(dst);
                //上传文件
                IOUtils.copy(is, os);
                os.close();
                is.close();
                fs.close();
            }else {
                //打开输出流,向hdfs上输出
                FSDataOutputStream os = fs.create(dst);    
                //上传文件
                IOUtils.copy(is, os);
                os.close();
                is.close();
                fs.close();
            }
            
        }

    本人用用的hadoop版本是2.4.1,希望对改为有用

  • 相关阅读:
    makefile编写---单个子目录编译自动变量模板ok
    任务22:课程介绍 & 任务23:Http请求的处理过程
    任务20:DI初始化的源码解读 & 任务21:依赖注入的使用
    任务19:单元测试
    任务18:控制反转
    任务17:从UML角度来理解依赖
    任务16:介绍-
    任务15:配置框架设计浅析
    任务14:配置的热更新
    任务13:在Core Mvc中使用Options
  • 原文地址:https://www.cnblogs.com/ljysy/p/9720266.html
Copyright © 2011-2022 走看看