EmrCluster - AWS Data Pipeline

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。了解更多

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

EmrCluster

表示 Amazon EMR 集群的配置。EmrActivityHadoopActivity 使用此对象来启动集群。

调度器

计划程序提供了一种方法来在 Hadoop 集群中指定资源分配和作业优先级。管理员或用户可以为各类用户和应用程序选择一个计划程序。计划程序可能使用队列来向用户和应用程序分配资源。您在创建集群时会设置这些队列。随后,您可以将特定类型的工作和用户设为优先于其他工作和用户。这样可以高效地使用集群资源,并允许多个用户将工作提交到集群。有以下三类计划程序可用:

  • FairScheduler— 尝试在相当长的一段时间内均匀地安排资源。

  • CapacityScheduler— 使用队列允许群集管理员将用户分配到不同优先级和资源分配的队列。

  • Default - 由集群使用 (可由您的站点配置)。

Amazon EMR 发布版本

Amazon EMR 版本是一组来自大数据生态系统的开源应用程序。每个版本都包含不同的大数据应用程序、组件和功能,您可以在创建集群时选择让 Amazon EMR 安装和配置这些应用程序、组件和功能。可使用发行版标注指定版本。版本标签的格式是 emr-x.x.x。例如,emr-5.30.0。Amazon 基于发布标签进行EMR集群,emr-4.0.0然后使用该releaseLabel属性来指定EmrCluster对象的发布标签。早期版本使用 amiVersion 属性。

重要

使用发行版 5.22.0 或更高版本创建的所有亚马逊EMR集群都使用签名版本 4 来验证向 Amazon S3 发出的请求。某些早期发布版本使用签名版本 2。对签名版本 2 的支持即将停止。有关更多信息,请参阅 Amazon S3 更新 — SIGv2 弃用期延长并修改。我们强烈建议您使用支持签名EMR版本 4 的 Amazon 发行版。对于从 EMR 4.7.x 开始的早期版本,该系列的最新版本已更新为支持 Signature 版本 4。使用早期EMR版本时,我们建议您使用该系列中的最新版本。此外,请避免使用 EMR 4.7.0 之前的版本。

注意事项和限制

使用最新版本的任务运行程序

如果您将自管理的 EmrCluster 对象与版本标签结合使用,请使用最新的任务运行程序。有关任务运行程序的更多信息,请参阅使用任务运行程序。您可以为所有 Amazon EMR 配置分类配置属性值。有关更多信息,请参阅 Amazon EMR 发行指南中的配置应用程序EmrConfiguration、和属性对象参考。

Support IMDSv2

此前,仅 AWS Data Pipeline 支持IMDSv1。现在, AWS Data Pipeline 支持IMDSv2亚马逊 EMR 5.23.1、5.27.1 和 5.32 或更高版本,以及亚马逊 6.2 或更高版本。EMRIMDSv2在从实例检索元数据信息时,使用面向会话的方法来更好地处理身份验证。您应使用 TaskRunner -2.0 创建用户管理的资源,将您的实例配置为进行IMDSv2调用。

亚马逊 EMR 5.32 或更高版本和亚马逊 EMR 6.x

亚马逊 EMR 5.32或更高版本和6.x版本系列使用Hadoop版本3.x,与Hadoop版本2.x相比,该版本在评估Hadoop的类路径的方式上引入了重大变化。像 Joda-Time 这样的常见库已从类路径中删除。

如果 EmrActivityHadoopActivity 运行的 Jar 文件依赖于 Hadoop 3.x 中已删除的库,则该步骤将失败,并显示错误 java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundException。对于使用 Amazon EMR 5.x 发行版没有问题运行的 Jar 文件,可能会发生这种情况。

要解决此问题,在启动 EmrActivityHadoopActivity 之前,必须将 Jar 文件依赖关系复制到 EmrCluster 对象上的 Hadoop 类路径中。我们提供 bash 脚本来执行此操作。bash 脚本可在以下位置找到,其中 MyRegion 例如,是您的EmrCluster对象运行的 AWS 区域us-west-2

s3://datapipeline-MyRegion/MyRegion/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh

脚本的运行方式取决于EmrActivity或是在由 AWS Data Pipeline 自我管理的资源管理的资源上HadoopActivity运行还是在自管理的资源上运行。

如果您使用由管理的资源 AWS Data Pipeline,请bootstrapActionEmrCluster对象添加。bootstrapAction 指定要复制作为参数的脚本和 Jar 文件。每个 EmrCluster 对象最多可以添加 255 个 bootstrapAction 字段,也可以向已有引导操作的 EmrCluster 对象添加 bootstrapAction 字段。

要将此脚本指定为引导操作,请使用以下语法,其中JarFileRegion是保存 Jar 文件的区域,每个 MyJarFilen 是 Amazon S3 中要复制到 Hadoop 类路径的 Jar 文件的绝对路径。请勿指定默认位于 Hadoop 类路径中的 Jar 文件。

s3://datapipeline-MyRegion/MyRegion/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh,JarFileRegion,MyJarFile1,MyJarFile2[, ...]

以下示例指定了一个引导操作,该操作将复制 Amazon S3 中的两个 Jar 文件:my-jar-file.jaremr-dynamodb-tool-4.14.0-jar-with-dependencies.jar。此示例使用 us-west-2 区域。

{ "id" : "MyEmrCluster", "type" : "EmrCluster", "keyPair" : "my-key-pair", "masterInstanceType" : "m5.xlarge", "coreInstanceType" : "m5.xlarge", "coreInstanceCount" : "2", "taskInstanceType" : "m5.xlarge", "taskInstanceCount": "2", "bootstrapAction" : ["s3://datapipeline-us-west-2/us-west-2/bootstrap-actions/latest/TaskRunner/copy-jars-to-hadoop-classpath.sh,us-west-2,s3://path/to/my-jar-file.jar,s3://dynamodb-dpl-us-west-2/emr-ddb-storage-handler/4.14.0/emr-dynamodb-tools-4.14.0-jar-with-dependencies.jar"] }

我们强烈建议保存并激活管道,以便对新 bootstrapAction 的更改生效。

如果您使用自管理资源,则可以将脚本下载到集群实例,然后使用SSH从命令行运行。该脚本将在该目录中创建一个名为 /etc/hadoop/conf/shellprofile.d 的目录和一个名为 datapipeline-jars.sh 的文件。作为命令行参数提供的 jar 文件被复制到脚本创建的名为 /home/hadoop/datapipeline_jars 的目录中。如果您的集群设置不同,请在下载脚本后对脚本进行相应的修改。

在命令行上运行脚本的语法与使用前一个示例中所示的 bootstrapAction 略有不同。参数之间应使用空格而不是逗号,如以下示例所示。

./copy-jars-to-hadoop-classpath.sh us-west-2 s3://path/to/my-jar-file.jar s3://dynamodb-dpl-us-west-2/emr-ddb-storage-handler/4.14.0/emr-dynamodb-tools-4.14.0-jar-with-dependencies.jar

亚马逊EMR权限

创建自定义IAM角色时,请仔细考虑集群执行其工作所需的最低权限。请务必授予访问所需资源的权限,例如亚马逊 S3 中的文件或亚马逊、亚马逊 Redshift 或 DynamoDB 中的数据。RDS如果您希望将 visibleToAllUsers 设置为 False,您的角色必须具有适当的权限才能执行此操作。请注意,DataPipelineDefaultRole 没有这些权限。您必须提供 DefaultDataPipelineResourceRoleDataPipelineDefaultRole 角色的联合作为 EmrCluster 对象角色或创建您自己的角色来实现此目的。

语法

对象调用字段 描述 槽类型
schedule 该对象在计划间隔的执行中调用。指定对另一个对象的计划引用,以便设置该对象的依赖项执行顺序。您可以明确设置针对该对象的计划以满足该要求,例如,指定 "schedule": {"ref": "DefaultSchedule"}。在大多数情况下,最好将计划引用放在默认管道对象上,以便所有对象继承该计划。或者,如果管道具有一个计划树 (计划位于主计划中),您可以创建具有计划引用的父对象。有关示例可选计划配置的更多信息,请参阅 https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-schedule.html 引用对象,例如, "schedule":{"ref":"myScheduleId"}

可选字段 描述 槽类型
actionOnResource失败 在此资源发生资源失败后执行的操作。有效值为“retryall”(在指定的持续时间内对集群重试所有任务) 和“retrynone”。 String
actionOnTask失败 在此资源发生任务失败后执行的操作。有效值为“continue”(意味着不终止集群) 和“terminate”。 String
additionalMasterSecurityGroupIds EMR集群中其他主安全组的标识符,格式为 sg XXXX6a -01。有关更多信息,请参阅《亚马逊EMR管理指南》中的 Amazon EMR 其他安全组 String
additionalSlaveSecurityGroupIds EMR集群中其他从属安全组的标识符,格式如下sg-01XXXX6a String
amiVersion 亚马逊EMR用于安装集群节点的 Amazon 系统映像 (AMI) 版本。有关更多信息,请参阅 Amazon EMR 管理指南 String
applications 要安装在集群中的应用程序,带逗号分隔的参数。默认情况下,安装 Hive 和 Pig。此参数仅适用于亚马逊 4.0 及更高EMR版本。 String
attemptStatus 来自远程活动的最近报告的状态。 String
attemptTimeout 远程工作完成的超时时间。如果设置此字段,则可能会重试未在设定的开始时间内完成的远程活动。 周期
availabilityZone 用于运行集群的可用区。 String
bootstrapAction 在集群启动时要运行的操作。您可以指定逗号分隔的参数。要指定多个操作 (最多 255 个),请添加多个 bootstrapAction 字段。默认行为是启动集群,而不执行任何引导操作。 String
配置 Amazon EMR 集群的配置。此参数仅适用于亚马逊 4.0 及更高EMR版本。 引用对象,例如,"configuration":{"ref":"myEmrConfigurationId"}
coreInstanceBid价格 您愿意为 Amazon EC2 实例支付的最高竞价价格。如果指定了出价,Amazon 将EMR使用竞价型实例作为实例组。已在中指定USD。 String
coreInstanceCount 要用于集群的核心节点的数目。 整数
coreInstanceType 用于核心节点的 Amazon EC2 实例的类型。请参阅 Amazon EMR 集群支持的 Amazon EC2 实例 String
coreGroupConfiguration Amazon EMR 集群核心实例组的配置。此参数仅适用于亚马逊 4.0 及更高EMR版本。 引用对象,例如,“configuration”: {“ref”: “myEmrConfigurationId”}
coreEbsConfiguration 将连接到 Amazon EMR 集群中核心组中每个核心节点的 Amazon EBS 卷的配置。有关更多信息,请参阅 Amazon EC2 用户指南中的支持EBS优化的实例类型 引用对象,例如,“coreEbsConfiguration”: {“ref”: “myEbsConfiguration”}
customAmiId 仅适用于 Amazon EMR 发行版 5.7.0 及更高版本。指定在亚马逊配置亚马逊EMREC2实例时AMI要使用的自定义的 AMI ID。也可以使用它来代替引导操作以自定义集群节点配置。有关更多信息,请参阅《Amazon EMR 管理指南》中的以下主题。使用自定义 AMI String
EbsBlockDeviceConfig

与实例组关联的请求的 Amazon EBS 块储存设备的配置。包含指定数量的卷,这些卷将与实例组中的每个实例相关联。包括 volumesPerInstancevolumeSpecification,其中:

  • volumesPerInstance是具有特定EBS卷配置的卷数量,这些卷配置将与实例组中的每个实例相关联。

  • volumeSpecification是亚马逊的EBS卷规格,例如卷类型和大小IOPS,以千兆字节 (GiB) 为单位,将为连接至亚马逊集群EC2中的实例的EBS卷请求这些规格。EMR

引用对象,例如,“EbsBlockDeviceConfig”: {“ref”: “myEbsBlockDeviceConfig”}
emrManagedMasterSecurityGroupId Amazon EMR 集群的主安全组的标识符,格式为sg-01XXXX6a。有关更多信息,请参阅 Amazon EMR 管理指南中的配置安全组 String
emrManagedSlaveSecurityGroupId Amazon EMR 集群的从属安全组的标识符,格式如下sg-01XXXX6a String
enableDebugging 在 Amazon EMR 集群上启用调试。 String
failureAndRerun模式 描述依赖项失败或重新运行时的使用者节点行为。 枚举
hadoopSchedulerType 集群的计划程序类型。有效类型为: PARALLEL_FAIR_SCHEDULING PARALLEL_CAPACITY_SCHEDULING DEFAULT_SCHEDULER 枚举
httpProxy 客户端用来连接AWS服务的代理主机。 参考对象,例如 httpProxy ““: {" ref”:” myHttpProxy Id "}
initTimeout 资源启动前要等待的时间长度。 周期
keyPair 用于登录亚马逊EMR集群主节点的 Amazon EC2 密钥对。 String
lateAfterTimeout 管道启动后经过的时间,在此时间内,对象必须完成。仅当计划类型未设置为 ondemand 时才会触发。 周期
masterInstanceBid价格 您愿意为 Amazon EC2 实例支付的最高竞价价格。它是一个介于 0 和 20.00 之间(不含)的数字。已在中指定USD。设置此值可启用 Amazon EMR 集群主节点的竞价型实例。如果指定了出价,Amazon 将EMR使用竞价型实例作为实例组。 String
masterInstanceType 用于主节点的 Amazon EC2 实例的类型。请参阅 Amazon EMR 集群支持的 Amazon EC2 实例 String
masterGroupConfiguration Amazon EMR 集群主实例组的配置。此参数仅适用于亚马逊 4.0 及更高EMR版本。 引用对象,例如,“configuration”: {“ref”: “myEmrConfigurationId”}
masterEbsConfiguration 将连接到 Amazon EMR 集群中主组中每个主节点的 Amazon EBS 卷的配置。有关更多信息,请参阅 Amazon EC2 用户指南中的支持EBS优化的实例类型 引用对象,例如,“masterEbsConfiguration”: {“ref”: “myEbsConfiguration”}
maxActiveInstances 组件的并发活动实例的最大数量。重新运行不计入活动实例数中。 整数
maximumRetries 失败后的最大重试次数。 整数
onFail 当前对象失败时要运行的操作。 引用对象,例如,"onFail":{"ref":"myActionId"}
onLateAction 在尚未计划对象或对象仍未完成的情况下将触发的操作。 引用对象,例如,"onLateAction":{"ref":"myActionId"}
onSuccess 当前对象成功时要运行的操作。 引用对象,例如,"onSuccess":{"ref":"myActionId"}
parent 作为槽继承源的当前对象的父项。 引用对象,例如,"parent":{"ref":"myBaseObjectId"}
pipelineLogUri 用于上传管道日志的 Amazon S3URI(例如 's3: BucketName ///Key/ ')。 String
region Amazon EMR 集群应在其中运行的区域的代码。默认情况下,该集群在管道所在的区域中运行。您可以在从属数据集所在的区域中运行集群。 枚举
releaseLabel EMR集群的发布标签。 String
reportProgressTimeout 远程工作对 reportProgress 的连续调用的超时时间。如果设置此字段,则未报告指定时段的进度的远程活动可能会被视为停滞且已重试。 周期
resourceRole AWS Data Pipeline 用于创建 Amazon EMR 集群的IAM角色。默认角色是 DataPipelineDefaultRole String
retryDelay 两次重试之间的超时时间。 周期
role 传递给 Amazon EMR 以创建EC2节点的IAM角色。 String
runsOn 禁止在该对象上使用此字段。 引用对象,例如,"runsOn":{"ref":"myResourceId"}
securityConfiguration 将应用于集群EMR的安全配置的标识符。此参数仅适用于亚马逊 4.8.0 及更高EMR版本。 String
serviceAccessSecurityGroupId Amazon EMR 集群的服务访问安全组的标识符。 字符串。它采用 sg-01XXXX6a 格式,例如,sg-1234abcd
scheduleType 您可以通过计划类型指定应在间隔开头还是结尾计划管道定义中的对象。值包括:cronondemandtimeseriestimeseries 计划表示在每个间隔结尾计划实例。cron 计划表示在每个间隔开头计划实例。ondemand 计划让您可以在每次激活时运行一次管道。您不需要克隆或重新创建管道以再次运行它。如果您使用 ondemand 计划,则必须在默认对象中指定它,并且该计划必须是在管道中为对象指定的唯一 scheduleType。要使用 ondemand 管道,请为每个后续运行调用 ActivatePipeline 操作。 枚举
subnetId 要在其中启动 Amazon EMR 集群的子网的标识符。 String
supportedProducts 在 Amazon EMR 集群上安装第三方软件的参数,例如,Hadoop 的第三方发行版。 String
taskInstanceBid价格 您愿意为EC2实例支付的最高竞价价格。一个介于 0 和 20.00 之间(不含)的数字。已在中指定USD。如果指定了出价,Amazon 将EMR使用竞价型实例作为实例组。 String
taskInstanceCount 要用于 Amazon EMR 集群的任务节点数量。 整数
taskInstanceType 用于任务节点的 Amazon EC2 实例的类型。 String
taskGroupConfiguration Amazon EMR 集群任务实例组的配置。此参数仅适用于亚马逊 4.0 及更高EMR版本。 引用对象,例如,“configuration”: {“ref”: “myEmrConfigurationId”}
taskEbsConfiguration 将附加到 Amazon EMR 集群中任务组中每个任务节点的 Amazon EBS 卷的配置。有关更多信息,请参阅 Amazon EC2 用户指南中的支持EBS优化的实例类型 引用对象,例如,“taskEbsConfiguration”: {“ref”: “myEbsConfiguration”}
terminateAfter 终止资源之前经过的小时数。 整数
VolumeSpecification

亚马逊EBS卷规格,例如卷类型和大小(以千兆字节 (GiB) 为单位),将为连接至亚马逊集群EC2中亚马逊实例的亚马逊EBS卷请求这些规格。IOPS EMR节点可以是核心节点、主节点或任务节点。

VolumeSpecification 包括:

  • iops() 整数。Amazon EBS 卷支持的每秒 I/O 操作数 (IOPS),例如 1000。有关更多信息,请参阅 Amazon EC2 用户指南中的 EBSI/O 特性

  • sizeinGB() 整数。Amazon 的EBS卷大小,以千兆字节 (GiB) 为单位,例如 500。有关卷类型和硬盘大小的有效组合的信息,请参阅 Amazon EC2 用户指南中的EBS卷类型

  • volumetType 字符串。亚马逊EBS卷类型,例如 gp2。支持的卷类型包括标准、gp2、io1、st1、sc1 和其他。有关更多信息,请参阅 Amazon EC2 用户指南中的EBS卷类型

引用对象,例如,“VolumeSpecification”: {“ref”: “myVolumeSpecification”}
useOnDemandOnLastAttempt 在最后一次尝试请求资源时,请求的是按需实例而不是 Spot 实例。这可确保如果所有之前的尝试都失败,则最后一次尝试不中断。 布尔值
workerGroup 禁止在该对象中使用该字段。 String

运行时字段 描述 槽类型
@activeInstances 当前计划的有效实例对象的列表。 参考对象,例如 activeInstances ““: {" ref”:” myRunnableObject Id "}
@actualEndTime 该对象的执行完成时间。 DateTime
@actualStartTime 该对象的执行开始时间。 DateTime
cancellationReason cancellationReason 如果此对象已取消,则为。 String
@cascadeFailedOn 对象在其上失败的依赖项链的描述。 参考对象,例如 cascadeFailedOn ““: {" ref”:” myRunnableObject Id "}
emrStepLog 步骤日志仅在 Amazon EMR 活动尝试时可用。 String
errorId 该对象失败时显示的错误 ID。 String
errorMessage 该对象失败时显示的错误消息。 String
errorStackTrace 该对象失败时显示的错误堆栈跟踪。 String
@failureReason 资源失败的原因。 String
@finishedTime 该对象完成其执行的时间。 DateTime
hadoopJobLog Hadoop 任务日志可用于尝试亚马逊EMR活动。 String
@healthStatus 对象的运行状况,反映进入终止状态的上个对象实例成功还是失败。 String
@healthStatusFromInstanceId 进入终止状态的上个实例对象的 ID。 String
@ T healthStatusUpdated ime 上次更新运行状况的时间。 DateTime
hostname 已执行任务尝试的客户端的主机名。 String
@lastDeactivatedTime 上次停用该对象的时间。 DateTime
@ T latestCompletedRun ime 已完成执行的最新运行的时间。 DateTime
@latestRunTime 已计划执行的最新运行的时间。 DateTime
@nextRunTime 计划下次运行的时间。 DateTime
reportProgressTime 远程活动报告进度的最近时间。 DateTime
@scheduledEndTime 对象的计划结束时间。 DateTime
@scheduledStartTime 对象的计划开始时间。 DateTime
@status 该对象的状态。 String
@version 用来创建对象的管道版本。 String
@waitingOn 此对象在其上处于等待状态的依赖项列表的描述。 参考对象,例如 waitingOn ““: {" ref”:” myRunnableObject Id "}

系统字段 描述 槽类型
@error 用于描述格式不正确的对象的错误消息。 String
@pipelineId 该对象所属的管道的 ID。 String
@sphere 对象在生命周期中的位置。组件对象产生实例对象,后者执行尝试对象。 String

另请参阅