我试着用hadoopapi加载文件作为实验。
我想将复制设置为最小值,因为这是用于实验的。我第一次用这个 FileSystem.setReplication()
:
Configuration config = new Configuration();
config.set("fs.defaultFS","hdfs://192.168.248.166:8020");
FileSystem dfs2 = FileSystem.get(config);
Path src2 = new Path("C:\\Users\\abc\\Desktop\\testfile.txt");
Path dst2 = new Path(dfs2.getWorkingDirectory()+"/tempdir");
dfs2.copyFromLocalFile(src2, dst2);
dfs2.setReplication(dst2, (short)1); /**setting replication**/
副本显示为1,但在3个数据节点上可用。
当我试着 Configuration.set()
:
Configuration config = new Configuration();
config.set("fs.defaultFS","hdfs://192.168.248.166:8020");
config.set("dfs.replication", "1"); /**setting replication**/
FileSystem dfs2 = FileSystem.get(config);
Path src2 = new Path("C:\\Users\\abc\\Desktop\\testfile.txt");
Path dst2 = new Path(dfs2.getWorkingDirectory()+"/tempdir");
这提供了所需的结果(1个数据节点上有1个副本可用)
为什么同一件事有两个api?这两者有什么区别?
1条答案
按热度按时间mhd8tkvw1#
不同的是
Filesystem
的setreplication()设置hdfs上现有文件的复制。在您的情况下,首先复制本地文件testFile.txt
到hdfs,使用默认复制因子(3),然后将此文件的复制因子更改为1。执行此命令后,需要一段时间才能删除过度复制的块((来源)另一方面,当你使用
config.set("dfs.replication", "1");
命令来设置复制,您可以在之后复制本地文件,这样它的块只复制一次,从第一次开始。换句话说,我相信(但我可能错了)两个命令都有相同的最终结果,但是您必须等待一点,直到第一个命令被执行。