今天在学习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,希望对改为有用

java程序向hdfs中追加数据,异常以及解决方案的更多相关文章

  1. java jxl 向Excel中追加数据而不覆盖原来数据的例子

    向先原来就有数据的Excel写数据是不会覆盖原有的数据,只是在追加数据. public class Excel {     public Excel() {     }     public void ...

  2. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    前言 我们知道HDFS集群中,所有的文件都是存放在DN的数据块中的.那我们该怎么去查看数据块的相关属性的呢?这就是我今天分享的内容了 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 我 ...

  3. Sqoop2 将hdfs中的数据导出到MySQL

    1.进入sqoop2终端: [root@master /]# sqoop2 2.为客户端配置服务器: sqoop:000> set server --host master --port 120 ...

  4. Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)

    在xmanager中的xshell运行进入图形化界面 sh spoon.sh 新建一个job

  5. hbase使用MapReduce操作4(实现将 HDFS 中的数据写入到 HBase 表中)

    实现将 HDFS 中的数据写入到 HBase 表中 Runner类 package com.yjsj.hbase_mr2; import com.yjsj.hbase_mr2.ReadFruitFro ...

  6. Java程序在内存中运行详解

    目录 Java程序在内存中运行详解 一.JVM的内存分布 二.程序执行的过程 三.只有一个对象时的内存图 四.两个对象使用同一个方法的内存图 五.两个引用指向同一个对象的内存图 六.使用对象类型作为方 ...

  7. NOPI读取模板导出(Excel中追加数据)

    在Controller里,我们定义一个FileResult的Action,返回值是一个文件形式被浏览器下载下来. [HttpGet] public FileResult ExportProductLi ...

  8. 向HDFS中追加内容

    向生成好的hdfs文件中追加内容,但是线上使用的版本是1.0.3,查看官方文档发现,在1.0.4版本以后才支持文件append 以下是向hdfs中追加信息的操作方法 如果你只在某一个driver中追加 ...

  9. HDFS中的数据块(Block)

    我们在分布式存储原理总结中了解了分布式存储的三大特点: 数据分块,分布式的存储在多台机器上 数据块冗余存储在多台机器以提高数据块的高可用性 遵从主/从(master/slave)结构的分布式存储集群 ...

随机推荐

  1. Going Home(最小费用最大流)

    Going Home http://poj.org/problem?id=2195 Time Limit: 1000MS   Memory Limit: 65536K Total Submission ...

  2. wcf将一个服务同时绑定到http和tcp的写法

    服务器端:<?xml version="1.0" encoding="utf-8" ?><configuration>  <con ...

  3. 数据挖掘中ID3算法实现zz

    id3 function D = ID3(train_features, train_targets, params, region) % Classify using Quinlan's ID3 a ...

  4. tpshop使用中遇到的问题

    1.短信配置里:商家发货时是否给客户发短信  配置了 开启   如果购买者个人资料里的电话没填写,商家点击发货时, 程序会挂掉 解决方法:修改application\common\logic\SmsL ...

  5. 让UITableView的Cell都变成静态的

    UITableView给我们提供了一个非常不错的展示列表的工具.内置了复用机制,其中的Cell按照一般的写法就可以实现服用,不用在Cell滚动的时候每次都创建一个新的.实现了非常好的用户体验.但是,有 ...

  6. vc 使窗口置顶 在最前面

    bool SetWindowTop(CWnd* pWnd){ if(!pWnd) {   return false; } if(pWnd->GetExStyle()&WS_EX_TOPM ...

  7. java并发编程实战:第六章----任务执行

    任务:通常是一些抽象的且离散的工作单元.大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一.在线程中执行任务 任务的独立性 ...

  8. 23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder

    23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder 2016-07-21 (www.cnblogs.com/icmzn) 模式理解

  9. 团队博客第三周(Running Duck队)

    代码链接:Tetris 码云链接 一.需求&原型改进 1.原型改进 汉字方块每次可生成一个并逐渐下落 可通过触摸左右下滑动实现方块的左右移动和快速下滑 左上角按钮可对汉字进行暂时保存和替换 右 ...

  10. XXX 不是当前用户的有效责任,请联系您的系统管理员

    EBS中,有时进入一些基于OA Framework 的Web页面时,会出现这种现象: XXX  不是当前用户的有效责任,请联系您的系统管理员 ( or: xxx is not a valid resp ...