我使用java Api作为客户端上传文件,但它始终将dfs.replication
设置为3,因此当我使用命令(hadoop dfsadmin -report)检查情况时,所有块都处于复制状态因素,因为我只有两个数据节点要测试。
我只是想知道如何通过类org.apache.hadoop.conf.Configuration
或其他方式在java客户端中设置hadoop dfs.replication?谢谢你的帮助!
答案 0 :(得分: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描述为here: public boolean setReplication(Path src,short replication)
此外,如果要复制具有2个块复制因子的文件,您可以直接在命令中传递复制计数,如下所示:
hadoop fs -D dfs.replication=2 YOUR_COMMANDS
答案 1 :(得分:0)
根据Java API for the Hadoop FileSystem class,您可以在创建输出流以将文件写入群集时指定文件的复制因子。例如。
create(Path f, short replication)
我目前无法在本地测试,因为我只在这里运行Zookeeper节点。