1. 架构简介
Amazon Elastic Map Reduce(Amazon EMR)是一种Web服务,让用户能够轻松、快速并经济地处理大量的数据。
Amazon EMR简化了大数据处理,提供的托管Hadoop框架可以跨越各个动态可扩展的Amazon EC2实例分发和处理海量数据,如图11.6所示。
图11.6
在Amazon EMR上运行的Hadoop集群使用EC2实例作为虚拟Linux服务器用于主节点和从属节点,将Amazon S3用于输入和输出数据的批量存储,并将Cloud Watch用于监控集群性能和发出警报。
AWS EMR采用存储和计算分离的架构,数据存储在S3上,计算资源来自EC2实例。集群创建之后,MapReduce通过HDFS代理调用S3接口,从S3上读取和写入数据。
2. 节点
Amazon EMR为集群中的服务器定义了三种角色。
- 主节点——管理集群:协调将MapReduce可执行文件和原始数据子集分配到核心实例组和任务实例组。此外,它还会跟踪每个任务的执行状态,监控实例组的运行状况。一个集群中只有一个主节点。这与Hadoop主节点映射。
- 核心节点——使用Hadoop分布式文件系统(HDFS)运行任务和存储数据。这与Hadoop从属节点映射。
- 任务节点(可选)——运行任务:这与Hadoop从属节点映射。
3. 集群
集群是一组执行工作的服务器。在Amazon EMR中,集群是一组以EC2实例形式运行的虚拟服务器。
(1)如何向集群发送工作
在Amazon EMR上运行集群时,会针对如何指定所需完成的工作提供多个选项。
- 完整地定义要在Map和Reduce函数中完成的工作。对于那些处理固定的数据量并在处理完成时终止的集群,通常会采取这种做法。
- 创建长时间运行的集群并使用控制台、Amazon EMR API、AWS CLI或Amazon EMR CLI提交步骤,其中可以包含一个或多个Hadoop任务。
- 创建一个安装了Hadoop应用程序(如Hive、Pig或HBase)的集群,并使用这些应用程序提供的接口以脚本或者交互方式提交查询。
- 创建长时间运行的集群、连接该集群并使用Hadoop API提交Hadoop任务。
(2)集群的生命周期
图11.7显示的是集群的生命周期及每个阶段是如何映射到具体的集群状态的。
图11.7
成功的Amazon EMR集群遵循此流程:Amazon EMR先配置Hadoop集群,在这期间,集群的状态是STARTING;接着,运行任何用户定义的引导操作,在这期间,集群的状态是BOOTSTRAPPING;在所有引导操作完成后,集群的状态是RUNNING,在此阶段,任务流程会按顺序运行所有的集群步骤。
如果用户通过启用keepalive参数将集群配置为长时间运行的集群,那么集群会在处理完成后等待下一组说明时进入WAITING状态。用户必须在不再需要该集群时手动终止该集群。
如果用户将集群配置为暂时性的集群,那么它将在所有的步骤完成后自动关闭。
当集群在没有遇到错误的情况下终止时,它的状态会转换为SHUTTING_DOWN,且集群会关闭,从而终止虚拟服务器实例。集群上存储的所有数据都会被删除,而其他地方(如Amazon S3存储段)中存储的信息会保存下来。***,当所有的集群活动完成时,集群的状态会标记为COMPLETED。
除非启用了终止保护,否则,集群流程期间的任何故障都会终止该集群及其所有的虚拟服务器实例,集群上存储的任何数据都会被删除,集群的状态会标记为FAILED。
4. 和Amazon EMR交互的方式
有多种可以和Amazon EMR交互的方式。
(1)Console(控制台):这是一种图形界面,可用于启动和管理集群。借助这个界面,用户可以填写各种Web窗体,指定待启动集群的详细信息,查看现有集群的详细信息,调试和终止集群。使用控制台是开始使用Amazon EMR的最简单方式,不需要编程知识。控制台是在线提供的,网址是https://console.aws.amazon.com/elasticmapreduce/。
(2)AWS CLI(命令行界面):一种可在用户的本地计算机上运行的客户端应用程序,用于连接Amazon EMR,以及创建和管理集群。AWS CLI包含特定于Amazon EMR的功能丰富的命令集。用户可以使用它来编写脚本,以实现启动和管理集群的自动化。如果用户希望从命令行工作,则***的选择是使用AWS CLI。
(3)Amazon EMR CLI:一种可在用户的本地计算机上运行的旧式客户端应用程序,用于连接Amazon EMR,以及创建和管理集群。用户可以使用它来编写脚本,以实现启动和管理集群的自动化。Amazon EMR CLI的功能开发已停止。我们鼓励使用Amazon EMR CLI的客户迁移至AWS CLI。新用户应该下载AWS CLI,而不是Amazon EMR CLI。
(4)Software Development Kit(软件开发工具包,SDK):AWS提供一个带有各种函数的软件开发工具包,这些函数会调用Amazon EMR创建和管理集群。借助该软件开发工具包,用户可以编写应用程序,用于自动处理集群的创建和管理流程。如果用户希望扩展或者自定义Amazon EMR的功能,那么软件开发工具包是***的选择。用户可以从http://aws.amazon.com/sdkforjava/下载适用于Java的AWS开发工具包。
(5)Web Service API:AWS提供低级别的界面,可以用来直接使用JSON调用Web服务。如果想要创建调用Amazon EMR的自定义软件开发工具包,则***的选择是使用该API。有关详细信息请参阅Amazon EMR API Reference。
5. EMR架构的优缺点
存储和计算分离架构,其***的好处是集群按需创建,需要时创建集群,不需要时可以释放,从而节省成本。该架构非常适合云上按需获取资源的模式。这种方案的比较大的问题是性能比较低下;集群创建周期长,通常需要十分钟甚至以上;虚拟机性能下降比较明显,大数据是重负载任务,通常虚拟机上的性能相比物理机集群下降60%;集群规模受限,不能像物理机集群那样一个集群包含几千台虚拟机。这就意味着该架构只适合中小客户,只能处理几百GB规模的小数据。
【本文为51CTO专栏作者“大数据和云计算”的原创稿件,转载请通过微信公众号获取联系和授权】