我已经使用go AWS sdk创建了一个集群,并为其添加了一个作业流程步骤。 但是,当我以编程方式执行时,步骤的执行总是失败。 需要注意的一点是,当我从UI附加jar时,它会成功执行。
因此,当从UI附加jar时,这是步骤执行的结果(它成功运行并进入COMPLETED状态): (复制全文)
JAR位置:command-runner.jar 主类:无参数: spark-submit --deploy-mode cluster --class Hello s3://mdv-testing/Util-assembly-1.0.jar失败时的行动:继续
但是,当我以编程方式尝试时,这是步骤的输出:
状态:FAILED原因:未找到主类。 日志文件:s3://mdv-testing/awsLogs/j-3RW9K14BS6GLO/steps/s-337M25MLV3BHT/stderr.gz 详细信息:引起:java.lang.ClassNotFoundException:scala.reflect.api.TypeCreator JAR位置:s3://mdv-testing/Util-assembly-1.0.jar主类:无>参数:spark-submit" - class Hello" 失败时采取行动:取消并等待
我为参数尝试了各种组合,并意识到command-runner.jar从未出现过。 因此,我对代码进行了更改,并立即将 command-runner.jar 作为参数发送。此现在反映了与成功执行的步骤相同的详细信息。 这是修改后的输出:
状态:FAILED原因:未知错误。 日志文件:s3:// mdv-testing / awsLogs / j-3RW9K14BS6GLO / steps / s-3NI5ZO15VTWQK / JAR位置:command-runner.jar 主要类别:无 参数:" spark-submit --deploy-mode cluster --class Hello S3://mdv-testing/Util-assembly-1.0.jar 失败时采取行动:取消并等待
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)
}
有人可以帮帮我!!!我认为我非常接近解决方案,但这让我感到很难过:(
答案 0 :(得分:0)
我设法解决了这个问题。 对于那些正在努力解决类似问题的人来说,答案是我们需要在数组中单独发送参数。