如何通过org.apache.hadoop.conf.Configuration类在java客户端中设置hadoop复制?

如何通过org.apache.hadoop.conf.Configuration类在java客户端中设置hadoop复制?,java,api,file-upload,replication,Java,Api,File Upload,Replication,我使用java Api作为客户端上载文件,但它总是将dfs.replication设置为3,因此当我使用命令(hadoop dfsadmin-report)检查情况时,所有块都处于复制因子下,因为我只有两个数据节点要测试 我只是想知道如何在java客户机中通过classorg.apache.hadoop.conf.Configuration或其他方式设置hadoop dfs.replication?谢谢你的帮助 根据,您可以在创建输出流以将文件写入集群时指定文件的复制因子。例如 create(P

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

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

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

create(Path f, short replication) 

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

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

FileSystem fs = FileSystem.get(new Configuration());
fs.setReplication(new Path("hdfs_path:/foldername/filename"), (short)2);
hadoop fs -D dfs.replication=2 YOUR_COMMANDS
setReplication API描述如下: 公共布尔集合复制(路径src,短复制)

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

FileSystem fs = FileSystem.get(new Configuration());
fs.setReplication(new Path("hdfs_path:/foldername/filename"), (short)2);
hadoop fs -D dfs.replication=2 YOUR_COMMANDS