Почему результаты запроса hive разбиваются на несколько файлов

#amazon-s3 #hadoop #hive #amazon-emr

#amazon-s3 #hadoop #улей #amazon-emr

Вопрос:

У меня настроено задание Amazon ElasticMapreduce для запуска запроса hive

 CREATE EXTERNAL TABLE output_dailies (
day string, type string, subType string, product string, productDetails string, 
uniqueUsers int, totalUsers int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't'
LINES TERMINATED BY 'n'
STORED AS TEXTFILE
LOCATION '${OUTPUT}';

INSERT OVERWRITE TABLE output_dailies
select day, type, subType, product, productDetails, count(distinct accountId) as uniqueUsers, count(accountId) as totalUsers from raw_logs where day = '${QUERY_DATE}' group by day, type, subType, product, productDetails;
 

После завершения задания местоположение вывода, настроенное на S3, будет содержать 5 файлов с этим шаблоном task_201110280815_0001_r_00000x , где x изменяется от 0 до 4. Файлы небольшие, по 35 КБ каждый.

Можно ли указать hive сохранять результаты в одном файле?

Ответ №1:

В общем, да, это достижимо, но с потерей некоторой масштабируемости

Попробуйте использовать параметр

«set mapred.reduce.tasks = 1;»

Это приводит к 1 редуктору, и поэтому будет выведен только 1 файл.

Ответ №2:

Они создаются разными узлами данных. Каждый из них добавляется к файлу — если бы все они должны были добавляться к одному и тому же файлу, это потребовало бы много блокировок и замедлило бы его.

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

Комментарии:

1. Спасибо, Алекс. Кажется, для моих целей я могу просто объединить содержимое в один файл.

2. я пытаюсь найти одну наименьшую дату и одну наибольшую дату из моих журналов данных за более чем 2 месяца. EMR передает минимальные и максимальные даты из каждого из разных узлов данных в 5 разных выходных файлов. В результате я получаю 5 минимальных дат и 5 максимальных дат в 5 разных выходных файлах. Это не служит моей цели? Как мне объединить их все в один выходной файл, чтобы найти ОДНУ минимальную дату и ОДНУ максимальную дату по всему набору данных?