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,希望对改为有用

  • 相关阅读:
    IDEA在编辑时提示could not autowire
    python基础——使用__slots__
    python基础——实例属性和类属性
    python基础——继承和多态
    python基础——访问限制
    python基础——面向对象编程
    python基础——第三方模块
    python基础——使用模块
    python基础——模块
    Python tkinter调整元件在窗口中的位置与几何布局管理
  • 原文地址:https://www.cnblogs.com/ljysy/p/9720266.html
Copyright © 2011-2022 走看看