Не удается связаться с разделом таблицы кустов, после удаления файла hdfs, связанного с разделом
Мой кластер Hadoop выполняет пакетную работу для всех данных в 11:00.
Задание создает раздел таблицы кустов (например, p_date=201702,p_domain=0) и импортирует данные rdbms в раздел таблицы кустов, например ETL....(таблица кустов не является внешней таблицей)
но работа не удалась, и я удалил некоторый файл hdfs (расположение раздела => p_date=20170228,p_domain=0) для повторной обработки.
Это моя ошибка, я просто набираю запрос на удаление раздела в Билайн...
И я связываюсь с зависанием, когда я запрашиваю таким образом "select * from table_name, где p_date=20170228,p_domain=0", но "select * from table_name, где p_date=20170228,p_domain=6", является успешным.
Я не могу найти журнал ошибок и не появляется консольное сообщение
Как я могу решить эту проблему?
И я надеюсь, что вы понимаете мое отсутствие английского.
1 ответ
Вы не должны удалять свои разделы в таблице Hive таким способом. Для этого есть специальная команда:
ALTER TABLE table_name 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 должен перестать использовать этот раздел в ваших запросах.