【问题标题】:HDINSIGHT hive, MSCK REPAIR TABLE table_name throwing errorHDINSIGHT 配置单元,MSCK REPAIR TABLE table_name 抛出错误
【发布时间】:2016-10-14 13:07:39
【问题描述】:

我有一个名为employee 的外部分区表,分区为(年、月、日),每天都有一个新文件出现在特定日期位置,调用今天的日期为2016/10/13。

TABLE SCHEMA:
create External table employee(EMPID Int,FirstName String,.....)
partitioned by (year string,month string,day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' LOCATION '/.../emp';

所以我们每天都需要运行运行良好的命令

ALTER TABLE employee ADD IF NOT EXISTS PARTITION (year=2016,month=10,day=14) LOCATION '/.../emp/2016/10/14';

但是一旦我们尝试使用下面的命令,因为我们不想手动执行上面的 alter table 命令,它会抛出错误

hive> MSCK REPAIR TABLE employee;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

注意:

hive> MSCK TABLE employee; //this show me that a partition has not added in the table
OK
Partitions not in metastore: employee:2016/10/14
Time taken: 1.066 seconds, Fetched: 1 row(s)

请帮助我,因为我坚持这一点。对于这种情况,我们有什么解决方法吗?

【问题讨论】:

  • 我有一个解决我的问题的解决方案,如果分区名称类似于'year=2016/month=10/day=13',那么我们可以使用下面的命令并且它正在工作。 .. 设置 hive.msck.path.validation=ignore; MSCK REPAIR TABLE 表名;

标签: hive hadoop-partitioning


【解决方案1】:

我为我的问题找到了一个临时解决方案,如果表静态分区名称类似于“year=2016/month=10/day=13”,那么我们可以使用以下命令并且它正在运行...

set hive.msck.path.validation=ignore;
MSCK REPAIR TABLE table_name;

【讨论】:

  • 如果您有大量分区,您可能需要设置 hive.msck.repair.batch.size。当有大量未跟踪的分区时,可以分批运行 MSCK REPAIR TABLE 以避免 OOME(内存不足错误)。 y 为属性 hive.msck.repair.batch.size 提供配置的批量大小,它可以在内部批量运行。 T 属性默认值为0,表示一次执行所有分区。
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 2020-12-30
  • 2019-05-09
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多