AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
EmrCluster
表示 Amazon EMR 集群的配置。EmrActivity 和 HadoopActivity 使用此对象来启动集群。
调度器
计划程序提供了一种方法来在 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 弃用期延长并修改
注意事项和限制
使用最新版本的任务运行程序
如果您将自管理的 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 这样的常见库已从类路径中删除。
如果 EmrActivity 或 HadoopActivity 运行的 Jar 文件依赖于 Hadoop 3.x 中已删除的库,则该步骤将失败,并显示错误 java.lang.NoClassDefFoundError
或 java.lang.ClassNotFoundException
。对于使用 Amazon EMR 5.x 发行版没有问题运行的 Jar 文件,可能会发生这种情况。
要解决此问题,在启动 EmrActivity
或 HadoopActivity
之前,必须将 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,请bootstrapAction
向EmrCluster
对象添加。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.jar
和 emr-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
没有这些权限。您必须提供 DefaultDataPipelineResourceRole
和 DataPipelineDefaultRole
角色的联合作为 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 块储存设备的配置。包含指定数量的卷,这些卷将与实例组中的每个实例相关联。包括
|
引用对象,例如,“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 | 您可以通过计划类型指定应在间隔开头还是结尾计划管道定义中的对象。值包括:cron 、ondemand 和 timeseries 。timeseries 计划表示在每个间隔结尾计划实例。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”: {“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 |