在 AWS EMR SDK 中使用 AddJobFlowStep 的正确方法是什么?
What is the correct way to use the AddJobFlowStep in the AWS EMR sdk?
我使用 go AWS sdk 创建了一个集群并向其添加了一个作业流程步骤。
但是,当我以编程方式执行该步骤时,该步骤的执行总是失败。
值得注意的一点是,当我从 UI 附加 jar 时,它会成功执行。
因此,当从 UI 附加 jar 时,这是步骤执行的结果(它成功运行并移至 COMPLETED 状态):
(复制全文)
JAR location : command-runner.jar
Main class : None Arguments :
spark-submit --deploy-mode cluster --class Hello
s3://mdv-testing/Util-assembly-1.0.jar Action on failure: Continue
但是,这是我以编程方式尝试时的步骤输出:
Status :FAILED Reason : Main Class not found.
Log File : s3://mdv-testing/awsLogs/j-3RW9K14BS6GLO/steps/s-337M25MLV3BHT/stderr.gz
Details : Caused by: java.lang.ClassNotFoundException: scala.reflect.api.TypeCreator
JAR location : s3://mdv-testing/Util-assembly-1.0.jar Main class : None > Arguments : spark-submit "--class Hello"
Action on failure: Cancel and wait
我尝试了参数的各种组合,并意识到命令-runner.jar 从未出现过。
因此,我对代码进行了更改,现在将 command-runner.jar 作为参数发送。 现在反映了与成功执行的步骤相同的详细信息。
这是修改后的输出:
Status :FAILED Reason : Unknown Error.
Log File : s3://mdv-testing/awsLogs/j-3RW9K14BS6GLO/steps/s-3NI5ZO15VTWQK/
JAR location : command-runner.jar
Main class : None
Arguments : "spark-submit --deploy-mode cluster --class Hello
s3://mdv-testing/Util-assembly-1.0.jar
Action on failure: Cancel and wait
转到代码
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/emr"
)
func main() {
sess := session.New(&aws.Config{Region: aws.String("us-east-1")})
svc := emr.New(sess)
params := &emr.AddJobFlowStepsInput{
JobFlowId: aws.String("j-3RW9K14BS6aaa"),
Steps: []*emr.StepConfig{
{
ActionOnFailure: aws.String("CANCEL_AND_WAIT"), //TERMINATE_CLUSTER"),
HadoopJarStep: &emr.HadoopJarStepConfig{
Args: []*string{
aws.String("spark-submit --deploy-mode cluster --class Hello s3://mdv-testing/Util-assembly-1.0.jar"),
},
Jar: aws.String("command-runner.jar"), },
Name: aws.String("ReportJarExecution"),
},
},
}
resp, err := svc.AddJobFlowSteps(params)
if err != nil {
// Print the error, cast err to awserr. sError to get the Code and
// Message from an error.
fmt.Println(err.Error())
return
}
// Pretty-print the response data.
fmt.Println(resp)
}
谁能帮帮我!!!我想我已经非常接近解决方案了,但它在逃避我的时间:(
我设法解决了这个问题。
对于任何遇到类似问题的人来说,答案是我们需要在数组中单独发送参数。
我使用 go AWS sdk 创建了一个集群并向其添加了一个作业流程步骤。 但是,当我以编程方式执行该步骤时,该步骤的执行总是失败。 值得注意的一点是,当我从 UI 附加 jar 时,它会成功执行。
因此,当从 UI 附加 jar 时,这是步骤执行的结果(它成功运行并移至 COMPLETED 状态): (复制全文)
JAR location : command-runner.jar Main class : None Arguments : spark-submit --deploy-mode cluster --class Hello s3://mdv-testing/Util-assembly-1.0.jar Action on failure: Continue
但是,这是我以编程方式尝试时的步骤输出:
Status :FAILED Reason : Main Class not found. Log File : s3://mdv-testing/awsLogs/j-3RW9K14BS6GLO/steps/s-337M25MLV3BHT/stderr.gz Details : Caused by: java.lang.ClassNotFoundException: scala.reflect.api.TypeCreator JAR location : s3://mdv-testing/Util-assembly-1.0.jar Main class : None > Arguments : spark-submit "--class Hello" Action on failure: Cancel and wait
我尝试了参数的各种组合,并意识到命令-runner.jar 从未出现过。 因此,我对代码进行了更改,现在将 command-runner.jar 作为参数发送。 现在反映了与成功执行的步骤相同的详细信息。 这是修改后的输出:
Status :FAILED Reason : Unknown Error. Log File : s3://mdv-testing/awsLogs/j-3RW9K14BS6GLO/steps/s-3NI5ZO15VTWQK/ JAR location : command-runner.jar Main class : None Arguments : "spark-submit --deploy-mode cluster --class Hello s3://mdv-testing/Util-assembly-1.0.jar Action on failure: Cancel and wait
转到代码
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/emr"
)
func main() {
sess := session.New(&aws.Config{Region: aws.String("us-east-1")})
svc := emr.New(sess)
params := &emr.AddJobFlowStepsInput{
JobFlowId: aws.String("j-3RW9K14BS6aaa"),
Steps: []*emr.StepConfig{
{
ActionOnFailure: aws.String("CANCEL_AND_WAIT"), //TERMINATE_CLUSTER"),
HadoopJarStep: &emr.HadoopJarStepConfig{
Args: []*string{
aws.String("spark-submit --deploy-mode cluster --class Hello s3://mdv-testing/Util-assembly-1.0.jar"),
},
Jar: aws.String("command-runner.jar"), },
Name: aws.String("ReportJarExecution"),
},
},
}
resp, err := svc.AddJobFlowSteps(params)
if err != nil {
// Print the error, cast err to awserr. sError to get the Code and
// Message from an error.
fmt.Println(err.Error())
return
}
// Pretty-print the response data.
fmt.Println(resp)
}
谁能帮帮我!!!我想我已经非常接近解决方案了,但它在逃避我的时间:(
我设法解决了这个问题。 对于任何遇到类似问题的人来说,答案是我们需要在数组中单独发送参数。