在aws emr上通过hive或pig将许多小文件(>200000,4kbyte)从s3 bucket加载到hdfs非常慢。似乎只有一个Map器被用来获取数据,尽管我不能确切地找出瓶颈在哪里。
清管器代码示例
data = load 's3://data-bucket/' USING PigStorage(',') AS (line:chararray)
配置单元代码示例
CREATE EXTERNAL TABLE data (value STRING) LOCATION 's3://data-bucket/';
是否有任何已知的设置可以加快进程或增加用于获取数据的Map器的数量?
我尝试了以下方法,但没有任何明显的效果:
增加#任务节点
设置hive.optimize.s3.query=true
手动设置#Map器
将示例类型从中型增加到xlarge
我知道s3distcp会加快进程,但我只能通过做很多调整(包括设置#workerthreads)来获得更好的性能,我更喜欢直接在pig/hive脚本中更改参数。
1条答案
按热度按时间afdcj2ne1#
您可以:
在作业开始之前,使用distcp合并文件:http://snowplowanalytics.com/blog/2013/05/30/dealing-with-hadoops-small-files-problem/
有一个Pig脚本,可以为你做,一次。
如果你想通过pig来实现,你需要知道有多少Map器被生成。您可以使用以下参数:
请提供这些案例的指标