【问题标题】:How Hive reads data even after dropping from hdfs?即使从 hdfs 删除后,Hive 如何读取数据?
【发布时间】:2016-08-31 15:19:16
【问题描述】:

我在 hive 中有一个外部表并指向 HDFS 位置。我错误地运行了两次将数据加载到 HDFS 中的工作。

即使从 HDFS 配置单元中删除重复文件后,仍会显示两次数据计数(即包括已删除的重复数据文件计数)。

select count(*) from tbl_name -- 返回双倍时间

但是,

select count(col_name) from tbl_name -- 返回实际计数。

之后我从 Impala 尝试时的同一张桌子

无效元数据

我只能看到 HDFS 中可用的数据计数(不重复)。

即使从物理位置(hdfs)删除后,hive 如何将计数设为两倍,它是否从统计数据中读取?

【问题讨论】:

  • 这很有趣。我在 Hive 中从未发生过这种情况,但我会在我的系统中尝试一下,看看会发生什么。
  • 是的,我没有这个问题。我拿了一张外部表格,里面只有一个 csv 文件。然后复制该文件,因此 HDFS 目录中有两个文件,并且计数显示为两倍。然后删除复制的文件,计数恢复正常。
  • 似乎同类型的线程不确定解决方案,stackoverflow.com/questions/24080276/…,我没有任何统计专用数据库,这是否有意义。
  • 很奇怪,Hive CLI 返回正确的 count ,但是 Hue 返回错误的 count(*)
  • 仅供参考 - 我正在通过 Hue 运行查询。

标签: hadoop hive hdfs impala


【解决方案1】:

Hive 正在使用统计信息来计算 cont(*)。您手动删除了文件(不使用 Hive),这就是统计信息错误的原因。

解决办法是:

  1. 在这种情况下关闭统计信息的使用:

    设置 hive.compute.query.using.stats=false;

  2. 分析您在评论中提到的表格:

    分析表tbl_name partition(a,b,c)计算统计;

【讨论】:

  • 是的,它看起来像配置设置设置 hive.compute.query.using.stats=false;在我的环境中被设置为默认值,这就是我没有问题的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2017-12-19
  • 2019-11-30
  • 2018-12-26
  • 2017-05-26
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多