1

如何通过类 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?谢谢您的帮助!

4

2 回答 2

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();

    }
    }

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

于 2013-02-13T08:37:10.400 回答
0

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

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

于 2013-02-12T07:42:26.220 回答