Куст HDINSIGHT, MSCK ИСПРАВЛЯЕТ ошибку выбрасывания ТАБЛИЦЫ имя_таблицы

#hive #hadoop-partitioning

#куст #разбиение на разделы hadoop

Вопрос:

у меня есть внешняя разделенная таблица с именем 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';
 

но как только мы пытаемся выполнить команду below, потому что мы не хотим выполнять приведенную выше команду alter table вручную, она выдает ошибку below

 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)
 

пожалуйста, помогите мне, поскольку я застрял с этим. есть ли у нас какой-либо обходной путь для такого типа ситуации?

Комментарии:

1. У меня есть обходное решение для моей проблемы, то есть, если имя раздела будет похоже на «год = 2016 / месяц = 10 / день = 13», тогда мы можем использовать приведенную ниже команду, и она работает… установить hive.msck.path.validation=игнорировать; MSCK REPAIR TABLE имя_таблицы ТАБЛИЦЫ;

Ответ №1:

У меня есть обходное решение для моей проблемы, которое заключается в том, что если имя статического раздела таблицы похоже на «год = 2016 / месяц = 10 / день = 13», тогда мы можем использовать приведенную ниже команду, и она работает…

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

Комментарии:

1. Если у вас большое количество разделов, вам может потребоваться установить hive.msck.repair.batch.size . При наличии большого количества неотслеживаемых разделов предусмотрена возможность пакетного запуска ТАБЛИЦЫ ВОССТАНОВЛЕНИЯ MSCK, чтобы избежать OOME (ошибка нехватки памяти). y предоставление настроенного размера пакета для свойства hive.msck.repair.batch.size он может выполняться в пакетах внутри. Если значение свойства по умолчанию равно 0, это означает, что оно будет выполнять все разделы одновременно.