#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, это означает, что оно будет выполнять все разделы одновременно.