【问题标题】:Hive create table with inputs from nested sub-directoriesHive 使用来自嵌套子目录的输入创建表
【发布时间】:2014-08-17 18:09:23
【问题描述】:

我在 HDFS 中的文件路径中有 Avro 格式的数据,例如:/data/logs/[foldername]/[filename].avro。我想在所有这些日志文件上创建一个 Hive 表,即/data/logs/*/* 形式的所有文件。 (它们都基于相同的 Avro 架构。)

我正在使用标志 mapred.input.dir.recursive=true 运行以下查询:

CREATE EXTERNAL TABLE default.testtable
  ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
  STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
  OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
  LOCATION 'hdfs://.../data/*/*'
  TBLPROPERTIES (
    'avro.schema.url'='hdfs://.../schema.avsc') 

除非我将 LOCATION 更改为更少嵌套,否则表格最终为空,即具有特定文件夹名称的 'hdfs://.../data/[foldername]/'。这对LOCATION 的嵌套路径较少,没有问题。

我希望能够从所有这些不同的 [文件夹名称] 文件夹中获取数据。 如何使递归输入选择在我的嵌套目录中走得更远?

【问题讨论】:

    标签: hadoop hive avro create-table hive-configuration


    【解决方案1】:

    使用此 Hive 设置启用递归目录:

    set hive.mapred.supports.subdirectories=TRUE;
    set mapred.input.dir.recursive=TRUE;
    

    创建外部表并指定根目录为位置:

    LOCATION 'hdfs://.../data'
    

    您将能够从表位置和所有子目录中查询数据

    【讨论】:

    • hive.input.dir.recursive? hive.supports.subdirectories?看来你是从其他(错误的)答案中复制过来的。我建议做一些研究和测试
    • @Dudu Markovitz。我已经在 Hive 1.2.1 上对此进行了测试。这很好用。 Hive 支持子目录。也许并非所有这些设置都是必需的,但这对我有用。
    • 这不仅仅是不必要的参数,这使得这个答案本身很糟糕,它是不存在的参数。此外,当hive.conf.validation 设置为 true(默认值)时,使用不存在的参数会引发异常,因为 Hive 0.14。 issues.apache.org/jira/browse/HIVE-7211
    • 可能我的 Hive 配置中没有这个 hive.conf.validation 设置。我在 AWS 上测试了 1.2.1。感谢指点我这个参数,我会检查我的配置。
    【解决方案2】:

    可以解决您的问题的一件事是将文件夹名称作为分区列添加到外部表中。然后,您可以像在数据目录上创建表一样创建表。 或者,您可以将这些嵌套文件合并到一个目录中。

    我认为您不能要求 hive 将所有这些文件夹的输入视为 1 个表格。

    这个问题似乎正在解决类似的问题: when creating an external table in hive can I point the location to specific files in a direcotry?

    在同一上下文中有一个未解决的 jira 问题: https://issues.apache.org/jira/browse/HIVE-951

    浏览更多 我看到这篇文章建议您使用 SimlinkInputTextFormat 作为替代方案。我不确定这对你的 Avro 格式会有多好。 https://hive.apache.org/javadocs/r0.10.0/api/org/apache/hadoop/hive/ql/io/SymlinkTextInputFormat.html

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 2017-10-28
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多