分享

通过eclipse中的Java API上传至集群为什么replication默认3份,该如何设置

pig2 2014-3-8 12:16:21 发表于 问题解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 13035
本帖最后由 pig2 于 2014-3-9 00:13 编辑
可以带着下面问题来阅读:
1.使用Java api上传文件,如何正确设置?
思考与扩展:
1.FSDataOutputStream的作用是什么?
2.FileSystem的作用是什么?
3. hdfs-site.xml 文件的作用是什么?


我们通过eclipse上传文件过程中,经常会遇到上传文件replication为3份,可是我们明明在配置文件中,设置为1份。这是什么原因。原来是Java api给我们做了手脚。下面给大家做一个实验。


解决办法1:不生效

代码如下:private static void put(FileSystem filesystem) throws IOException,
FileNotFoundException {
//创建文件
final FSDataOutputStream out = filesystem.create(new Path(File));
filesystem = FileSystem.get(new Configuration());
                //设置Replication为1份
filesystem.setReplication(new Path(File), (short)1);
final FileInputStream in = new FileInputStream("E:/about/upload.txt");


IOUtils.copyBytes(in, out, 2048, true);

}

根据上面代码,我们得到如下结果,我们看到replication为3份




解决办法2:

上面进行设置了,为什么不管用那。ok,我对对代码做一个很简单的改动:

private static void put(FileSystem filesystem) throws IOException,
FileNotFoundException {
//创建文件
final FSDataOutputStream out = filesystem.create(new Path(File), (short)1);//多一个参数
(short)1
filesystem = FileSystem.get(new Configuration());
             
final FileInputStream in = new FileInputStream("E:/about/upload.txt");


IOUtils.copyBytes(in, out, 2048, true);

}

得到如下结果:我们看到Replication为1了。



总结:
为什么配置文件没有生效,是因为在上传的过程中并没有读取xml文件,所以我们需要手工设置,那么对于第一种办法为什么会失效(        filesystem.setReplication(new Path(File), (short)1);),猜测是因为我们已经创建文件完毕,后面进行的设置失效了。对于第二种,
final FSDataOutputStream out = filesystem.create(new Path(File), (short)1);是在创建的时候,就已经指定










没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条