删除配置单元表&msck修复失败,表存储在google云存储桶中

inn6fuwd  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(443)

我正在使用下面的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)

你知道怎么回事吗?

nuypyhwy

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 命令失败,错误消息如下

>>  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,并将其位置设置为bucket内的子目录,而不是裸bucket。 ALTER TABLE TABLENAME SET LOCATION gs://crazybucketstring/schemname/tableaname/ 现在我做“msck修复”,它不会抛出任何错误。
我发出了droptable命令,它成功了。
这个问题与表的位置有关,在同一个bucket中创建多个表时,需要仔细处理。最佳实践是使用bucket中的不同子目录来创建不同的表,特别是当您必须在同一个bucket中创建多个表时,避免使用bucket path作为表位置。谢谢你,请随时联系我,了解大数据问题。

相关问题