我已经在上面安装了hadoop完全分布式集群和apache配置单元。我正在从java代码向配置单元表加载数据。hdfs-site.xml中的复制因子是2。当我将文件从 hadoop fs -put ,文件显示为复制两次。但是加载到配置单元表中的文件显示为有3个副本。是否要为配置单元加载的文件设置任何不同的复制参数?
hadoop fs -put
lc8prwob1#
我终于找到了这种行为的原因。在将文件加载到表中之前,我使用以下方法将文件从本地计算机复制到hdfs:
Configuration config = new Configuration(); config.set("fs.defaultFS","hdfs://mycluster:8020"); FileSystem dfs = FileSystem.get(config); Path src = new Path("D:\\testfile.txt"); Path dst = new Path(dfs.getWorkingDirectory()+"/testffileinHDFS.txt"); dfs.copyFromLocalFile(src, dst);
默认情况下,api copyfromlocalfile()用于保留3个副本(即使我在hdfs-site.xml中将复制因子保留为2)。但我不知道这种行为的原因)。现在在代码中显式指定复制因子如下:
Configuration config = new Configuration(); config.set("fs.defaultFS","hdfs://mycluster:8020"); config.set("dfs.replication", "1"); /**Replication factor specified here**/ FileSystem dfs = FileSystem.get(config); Path src = new Path("D:\\testfile.txt"); Path dst = new Path(dfs.getWorkingDirectory()+"/testffileinHDFS.txt"); dfs.copyFromLocalFile(src, dst);
现在hdfs中只有一个文件副本。
wgx48brx2#
要在将表加载到配置单元时设置表的复制因子,需要在配置单元客户端上设置以下属性。
SET dfs.replication=2; LOAD DATA LOCAL ......;
2条答案
按热度按时间lc8prwob1#
我终于找到了这种行为的原因。
在将文件加载到表中之前,我使用以下方法将文件从本地计算机复制到hdfs:
默认情况下,api copyfromlocalfile()用于保留3个副本(即使我在hdfs-site.xml中将复制因子保留为2)。但我不知道这种行为的原因)。
现在在代码中显式指定复制因子如下:
现在hdfs中只有一个文件副本。
wgx48brx2#
要在将表加载到配置单元时设置表的复制因子,需要在配置单元客户端上设置以下属性。