Hive 将文件加载到 table 个副本

Hive load file to table replicas

我已经在上面安装了 Hadoop 完全分布式集群和 Apache Hive。我正在将数据从 Java 代码加载到配置单元表。 hdfs-site.xml 中的复制因子是 2。当我将文件从 hadoop fs -put 复制到 HDFS 时,文件显示被复制了两次。但是加载到配置单元表中的文件显示为具有 3 个副本。

是否为配置单元加载的文件设置了任何不同的复制参数?

要在加载到 HIVE 时设置 table 的复制因子,您需要在 Hive 客户端上设置以下 属性。

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

我终于找到了这种行为的原因。

在将文件加载到 table 之前,我曾经使用以下命令将文件从本地计算机复制到 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中只有一份文件。