в таблице восстановления hive 0.13 msck перечислены только разделы, которых нет в хранилище метаданных

Я пытаюсь использовать команду Hive (0.13) msck repair table для восстановления разделов, и в ней перечислены только разделы, не добавленные в хранилище метаданных, вместо того, чтобы добавлять их в хранилище метаданных.

вот вывод команды

partitions not in metastore externalexample:CreatedAt=26 04%3A50%3A56 UTC 2014/profileLocation="Chicago"

вот как я создаю внешнюю таблицу

CREATE EXTERNAL TABLE IF NOT EXISTS ExternalExample(
        tweetId BIGINT, username STRING,
        txt STRING, CreatedAt STRING,
        profileLocation STRING,
        favc BIGINT,retweet STRING,retcount BIGINT,followerscount BIGINT)
    COMMENT 'This is the Twitter streaming data'
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\t'
    STORED AS TEXTFILE
    location '/user/hue/exttable/';

Я что-то упускаю?


person Yogendra    schedule 05.11.2014    source источник


Ответы (7)


У меня была аналогичная проблема с ТАБЛИЦЕЙ ВОССТАНОВЛЕНИЯ MSCK, в которой перечислены разделы, которых не было в хранилище метаданных, но фактически они не добавлялись (и не было сообщения об ошибке).

Я попытался вручную добавить раздел с помощью команды ALTER TABLE ADD PARTITION, и это дало мне сообщение об ошибке, что привело меня к основной причине, которая заключалась в том, что папка HDFS, содержащая «отсутствующий» раздел, была настроена с неправильными разрешениями.

Как только проблема с разрешениями была решена, команда MSCK REPAIR TABLE работала правильно.

Если вы столкнулись с этой проблемой, возможно, стоит попробовать добавить ее вручную с помощью команды ALTER TABLE ADD PARTITION. Это может привести к появлению полезного сообщения об ошибке, которое поможет вам определить основную причину проблемы.

person chcook    schedule 12.05.2016

Убедитесь, что имена разделов, указанные в определении вашей таблицы, совпадают с именем раздела на hdfs.

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

Я думаю, вы хотите сделать что-то вроде этого (обратите внимание на использование PARTITIONED BY):

create external table ExternalExample(tweetId BIGINT, username STRING, txt STRING,favc BIGINT,retweet STRING,retcount BIGINT,followerscount BIGINT) PARTITIONED BY (CreatedAt STRING, profileLocation STRING) COMMENT 'This is the Twitter streaming data' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE location '/user/hue/exttable/';

Затем на hdfs у вас должна быть следующая структура папок:

/user/hue/exttable/CreatedAt=<someString>/profileLocation=<someString>/your-data-file
person hba    schedule 18.11.2014
comment
CreatedAt и profileLocation в SQL нечувствительны к регистру, но все они должны быть в нижнем регистре в путях к файлам. - person Matt Chuang; 24.07.2017

Имена разделов для MSCK REPAIR TABLE ExternalTable должны быть в нижнем регистре, тогда только он добавит их в хранилище метаданных улья. Я столкнулся с аналогичной проблемой в улье 1.2.1, где не было поддержки ALTER TABLE ExternalTable RECOVER PARTITION, но, потратив некоторое время на отладку, обнаружил, что имена разделов должен быть в нижнем регистре, т.е. /some_external_path/mypartion=01 допустим, а /some_external_path/myParition=01 недействителен;

Превратите свой profileLocation в profilelocation или profile_location и проверьте, должно ли оно работать.

Мой вопрос здесь Не удалось восстановить разделы через таблицу изменений в Hive 1.2

person Sushil Ks    schedule 26.09.2016

Hive хранит список разделов для каждой таблицы в своем хранилище метаданных. Однако, если новые разделы добавляются в HDFS напрямую (вручную с помощью команды hadoop fs -put), хранилище метаданных не будет знать об этих разделах. вам нужно добавить раздел

ИЗМЕНИТЬ ТАБЛИЦУ ExternalExample ДОБАВИТЬ РАЗДЕЛ

для каждого раздела или короче вы можете запустить

ТАБЛИЦА ВОССТАНОВЛЕНИЯ MSCK ExternalExample; Он добавит все разделы, которые существуют в HDFS, но не в хранилище метаданных, в хранилище метаданных.

Ссылка https://issues.apache.org/jira/browse/HIVE-874

person user1989252    schedule 05.11.2014
comment
Спасибо, я это понимаю. но проблема, с которой я сталкиваюсь, когда запускаю MSCK REPAIR TABLE ExternalExample; заключается в том, что он не добавляет разделы в хранилище метаданных, а просто выдает разделы, которых нет в хранилище метаданных. Так понятно? - person Yogendra; 06.11.2014

1) Вам необходимо указать разделы 2) В именах разделов должны быть все строчные буквы. См. это - https://singhanuvrat.com/hive-partition-column-name-camelcase-bad-idea-b89796d4e741#.16d7uqfot

person Arati    schedule 30.08.2016

возможно, вы работаете не как куст пользователь:

sudo -u hive** hive -e "set hive.msck.path.validation=ignore;msck repair table T1"

set hive.msck.path.validation=ignore; (это для таблиц с большим количеством разделов.)

person Jeff Wahl    schedule 03.07.2018

Вам просто не хватает PARTITIONED BY (CreatedAt STRING, profileLocation STRING).

person Santiago Trias    schedule 14.10.2015