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

  • 相关阅读:
    机器学习
    Python
    sublime的推荐插件
    C语言编程
    将生成logo图片导入到Altium Designer中
    基于MDK的stm32实践过程中,debug的总结
    LCD12864使用总结
    c语言使用技巧
    LCD12864显示中文乱码
    在Keil中做stm32的软件仿真,查看输出PWM波形时,在逻辑分析仪中规定IO口signal,出现"unknow signal"
  • 原文地址:https://www.cnblogs.com/ljysy/p/9720266.html
Copyright © 2011-2022 走看看