我使用java Api作为客户端上传文件,但它总是设置dfs.replication
为3,结果当我使用命令(hadoop dfsadmin -report)检查情况时,所有块都在复制因子下,因为我只有两个数据节点进行测试。
我只想知道如何按类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?谢谢您的帮助!
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
根据Hadoop FileSystem 类的 Java API,您可以在创建输出流以将文件写入集群时指定文件的复制因子。例如
create(Path f, short replication)
我目前无法在本地测试它,因为我这里只有一个 Zookeeper 节点运行。