Hadoop on EMR - Map任务不并行



我通过AWS中的Data Pipeline设置了一个EMR作业。该任务是将CSV数据从S3传输到DynamoDB。

我的数据大小是400 MB。我设置mapred.max.split.size = 134217728(即128 MB)。这样,我就可以在监控图中看到有3个地图任务。但这些任务从来不会并行运行。因此,完成400mb需要43分钟。任务的stderr日志总是显示按顺序运行的map任务。

我尝试了2个不同实例类型的核心节点,如m1。小,c3。Xlarge, c3.2xlarge,但无济于事。

是否有其他设置/配置或更新要做,使这些地图任务并行运行?

检查是否有帮助:Hadoop为处理导出和查询存储在DynamoDB中的数据的请求而启动的mapper守护进程的最大读取速率上限为每秒1 MiB,以限制所使用的读取容量。如果您在DynamoDB上有额外的供应吞吐量,您可以通过增加mapper守护进程的数量来提高Hive导出和查询操作的性能。为此,您可以增加集群中EC2实例的数量,或者增加在每个EC2实例上运行的mapper守护进程的数量。

可以通过停止当前集群并使用更多的EC2实例重新启动集群来增加集群中的EC2实例数量。如果从Amazon EMR控制台启动集群,则在Configure EC2 instances对话框中指定EC2实例的数量,如果从CLI启动集群,则使用——num-instances选项。

在一个实例上运行的map任务的数量取决于EC2实例类型。有关支持的EC2实例类型和每个实例提供的映射器数量的更多信息,请参阅Amazon EMR开发人员指南中的Hadoop Configuration Reference。在这里,您将找到每个支持的配置的"任务配置"部分。

另一种增加mapper守护进程数量的方法是将Hadoop的mapred.tasktracker.map.tasks.maximum配置参数更改为更高的值。这样做的好处是可以在不增加EC2实例数量或大小的情况下提供更多映射器,从而为您节省资金。缺点是,将此值设置得太高可能会导致集群中的EC2实例耗尽内存。设置mapred.tasktracker.map.tasks。maximum,启动集群并指定Configure Hadoop引导操作,将mapred.tasktracker.map.tasks.maximum的值作为引导操作的参数之一传入。如下例所示。

——bootstrap-action s3n://elasticmapreduce/bootstrap-actions/configure-hadoop ——参数s, mapred.tasktracker.map.tasks。最大= 10

有关引导操作的更多信息,请参阅Amazon EMR开发人员指南中的使用自定义引导操作。

Mayank是对的。我也遇到过类似的问题。1个Map Task处于RUNNING状态,其余9个处于PENDING状态。我必须增加#CoreNodes,我可以看到所有的Map task都是RUNNING。

注意DynamoDB吞吐量(读/写)和集群的容量。在m2的情况下。中等,默认为2个映射器/实例

最新更新