Чому результати запиту вулика розділені на декілька файлів

У мене є робота Amazon ElasticMapreduce, налаштована для запуску запиту вулика

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 КБ.

Чи можна наказати вуликам зберігати результати в одному файлі?

3

2 Відповіді

Загалом, так, це можливо, але з втратою певної масштабованості

Спробуйте скористатись налаштуванням

"встановити mapred.reduce.tasks = 1;"

Це зумовлює 1 редуктор, і тому буде виведено лише 1 файл.

2
додано

Вони створюються різними вузлами даних. Кожен приєднується до файлу - якщо всі вони повинні були додати до одного файлу, то це вимагає великої кількості блокування та сповільнення його.

Ви можете розглядати декілька файлів як один великий файл, просто звертаючись до каталогу та всього його вмісту.

1
додано
Я намагаюся знайти одну найменшу дату та одну найвищу дату з моїх журналів з більш ніж 2 місяцями даних. ЕМР випускає дати мінімальних значень від кожного з різних вузлів даних до 5 різних вихідних файлів. В результаті я отримую 5 хв дат і 5 макс дат в 5 різних вихідних файлів. Це не служить моїй меті? Як я можу об'єднати їх у єдиний вихідний файл, щоб знайти дату ONE min і максимальну дату ONE max для всього набору даних?
додано Автор Syed Rakib Al Hasan, джерело
Спасибі, Алекс. Здається, для моїх цілей я можу просто об'єднати вміст у один файл.
додано Автор zsolt, джерело