[英]Drop Hive Table & msck repair fails with Table stored in google cloud bucket
我正在使用下面的 SQL 語句在 Google Cloud Bucket 中創建 hive 表。
CREATE TABLE schema_name.table_name (column1 decimal(10,0), column2 int, column3 date)
PARTITIONED BY(column7 date) STORED AS ORC
LOCATION 'gs://crazybucketstring/'
TBLPROPERTIES('ORC.COMPRESS'='SNAPPY');
然后我使用distcp
命令將數據加載到該表中,現在當我嘗試刪除表時它會失敗並顯示以下錯誤消息,即使我嘗試刪除空表它也會失敗。
hive>>DROP TABLE schema_name.table_name;
**Error:** Error while processing statement:
FAILED: Execution Error, return code 1 from
org.apache.hadoop.hive.ql.exec.DDLTask.MetaException
(message:java.lang.IllegalArgumentException: `hadoopPath must not be null`)
(state=08S01,code=1)
我還使用gsutil rm -r gs://
命令從 Google Cloud Storage 存儲桶中刪除了文件,但仍然無法刪除表並給出相同的錯誤
同樣在運行msck repair table
時,它會給出以下錯誤。
FAILED:
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask (state=08S01,code=1)
任何想法可能有什么問題?
該問題與存儲桶位置有關。 我將嘗試逐步解釋如何重新創建它以及如何解決它。 同樣的問題也導致無法運行msck repair
命令。
如何重新創建它:
首先,我創建了一個表(T1),其位置指向此處給出的存儲桶:
LOCATION 'gs://crazybucketstring/'
然后我在子文件夾中創建了另一個表(T2)內部存儲桶,位置如下所示LOCATION gs://crazybucketstring/schemname/tableaname/
現在,當我嘗試刪除第一個表(T1)時,它會拋出錯誤,因為整個存儲桶都表現得像表一樣,它不能刪除存儲桶,它只能刪除文件。
當我嘗試刪除表(T2)時,我可以刪除它,並且存儲桶子目錄中的文件也被刪除,因為它是托管表。 T1表還是很頭疼的。
為了不顧一切地刪除表 T1,我使用gsutil rm -r
命令清空了存儲桶並嘗試msck repair table tablename
,但奇怪msck repair
命令失敗並顯示以下錯誤消息
>> msck repair table tablename
Error: Error while processing statement: FAILED:
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask (state=08S01,code=1)
像往常一樣, DROP 命令仍然不起作用。
解決方案:
最終我得到了這個有效的想法。
ALTER TABLE TABLENAME SET LOCATION gs://crazybucketstring/schemname/tableaname/
這個問題與表位置有關,在同一個存儲桶中創建多個表時,我們應該小心處理。 最佳實踐是在存儲桶中使用不同的子目錄來創建不同的表,並避免僅使用存儲桶路徑作為表位置,特別是如果您必須在同一個存儲桶中創建多個表。 謝謝您,如有大數據問題,請隨時與我聯系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.