如何通过类org.apache.hadoop.conf.Configuration在java客户端中设置hadoop dfs.replication或以其他方式?

时间:2013-02-12 07:32:15

标签: hadoop

如何通过类org.apache.hadoop.conf.Configuration在java客户端中设置hadoop dfs.replication或以其他方式?

我使用java Api作为客户端上传文件,但它总是将dfs.replication设置为3,因此当我使用命令(hadoop dfsadmin -report)检查情况时,所有块都在复制因子下,因为我只有两个数据节点要测试。

我只是想知道如何通过类org.apache.hadoop.conf.Configuration在java客户端中设置hadoop dfs.replication或以其他方式?  谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

我相信复制不是由客户端连接配置设置,而是由集群配置(???)设置。不确定是否有办法配置特定于文件的复制,这是我认为您要问的问题

顺便说一下,有多少百分比的块未被复制?你能提供dfs admin -report命令的输出吗?那会很有帮助

答案 1 :(得分:0)

您可以在终端输入此命令,以单独设置文件的复制因子。

  

hadoop fs -D dfs.replication = 3 -copyFromLocal file.txt / user / myFolder

至于hadoop本身将要处理的复制不足,你会发现复制不足的块数不断变化。

对于使用复制因子编写文件的JAVA API,请参阅以下代码:

 public class Write{
        public static void main(String[] args) throws IOException {
        Path pt = new Path("hdfspath:/user/abc");
        FileSystem fs = FileSystem.get(new Configuration());
        BufferedWriter br = new BufferedWriter(new OutputStreamWriter(
                fs.create(pt, true)));
        // TO append data to a file, use fs.append(Path f)
        fs.setReplication(new Path("hdfspath:/user/abc"), (short)3);
        String line;
        line = "This is Written to the File";
        System.out.println(line);
        br.write(line);
        br.close();

    }
    }

请检查语法,因为我刚刚输入了代码。