2011-10-28 28 views
3

我有一個亞馬遜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 KB。

是否可以指示配置單元將結果存儲在單個文件中?

回答

1

它們由不同的數據節點創建。每個人都附加到文件 - 如果他們都必須附加到相同的文件,那麼這將需要大量的鎖定並減慢速度。

通過引用目錄及其所有內容,可以將多個文件視爲一個大文件。

+0

謝謝,亞歷克斯。似乎我的目的,我可以將內容合併到一個文件。 – zsolt

+0

我正在嘗試從我的超過2個月的數據日誌中找到最小的日期和最長的日期。 EMR將每個不同數據節點的最小最大日期發送到5個不同的輸出文件。因此,我得到5個不同的輸出文件中的5分鐘日期和5個最大日期。這不符合我的目的?我如何將它們全部壓縮爲單個輸出文件,以便在整個數據集中查找ONE分鐘日期和ONE最大日期? –

2

一般術語是這是可以實現的,但與一些可伸縮性

的損失嘗試使用設置

「設置mapred.reduce.tasks = 1;」

這強制1減速器,因此將只有1個文件輸出。