Лучший вариант для объединения нескольких файлов в одном разделе в hadoop? - PullRequest
0 голосов
/ 12 ноября 2019

У меня есть таблица, разделенная на event_date, и по какой-то причине, когда я вставляю данные во внешнюю таблицу, у некоторых дат есть только один или два файла, а у некоторых более 200.

Я всегда использую этофрагмент кода при отбрасывании запросов Hive для вставки данных, поэтому я не уверен, где и как это произошло с ошибками для некоторых дат, но не для других. Я подумал, что именно строка 'merge.tezfiles' и обрабатывает слияние файлов при вставке.

SET mapred.job.queue.name=my_directory;
use this_directory;
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions=2000;
SET hive.exec.max.dynamic.partitions.pernode=2000;
SET hive.merge.tezfiles=true;

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

Есть ли способ объединить несколько файлов в каждом разделе даты простым и понятным способом?

Я пробовал следующее на нескольких датах, которые имели 4 и 15 файлов соответственно. Вывод Hive после запуска подтвердил, что посторонние файлы были удалены, но когда я вернулся и посмотрел в Hadoop, их было столько же, сколько и при запуске. К счастью, данные были все еще точны, когда я проверил их, поэтому я не уверен, что они вообще удалили? Разве это не правильная команда для использования?

alter table table_being_edited PARTITION(event_dt='2017-01-01') CONCATENATE;  

Вот одна такая строка, в которой подтверждается, что дополнительные файлы были удалены:

Moved: 'my_hdfs_filepath/event_dt=2019-10-24/000052_0' to trash at: my_trash_directory/.Trash/Current

OK Время выполнения: 75,321 секунд

Для даты, которая имела15 файлов, это дало мне аналогичный вывод 15x.

Я надеюсь сузить даты с большим количеством файлов до одного или двух, если это вообще возможно, так как у нас заканчивается пространство имен. Я очень новичок во всем этом, так есть ли какой-нибудь простой способ объединить файлы в одном разделе даты?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

Добавив эту строку в дополнение к другим моим параметрам-кустам SET, я смог последовательно объединять файлы деталей в один файл размером 5 гигабайт или меньше, вставляя их в новую таблицу:

set hive.merge.smallfiles.avgsize=5000000000;

Можно также использовать getmerge и затем вернуть файлы обратно, но это требует дополнительных шагов для вытягивания файлов локально (должно быть много места для хранения в зависимости от размера ваших файлов), что было более громоздким, чем создание новой таблицыи вставка с этим дополнительным параметром SET.

Другая альтернатива использовала

set hive.merge.mapfiles=true;

, который представляется параметром для создания no. картографов. если у нас есть небольшое количество файлов, нужно создать столько картографов, которые не оптимальны для дизайна hadoop, поэтому вариант слияния tez больше подходит

0 голосов
/ 12 ноября 2019

Вы можете попробовать установить ниже свойства


SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.smallfiles.avgsize=134217728; ( 128 MB)

Вы можете обратиться к этой ссылке

...