gpt4 book ai didi

hadoop - Hive - 对分区的查询不返回任何内容

转载 作者:可可西里 更新时间:2023-11-01 15:18:19 25 4
gpt4 key购买 nike

我有一个按特定开始日期 (ds) 分区的表。我可以查询最新的分区(前一天的数据),它会很好地使用分区。

hive> select count(1) from vtc4 where ds='2012-11-01' ;
...garbage...
MapReduce Jobs Launched:
Job 0: Map: 1 Reduce: 1 Cumulative CPU: 6.43 sec HDFS Read: 46281957 HDFS Write: 7 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 430 msec
OK
151225
Time taken: 35.007 seconds

但是,当我尝试查询较早的分区时,hive 似乎可以很好地读取分区,但不会返回任何结果。

hive> select count(1) from vtc4 where ds='2012-10-31' ;
...garbage...
MapReduce Jobs Launched:
Job 0: Map: 1 Reduce: 1 Cumulative CPU: 7.64 sec HDFS Read: 37754168 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 7 seconds 640 msec
OK
0
Time taken: 29.07 seconds

但是,如果我告诉 hive 针对表本身内的日期字段运行查询,并且不使用分区,我会得到正确的结果。

hive> select count(1) from vtc4 where date_started >= "2012-10-31 00:00:00" and date_started < "2012-11-01 00:00:00" ;
...garbage...
MapReduce Jobs Launched:
Job 0: Map: 63 Reduce: 1 Cumulative CPU: 453.52 sec HDFS Read: 16420276606 HDFS Write: 7 SUCCESS
Total MapReduce CPU Time Spent: 7 minutes 33 seconds 520 msec
OK
123201
Time taken: 265.874 seconds

我在这里错过了什么?我正在运行 hadoop 1.03 和 hive 0.9。我是 hive/hadoop 的新手,所以我们将不胜感激。

谢谢。

编辑 1: hive> 描述格式化的 vtc4 分区 (ds='2012-10-31');

Partition Value:        [2012-10-31 ]
Database: default
Table: vtc4
CreateTime: Wed Oct 31 12:02:24 PDT 2012
LastAccessTime: UNKNOWN
Protect Mode: None
Location: hdfs://hadoop5.internal/user/hive/warehouse/vtc4/ds=2012-10-31
Partition Parameters:
transient_lastDdlTime 1351875579

# Storage Information
SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
serialization.format 1
Time taken: 0.191 seconds

分区文件夹存在,但是当我尝试在 hdfs://hadoop5.internal/user/hive/warehouse/vtc4/ds=2012-10-31 上执行 hadoop fs -ls 时,它说文件/目录确实不存在。如果我使用 Web 界面浏览到该目录,我可以进入该文件夹,以及查看/part-m-000* 文件。如果我在 hdfs://hadoop5.internal/user/hive/warehouse/vtc4/ds=2012-11-01 上执行 fs -ls 它工作正常。

最佳答案

似乎要么是权限问题,要么是与配置单元或名称节点的元数据有关的时髦问题。这是我会尝试的:

  1. 将该分区中的数据复制到 hdfs 中的其他位置。您可能需要以 hive 或 hdfs 用户身份执行此操作,具体取决于您的权限设置方式。
  2. alter table vtc4 drop partition (ds='2012-10-31');
  3. alter table vtc4 add partition (ds='2012-10-31');
  4. 将数据复制回 hdfs 上的那个分区

关于hadoop - Hive - 对分区的查询不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201472/

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