我在我的猪脚本中使用这些行:
set default_parallel 20;
requests = LOAD ‘/user/me/todayslogs.gz’ USING customParser;
intermediate_results = < some-processing ... >
some_data = FOREACH intermediate_results GENERATE day, request_id, result;
STORE some_data INTO '/user/me/output_data' USING PigStorage(',');
'/user/me/todayslogs.gz' 包含数千个压缩文件,每个文件大小为 200 MB。
脚本完成后,“/user/me/output_data”在 HDFS 上有数千个微小 (<1 KB ) 文件。
我必须在另一个猪脚本中读取“/user/me/output_data”中的文件以进行进一步处理。我看到它会损害性能。如果 some_data 输出的文件是 gzip-ed,性能会更差。
这是 MapReduceLauncher 的输出。
2013-11-04 12:38:11,961 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Processing aliases campaign_join,detailed_data,detailed_requests,fields_to_retain,grouped_by_reqid,impressions_and_clicks,minimal_data,ids_cleaned,request_id,requests,requests_only,requests_typed,xids_from_request
2013-11-04 12:38:11,961 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - detailed locations: M: requests[30,11],campaign_join[35,16],null[-1,-1],null[-1,-1],detailed_requests[37,20],detailed_data[39,16],null[-1,-1],minimal_data[49,15],null[-1,-1],ids_cleaned[62,18],grouped_by_reqid[65,21] C: R: null[-1,-1],xids_from_request[66,21],impressions_and_clicks[69,26],fields_to_retain[70,20],requests_only[67,17],request_id[68,18],requests_typed[73,17]
如何强制 PigStorage 将输出写入更少的输出文件?