gpt4 book ai didi

hadoop - 从 MapReduce 作业向 Hive 添加分区

转载 作者:可可西里 更新时间:2023-11-01 14:26:14 26 4
gpt4 key购买 nike

我是 Hive 和 MapReduce 的新手,非常感谢您的回答并提供正确的方法。

我在 hive 中定义了一个外部表 logs,在日期和源服务器上分区,外部位置在 hdfs /data/logs/ 上。我有一个 MapReduce 作业,它获取这些日志文件并将它们拆分并存储在上述文件夹下。喜欢

"/data/logs/dt=2012-10-01/server01/"
"/data/logs/dt=2012-10-01/server02/"
...
...

在 MapReduce 作业中,我想将分区添加到 Hive 中的表日志中。我知道这两种方法

  1. alter table 命令 -- 太多的 alter table 命令
  2. 添加动态分区

对于方法二,我只看到 INSERT OVERWRITE 的示例,这对我来说不是一个选项。有没有办法在作业结束后将这些新分区添加到表中?

最佳答案

要在 Map/Reduce 作业中执行此操作,我建议使用 Apache HCatalog,它是 Hadoop 下的一个新项目。

HCatalog 实际上是 HDFS 之上的一个抽象层,因此您可以以标准化的方式编写输出,无论是来自 Hive、Pig 还是 M/R。这对您来说很重要,您可以使用输出格式 HCatOutputFormat 从您的 Map/Reduce 作业直接加载 Hive 中的数据。以下是取自 the official website 的示例.

为 (a=1,b=1) 写出特定分区的当前代码示例如下所示:

Map<String, String> partitionValues = new HashMap<String, String>();
partitionValues.put("a", "1");
partitionValues.put("b", "1");
HCatTableInfo info = HCatTableInfo.getOutputTableInfo(dbName, tblName, partitionValues);
HCatOutputFormat.setOutput(job, info);

要写入多个分区,必须针对上述各项启动单独的作业。

您还可以将动态分区与 HCatalog 一起使用,在这种情况下,您可以在同一作业中加载任意数量的分区!

我建议进一步阅读上面提供的网站上的 HCatalog,如果需要,它应该会为您提供更多详细信息。

关于hadoop - 从 MapReduce 作业向 Hive 添加分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14286256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com