亚马逊EMR - 当我们有核心节点时,为什么需要任务节点?

30

最近我在学习Amazon EMR,根据我的知识,EMR集群让我们选择3个节点。

  1. Master,运行主要的Hadoop守护程序,如NameNode、Job Tracker和Resource Manager。
  2. Core,运行Datanode和Tasktracker守护程序。
  3. Task,只运行TaskTracker。

我的问题是,为什么EMR提供任务节点?而hadoop建议在同一节点上运行Datanode守护程序和Tasktracker守护程序。亚马逊这样做的逻辑是什么?您可以将数据保存在S3中,将其流式传输到核心节点上的HDFS,然后在除了共享HDFS数据到任务节点会增加IO开销之外的HDFS上进行处理。因为据我所知,在hadoop中,TaskTrackers运行在为该特定任务保留数据块的DataNodes上,那么为什么要在不同节点上运行TaskTrackers呢?

4个回答

20
根据AWS文档[1],Amazon EMR中的节点类型如下: - 主节点:管理集群的节点,通过运行软件组件协调其他节点之间的数据和任务分配进行处理。主节点跟踪任务状态并监视集群的健康状况。每个集群都有一个主节点,也可以创建只有主节点的单节点集群。 - 核心节点:在您的集群上运行任务并将数据存储在Hadoop分布式文件系统(HDFS)中的节点。多节点集群至少有一个核心节点。 - 任务节点:仅运行任务而不在HDFS中存储数据的节点。任务节点是可选的。
根据AWS文档[2],任务节点是可选的。您可以使用它们来添加执行并行计算任务的能力,例如Hadoop MapReduce任务和Spark执行程序。任务节点不运行Data Node守护程序,也不在HDFS中存储数据。
一些用例包括: - 您可以使用任务节点处理来自S3的流。在这种情况下,网络IO不会增加,因为使用的数据不在HDFS上。 - 由于核心节点运行着HDFS守护程序,并且不断添加和删除新节点不是一个好的实践,因此可以添加或删除任务节点。
资源:
[1] https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-clusters
[2] https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-task

4

一种应用场景是,如果您将Spot实例用作任务节点。如果便宜的话,可以考虑向EMR集群添加一些计算能力。这主要适用于非敏感任务。


3
Hadoop建议将DataNode和TaskTracker守护进程放置在同一节点上的原因是为了让处理能力尽可能接近数据。但是,当您需要处理多节点群集时,也会涉及到机架级别的优化。在我看来,AWS通过提供与Datanodes存在于同一机架中的任务节点来减少I/O开销。提供任务节点的原因是我们需要对数据进行更多处理,而不仅仅是将它们存储在HDFS上。我们总是希望有更多的TaskTracker比Daemon节点。因此,AWS提供了使用完整节点实现机架级别优化的机会。如果您只想使用短暂的群集并获得良好的性能,则使用S3和仅核心节点将数据导入群集的方式是一个不错的选择。

这种优势在 AWS 中在某种程度上丧失了,因为许多数据存储在不是本地的 EBS 驱动器中。 - AaronM

2
传统的Hadoop假设你的所有工作负载都需要高I/O,而使用EMR可以根据你的工作负载选择实例类型。例如对于高达100Gbps的高I/O需求,选择C型或R型,并且可以使用放置组。并且保持Core节点与Task节点的比例为1:5或更低,这将保持I/O最优,并且如果你想要更高的吞吐量,选择C或R作为你的Core和Task。(编辑 - 解释使用EMR几乎没有性能损失)
Task节点的优点在于它可以更快地扩展/缩小规模,并且可以最小化计算成本。传统的Hadoop集群很难进行任何方式的扩展,因为从节点也是HDFS的一部分。Task节点是可选的,因为Core节点可以运行Map和Reduce。
Core节点需要根据任务的不同而花费更长的时间来扩展/缩小规模,因此提供了Task节点的选项以进行更快的自动扩展。
参考:https://aws.amazon.com/blogs/big-data/best-practices-for-resizing-and-automatic-scaling-in-amazon-emr/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接