配置单元将文件加载到表副本

rlcwz9us  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(309)

我已经在上面安装了hadoop完全分布式集群和apache配置单元。我正在从java代码向配置单元表加载数据。hdfs-site.xml中的复制因子是2。当我将文件从 hadoop fs -put ,文件显示为复制两次。但是加载到配置单元表中的文件显示为有3个副本。
是否要为配置单元加载的文件设置任何不同的复制参数?

lc8prwob

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中只有一个文件副本。

wgx48brx

wgx48brx2#

要在将表加载到配置单元时设置表的复制因子,需要在配置单元客户端上设置以下属性。

SET dfs.replication=2;
LOAD DATA LOCAL ......;

相关问题