Amazon web services 从S3读取许多小文件的速度非常慢

Amazon web services 从S3读取许多小文件的速度非常慢,amazon-web-services,amazon-s3,hive,apache-pig,elastic-map-reduce,Amazon Web Services,Amazon S3,Hive,Apache Pig,Elastic Map Reduce,在AWS EMR上,通过Hive或Pig将许多小文件(大于200000,4KB)从S3存储桶加载到HDFS非常慢。似乎只有一个映射器被用来获取数据,尽管我不能准确地找出瓶颈在哪里 清管器代码样本 data = load 's3://data-bucket/' USING PigStorage(',') AS (line:chararray) CREATE EXTERNAL TABLE data (value STRING) LOCATION 's3://data-bucket/'; 配置

在AWS EMR上,通过Hive或Pig将许多小文件(大于200000,4KB)从S3存储桶加载到HDFS非常慢。似乎只有一个映射器被用来获取数据,尽管我不能准确地找出瓶颈在哪里

清管器代码样本

data = load 's3://data-bucket/'  USING PigStorage(',') AS (line:chararray)
CREATE EXTERNAL TABLE data (value STRING) LOCATION  's3://data-bucket/';
配置单元代码示例

data = load 's3://data-bucket/'  USING PigStorage(',') AS (line:chararray)
CREATE EXTERNAL TABLE data (value STRING) LOCATION  's3://data-bucket/';
是否有任何已知的设置可以加快进程或增加用于获取数据的映射器的数量

我尝试了以下方法,但没有任何明显的效果:

  • 增加#任务节点
  • 设置hive.optimize.s3.query=true
  • 手动设置#映射器
  • 将实例类型从中等增加到xlarge
我知道s3distcp会加快进程,但我只能通过做大量调整(包括设置#workerThreads)来获得更好的性能,我更喜欢直接在PIG/Hive脚本中更改参数

您可以:

  • 在作业开始之前,使用distcp合并文件:

  • 有一个猪脚本可以帮你做一次

  • 如果你想通过PIG来完成,你需要知道有多少映射程序被生成。您可以使用以下参数进行播放:

    //  to set mapper = nb block size. Set to true for one per file.
    SET pig.noSplitCombination false;
    // set size to have SUM(size) / X = wanted number of mappers
    SET pig.maxCombinedSplitSize 250000000;
    

    请提供这些案例的指标

    谢谢您的回答,但我的问题中已经提到了您的两个选项。1)我知道s3distcp是一个选项,虽然我只能通过大量参数调整来获得这些“承诺”的性能增益,但它似乎不是很优化,但仍然很好。2) 这正是我想要的,但pig似乎只运行一个映射作业来获取数据,而且速度非常慢。。。