我正在使用下面的sql语句在googlecloudbucket中创建配置单元表。
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://
命令,但仍然无法删除表,并给出相同的错误
也在跑步 msck repair table
它给出了以下错误。
FAILED:
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask (state=08S01,code=1)
你知道怎么回事吗?
1条答案
按热度按时间nuypyhwy1#
问题与铲斗位置有关。我将试着一步一步地解释如何重建它和如何解决它。同样的问题也会导致无法运行
msck repair
命令。如何重新创建:
首先,我创建了一个表(t1),其位置指向此处给定的bucket:
LOCATION 'gs://crazybucketstring/'
然后我在子文件夹的side bucket中创建了另一个表(t2),其位置如下所示LOCATION gs://crazybucketstring/schemname/tableaname/
现在,当我尝试删除第一个表(t1)时,它抛出错误,因为整个bucket的行为和表一样,它不能删除bucket,只能删除文件。当我尝试删除表(t2)时,我可以删除它,而且bucket子目录中的文件也会被删除,因为它是托管表。t1表仍然令人头痛。
为了拼命删除表t1,我用
gsutil rm -r
命令并尝试msck repair table tablename
奇怪的是msck repair
命令失败,错误消息如下像往常一样,drop命令仍然不起作用。
解决方案:
最终我有了一个有效的想法。
我修改了表t1,并将其位置设置为bucket内的子目录,而不是裸bucket。
ALTER TABLE TABLENAME SET LOCATION gs://crazybucketstring/schemname/tableaname/
现在我做“msck修复”,它不会抛出任何错误。我发出了droptable命令,它成功了。
这个问题与表的位置有关,在同一个bucket中创建多个表时,需要仔细处理。最佳实践是使用bucket中的不同子目录来创建不同的表,特别是当您必须在同一个bucket中创建多个表时,避免使用bucket path作为表位置。谢谢你,请随时联系我,了解大数据问题。