2012-11-02 46 views
1

我有一個由特定開始日期(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> 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> 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。我對蜂巢/ hadoop很新,所以任何幫助,將不勝感激。

謝謝。

編輯1: 配置單元>描述格式化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 Hadoop的FS -ls://hadoop5.internal/user/hive/warehouse/vtc4/ds=2012-10-31它說文件/目錄不存在。如果我使用Web界面瀏覽該目錄,則可以進入該文件夾,以及查看/ part-m-000 *文件。如果我在hdfs://hadoop5.internal/user/hive/warehouse/vtc4/ds=2012-11-01上做了一個fs -ls,它可以正常工作。

+0

會發生什麼事,當你做'描述格式化分區VTC4(DS = '2012-10-31')'? hdfs上的位置是什麼,你在那裏看到哪些文件? –

+0

@Joe K我用你要求的信息更新了帖子。 – wafflecopter

回答

1

似乎是一個權限的東西,或者與蜂巢或namenode的元數據有點怪異。以下是我想嘗試的:

  1. 將該分區中的數據複製到hdfs中的其他位置。您可能需要將其作爲配置單元或hdfs用戶來執行,具體取決於您的權限設置方式。
  2. alter table vtc4 drop partition (ds='2012-10-31');
  3. alter table vtc4 add partition (ds='2012-10-31');
  4. 將數據複製回HDFS上的那個分區
+0

呵呵,那工作.....我想我需要回去做所有的分區 - 我有一個通過sqoop進行分區並導入mysql表的引入過程,所以也許有一些奇怪的地方。 – wafflecopter

相關問題