Не удается связаться с разделом таблицы улья после удаления файла hdfs, относящегося к разделу

My Hadoop Cluster выполняет пакетное задание для всех данных в 11:00.

Задание создает раздел таблицы куста (например, p_date = 201702, p_domain = 0) и импортирует данные rdbms в раздел таблицы куста, например ETL .... (таблица куста не является внешней таблицей)

но задание не удалось, и я удалил некоторый файл hdfs (расположение раздела => p_date = 20170228, p_domain = 0) для повторной обработки.

Это моя ошибка, я просто набираю запрос на удаление раздела в билайн ...

И я связываюсь с зависанием, когда я запрашиваю таким образом «выберите * из table_name, где p_date = 20170228, p_domain = 0», но «select * from table_name, где p_date = 20170228, p_domain = 6» является успешным.

Я не могу найти журнал ошибок, и сообщение консоли не появляется

Как я могу решить эту проблему?

И я надеюсь, вы понимаете, что мне не хватает английского.


person Lee. YunSu    schedule 01.03.2017    source источник


Ответы (1)


Вы не должны удалять таким образом свои разделы в таблице Hive. Для этого есть специальная команда:

ALTER TABLE имя_таблицы DROP IF EXISTS PARTITION (partitioncolumn = 'somevalue');

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

mysql

mysql> use hive;

mysql> SELECT PART_ID PARTITIONS WHERE PART_NAME like '%p_date=20170228,p_domain=0%'

+---------+-------------+------------------+--------------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME          | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------------+-------+--------+
|       7 |  1487237959 |                0 | partition name     |   336 |    329 |
+---------+-------------+------------------+--------------------+-------+--------+


mysql> DELETE FROM PARTITIONS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_KEY_VALS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_PARAMS WHERE PART_ID=7;

После этого Hive должен прекратить использовать этот раздел в ваших запросах.

person Alex    schedule 01.03.2017
comment
Большое Вам спасибо. Но до вашего комментария я решаю свою проблему с помощью команды unlock hive. Я думаю, что мои пути и твои пути похожи - person Lee. YunSu; 02.03.2017