当前位置: 首页 > 知识库问答 >
问题:

Impala 2.7无法读取由Hive和Tez创建的拼花地板表中的任何数据

齐志勇
2023-03-14

我正在使用一个使用大量union all运算符的查询填充拼花地板存储格式的分区配置单元表。查询是使用Tez执行的,默认设置会导致多个并发Tez编写器创建HDFS结构,其中拼花文件位于分区文件夹下的子文件夹中(文件夹名为Tez编写器ID)。例如/应用程序/蜂巢/仓库/划痕。db/test_table/part=p1/8/000000_0

即使在使元数据无效并收集表上的统计数据之后,Impala在查询表时也会返回零行。问题似乎在于Impala没有遍历分区子文件夹来查找拼花文件。

如果我将hive.merge.tezfiles设置为true(默认情况下为false),有效地迫使Tez使用额外的处理步骤将多个文件合并为一个,结果拼花文件直接写入分区文件夹下,刷新后Impala可以在新建或更新分区。

我想知道Impala是否有一个配置选项来指示它查看分区子文件夹,或者可能有一个Impala的补丁来改变它在这方面的行为。

共有1个答案

夏奕
2023-03-14

到目前为止,Impala不支持从表位置下的子目录递归读取文件。示例:如果使用位置“/home/data/input/”创建表

如果目录结构如下所示:

    /home/data/input/a.txt
    /home/data/input/b.txt
    /home/data/input/subdir1/x.txt
    /home/data/input/subdir2/y.txt

然后Impala可以查询从以下文件只

/home/data/input/a.txt/home/data/input/b.txt

不查询以下文件

  /home/data/input/subdir1/x.txt
    /home/data/input/subdir2/y.txt

作为替代解决方案,您可以从配置单元读取数据并插入到最终的配置单元表中。

在此表顶部创建一个Impala视图,用于交互式或报告查询。

您可以使用下面的配置设置在Hive中设置此功能。

Hive支持带有选项的子目录扫描

SET mapred。输入迪尔。递归=真

设置蜂箱。映射。支持。子目录=true

 类似资料:
  • 我们正在寻找一种解决方案,以便创建一个外部配置单元表,根据parquet/avro模式从parquet文件中读取数据。 换句话说,如何从拼花/avro模式生成hive表? 谢谢:)

  • 我在分布式模式下仅在数据极顶部运行Drill 1.15(3个节点,每个节点有32GB内存)。我正在尝试读取HDF中Spark作业生成的拼花文件。 生成的文件正在spark中读取,很好,但在Drill中读取时,除了少数列之外,它似乎对其他列不起作用。 组织。阿帕奇。训练常见的例外。UserRemoteException:数据读取错误:从磁盘读取时发生异常。文件:[文件名]。拼花地板列:行组开始:11

  • 我是大数据生态系统的新手,有点起步。 我读过几篇关于使用spark流媒体阅读Kafka主题的文章,但我想知道是否可以使用spark作业而不是流媒体阅读Kafka主题?如果是的话,你们能帮我指出一些可以让我开始学习的文章或代码片段吗。 问题的第二部分是以拼花格式向hdfs写信。一旦我读了Kafka的书,我想我会有一个rdd。将此rdd转换为数据帧,然后将数据帧写入拼花文件。这是正确的方法吗。 感谢您

  • 我正在从Impala迁移到SparkSQL,使用以下代码读取一个表: 我如何调用上面的SparkSQL,这样它就可以返回这样的东西:

  • 我正在使用Spark 1.6.0。以及用于读取分区拼花数据的DataFrame API。 我想知道将使用多少个分区。 以下是我的一些数据: 2182个文件 Spark似乎使用了2182个分区,因为当我执行计数时,作业被拆分为2182个任务。 这似乎得到了的证实 对吗?在所有情况下? 如果是,数据量是否过高(即我是否应该使用df重新分区来减少数据量)?

  • 我遇到了一个问题,无法在Hive中读取由Spark生成的分区拼花文件。我可以在hive中创建外部表,但是当我尝试选择几行时,hive只返回一个“OK”消息,没有行。 我能够在Spark中正确读取分区的拼花文件,所以我假设它们是正确生成的。当我在hive中创建外部表而不进行分区时,我也能够读取这些文件。 null 我的Spark配置文件有以下参数(/etc/Spark/conf.dist/spark