Почему результаты запроса улья разбиваются на несколько файлов - PullRequest
3 голосов
/ 28 октября 2011

У меня задание 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 КБ.

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

Ответы [ 2 ]

2 голосов
/ 28 июня 2013

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

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

"set mapred.reduce.tasks = 1;"

Это заставляет 1 редуктор и, следовательно, будет выводиться только 1 файл.

1 голос
/ 28 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...