【问题标题】:Hive load file to table replicasHive 将文件加载到表副本
【发布时间】:2015-07-28 11:00:18
【问题描述】:

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

是否为 Hive 加载的文件设置任何不同的复制参数?

【问题讨论】:

  • 能否检查集群中其他文件的复制情况。

标签: hadoop hive hdfs


【解决方案1】:

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

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

【讨论】:

  • 我正在从 Eclipse 加载数据。这个语句应该在哪里运行?在 eclipse 中还是在 Hive CLI 中?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2023-03-19
    相关资源
    最近更新 更多