在 AWS EMR 5.0 上的 boto3 运行 中向 MR 作业添加流步骤
Add streaming step to MR job in boto3 running on AWS EMR 5.0
我正在尝试将我在 python 中编写的几个 MR 作业从 AWS EMR 2.4 迁移到 AWS EMR 5.0。到目前为止,我一直在使用 boto 2.4,但它不支持 EMR 5.0,所以我正在尝试转向 boto3。早些时候,在使用 boto 2.4 时,我使用 StreamingStep
模块指定输入位置和输出位置,以及我的 mapper 和 reducer 源文件的位置。使用这个模块,我实际上不必创建或上传任何 jar 到 运行 我的工作。但是,我无法在 boto3 文档中的任何地方找到该模块的等效项。如何将 boto3 中的流式传输步骤添加到我的 MR 作业中,这样我就不必将 jar 文件上传到 运行 了?
不幸的是,boto3 和 EMR API 的文档很少。字数统计示例至少如下所示:
import boto3
emr = boto3.client('emr')
resp = emr.run_job_flow(
Name='myjob',
ReleaseLabel='emr-5.0.0',
Instances={
'InstanceGroups': [
{'Name': 'master',
'InstanceRole': 'MASTER',
'InstanceType': 'c1.medium',
'InstanceCount': 1,
'Configurations': [
{'Classification': 'yarn-site',
'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]},
{'Name': 'core',
'InstanceRole': 'CORE',
'InstanceType': 'c1.medium',
'InstanceCount': 1,
'Configurations': [
{'Classification': 'yarn-site',
'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]},
]},
Steps=[
{'Name': 'My word count example',
'HadoopJarStep': {
'Jar': 'command-runner.jar',
'Args': [
'hadoop-streaming',
'-files', 's3://mybucket/wordSplitter.py#wordSplitter.py',
'-mapper', 'python2.7 wordSplitter.py',
'-input', 's3://mybucket/input/',
'-output', 's3://mybucket/output/',
'-reducer', 'aggregate']}
}
],
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole',
)
我不记得需要使用 boto 执行此操作,但我遇到了问题 运行 在不禁用 vmem-check-enabled
.
的情况下正确地进行简单的流式传输作业
此外,如果您的脚本位于 S3 上的某个位置,请使用 -files
下载它(将 #filename
附加到参数,使下载的文件在集群中作为 filename
可用)。
我正在尝试将我在 python 中编写的几个 MR 作业从 AWS EMR 2.4 迁移到 AWS EMR 5.0。到目前为止,我一直在使用 boto 2.4,但它不支持 EMR 5.0,所以我正在尝试转向 boto3。早些时候,在使用 boto 2.4 时,我使用 StreamingStep
模块指定输入位置和输出位置,以及我的 mapper 和 reducer 源文件的位置。使用这个模块,我实际上不必创建或上传任何 jar 到 运行 我的工作。但是,我无法在 boto3 文档中的任何地方找到该模块的等效项。如何将 boto3 中的流式传输步骤添加到我的 MR 作业中,这样我就不必将 jar 文件上传到 运行 了?
不幸的是,boto3 和 EMR API 的文档很少。字数统计示例至少如下所示:
import boto3
emr = boto3.client('emr')
resp = emr.run_job_flow(
Name='myjob',
ReleaseLabel='emr-5.0.0',
Instances={
'InstanceGroups': [
{'Name': 'master',
'InstanceRole': 'MASTER',
'InstanceType': 'c1.medium',
'InstanceCount': 1,
'Configurations': [
{'Classification': 'yarn-site',
'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]},
{'Name': 'core',
'InstanceRole': 'CORE',
'InstanceType': 'c1.medium',
'InstanceCount': 1,
'Configurations': [
{'Classification': 'yarn-site',
'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]},
]},
Steps=[
{'Name': 'My word count example',
'HadoopJarStep': {
'Jar': 'command-runner.jar',
'Args': [
'hadoop-streaming',
'-files', 's3://mybucket/wordSplitter.py#wordSplitter.py',
'-mapper', 'python2.7 wordSplitter.py',
'-input', 's3://mybucket/input/',
'-output', 's3://mybucket/output/',
'-reducer', 'aggregate']}
}
],
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole',
)
我不记得需要使用 boto 执行此操作,但我遇到了问题 运行 在不禁用 vmem-check-enabled
.
此外,如果您的脚本位于 S3 上的某个位置,请使用 -files
下载它(将 #filename
附加到参数,使下载的文件在集群中作为 filename
可用)。