hadoop - 删除 Hive 表和 msck 修复失败,表存储在谷歌云存储桶中
问题描述
我正在使用下面的 SQL 语句在 Google Cloud Bucket 中创建配置单元表。
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)
我还使用命令从 Google Cloud Storage 存储桶中删除了文件,gsutil rm -r gs://
但仍然无法删除表并给出相同的错误
同样在运行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 命令仍然不起作用。
解决方案:
最终我得到了这个有效的想法。
- 我更改了表 T1 并将其位置设置为存储桶内的子目录,而不是裸存储桶。
ALTER TABLE TABLENAME SET LOCATION gs://crazybucketstring/schemname/tableaname/
- 现在我做'msck repair',它不会抛出任何错误。
- 我发出了 DROP Table 命令并且它起作用了。
这个问题与表位置有关,在同一个存储桶中创建多个表时,我们应该小心处理。最佳实践是在存储桶中使用不同的子目录来创建不同的表,并避免仅使用存储桶路径作为表位置,特别是如果您必须在同一个存储桶中创建多个表。谢谢您,如有大数据问题,请随时与我联系。
推荐阅读
- authentication - How would I make it so a flask API can only be used with my ReactJS app?
- vue.js - 在 Vuex 中为同一组件实现双向数据绑定的不同方法
- html - scss 文件中的无效属性
- java - OOP 中“抽象”的正确定义是什么?
- python - str.replace 除非字符串后跟某些文本
- python - 将列表元素分成单独的数字并写入记事本文件
- python - Python:我可以使 read_excel sheet_name 不区分大小写吗
- node.js - 节点 cron 在特定日期后每 7 天运行一次
- android - 如何在 onclick 中使用私有 void?
- python - 如何打印字典的名字?