Hdfs проблема с повреждением данных - PullRequest
0 голосов
/ 14 мая 2018

у нас проблема с повреждением данных в нашем кластере hadoop.У нас есть управляемая таблица кустов, которая содержит данные за три года, разбитые по годам.

Ниже два запроса работают нормально без каких-либо проблем

select count(*) from tkt_hist table where yr=2015

select count(*) from tkt_hist table where yr=2016

select count(*) from tkt_hist table where yr=2017

Однако, когда мы пытаемся сделать группировку по годам, отображается ошибка ниже.

Error while compiling statement: FAILED: SemanticException java.io.FileNotFoundException: File hdfs://ASIACELLHDP/apps/hive/warehouse/gprod1t_base.db/toll_tkt_hist_old/yr=2015/mn=01/dy=01 does not exist. [ERROR_STATUS]

Четselect не будет работать, если мы укажем год, отличный от 2015.

//this works fine
Select * from tkt_hist where yr=2015 limit 10;

// below throws same  error mentioned above.
Select * from tkt_hist where yr=2016;

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Попробуйте увеличить пространство кучи Java (увеличьте объем памяти редуктора, если он не работает).

Например:

set mapreduce.map.java.opts = -Xmx15360m
0 голосов
/ 14 сентября 2018

Вам придется отбросить разделы вручную, потому что msck repair table только добавляет разделы, но не удаляет существующие.

Вам придется перебирать список поврежденных разделов.Для внутренних таблиц вам нужно быть конкретным, так как удаление раздела удаляет базовые физические файлы.

ALTER TABLE tkt_hist DROP IF EXISTS PARTITION(yr=2015, mn=01, dy=01);

Это необходимо сделать для каждого раздела.Вы можете поместить его в сценарий bash и выполнить его с помощью команд hive -e или beeline -e для работы со строкой запроса в кавычках.

Если вы используете внешнюю таблицу, тогда гораздо проще удалить все разделыа затем восстановите таблицу.

ALTER TABLE tkt_hist DROP IF EXISTS PARTITION(yr<>'', mn<>'', dy<>'');

Обязательно восстановите таблицу как пользователь, владеющий базой данных Hive, а также путь HDFS.

MSCK REPAIR TABLE tkt_hist;

Это должно добавить папки разделов, в настоящее время доступные в пути к таблице, без добавления недопустимых разделов.

Примечание. Если ваш пользователь не является владельцем каталога, убедитесь, что у вас есть права на запись и выполнитеработа в клиенте доступа hive, поскольку beeline требует абсолютных прав собственности на работу.

...