2

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

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

4

2 回答 2

1

IF 文件已经通过 3 块复制复制到 HDFS,您可以使用 setReplication API 以及您的文件 src 和预期复制计数来设置特定于您的文件的复制,如下所示:

FileSystem fs = FileSystem.get(new Configuration());
fs.setReplication(new Path("hdfs_path:/foldername/filename"), (short)2);

此处描述了 setReplication API :public boolean setReplication(Path src, short replication)

此外,如果要复制具有 2 个块复制因子的文件,您可以直接在命令中传递复制计数,如下所示:

hadoop fs -D dfs.replication=2 YOUR_COMMANDS
于 2013-03-27T23:00:51.850 回答
0

根据Hadoop FileSystem 类的 Java API,您可以在创建输出流以将文件写入集群时指定文件的复制因子。例如

create(Path f, short replication) 

我目前无法在本地测试它,因为我这里只有一个 Zookeeper 节点运行。

于 2013-03-27T13:57:38.123 回答