jar 文件的参数不正确 - 使用 Boto3 启动 EMR 集群

Posted

技术标签:

【中文标题】jar 文件的参数不正确 - 使用 Boto3 启动 EMR 集群【英文标题】:Arguments for jar file incorrect - spinning up EMR cluster using Boto3 【发布时间】:2020-10-28 15:14:27 【问题描述】:

我正在使用库 Boto3 编写 Python 代码来启动 EMR 集群。在Steps 部分,我列出了我的 jar 文件。这个 jar 文件是一个 Scala 脚本,它接受如下参数:

-l 'some_vaue' - s 'some_value' 

如何在StepsArgs 值中正确输入这些类型的参数? 这是我所拥有的:

jar_file = 'file.jar'
ARG1 = 'some_value'
ARG2 = 'some_value' 
steps = [
            
            'Name': 'Running jar file step',   
                    'ActionOnFailure': 'CONTINUE',
                    'HadoopJarStep': 
                        'Jar': 's3://mybucket/0'.format(jar_file),
                        'Args': [
                            '-l 0'.format(ARG1), '-s 1'.format(ARG2)
                        ]
                    
                
        ] 

我的集群因 jar 步骤错误而终止,我收到此错误:

Error: Unknown option -l some_value -s some_value
Usage: spark-zoning [options]

  -l, --id1 <value> 
  -s, --id2 <value>
Exception in thread "main" scala.MatchError: None (of class scala.None$)
    at spark_pkg.SparkMain$.main(SparkMain.scala:208)
    at spark_pkg.SparkMain.main(SparkMain.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

如何正确提供参数?

【问题讨论】:

'Args': ['-l', ARG1, '-s', ARG2] @jordanm 谢谢 - 似乎奏效了!你想把它写成答案吗? 【参考方案1】:

@jordanm 的回答是正确的: 我将我的论点改为如下所示:'Args': ['-l', ARG1, '-s', ARG2]

【讨论】:

以上是关于jar 文件的参数不正确 - 使用 Boto3 启动 EMR 集群的主要内容,如果未能解决你的问题,请参考以下文章

Boto3 Cloudformation 错误:模板格式错误:不支持的结构

Boto3没有将zip文件上传到S3 python

编写 Boto3 过滤器以使用自定义标签名称的正确方法是啥?

Boto3 get_waiter 不会正确停止和启动实例

AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限

使用 argparse 将 Shell 参数传递给 Boto3 Python