Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala AWS EMR客户端出错:java.lang.NoSuchFieldError:签名\u区域_Scala_Amazon Web Services - Fatal编程技术网

Scala AWS EMR客户端出错:java.lang.NoSuchFieldError:签名\u区域

Scala AWS EMR客户端出错:java.lang.NoSuchFieldError:签名\u区域,scala,amazon-web-services,Scala,Amazon Web Services,在部署的服务器上运行AWS EMR客户端时,我突然遇到了此错误。这不会在本地发生,并且运行良好。基本上,我有一个EMR客户端,用于构建和执行以下步骤: class EMRClient(emrClusterId:String) extends LazyLogging{ val accessKey = ...// access key val secretKey = ...//secret key val credentials = new BasicAWSCredentials(ac

在部署的服务器上运行AWS EMR客户端时,我突然遇到了此错误。这不会在本地发生,并且运行良好。基本上,我有一个EMR客户端,用于构建和执行以下步骤:

class EMRClient(emrClusterId:String) extends LazyLogging{

  val accessKey = ...// access key
  val secretKey = ...//secret key
  val credentials = new BasicAWSCredentials(accessKey, secretKey)
  val REGION = <my region>
  println(">>>>>>>>>>>>>>>>>>>>Initializing EMR client for clusterId " + emrClusterId + " . The region is " + REGION)
  val emr = AmazonElasticMapReduceClientBuilder
    .standard()
    .withCredentials(new AWSStaticCredentialsProvider(credentials))
    .withRegion(REGION)
    .build()

def executeHQLStep(s3ScriptPath:String, stepName:String, args:String = ""): AddJobFlowStepsResult= {
    val hqlScriptStep = buildHQLStep(hqlScriptPath, stepName, args)
    val stepSet =  new java.util.HashSet[StepConfig]()
    //stepSet.add(enableDebugging)
    stepSet.add(hqlScriptStep)
    executeJobFlowSteps(stepSet)
  }

  /**
    * Builds a StepConfig to be executed in a job flow for a given .hql file from S3
    * @param hqlScriptPath the location in S3 of the script file containing the script to run
    * @param args optional field for arguments for hive script.
    * @param stepName An identifier to give to EMR to name your Step
    * @return
    */
  private def buildHQLStep(hqlScriptPath:String, stepName:String, args:String= ""): StepConfig = {
    new StepConfig()
      .withName(stepName)
      .withActionOnFailure(ActionOnFailure.CANCEL_AND_WAIT)
      .withHadoopJarStep(stepFactory.newRunHiveScriptStep(hqlScriptPath, args))
  }

  private def executeJobFlowSteps(steps: java.util.Set[StepConfig]): AddJobFlowStepsResult = {
    emr.addJobFlowSteps(new AddJobFlowStepsRequest()
      .withJobFlowId(emrClusterId)
          .withSteps(steps)) // where the error is thrown
      }
}
类EMRClient(emrclustrid:String)扩展了懒散日志记录{
val accessKey=…//访问密钥
val secretKey=…//密钥
val凭证=新的基本凭证(accessKey、secretKey)
val区域=
println(“>>>>>>>>>>>>>>>>>>>正在初始化群集ID“+emrClusterId+”的EMR客户端。区域为“+region”)
val emr=AmazonElasticMapReduceClientBuilder
.standard()
.具有凭证(新AWSStaticCredentialsProvider(凭证))
.withRegion(地区)
.build()
def executeHQLStep(s3ScriptPath:String,stepName:String,args:String=”“):AddJobFlowStepsResult={
val hqlScriptStep=buildHQLStep(hqlScriptPath,stepName,args)
val stepSet=new java.util.HashSet[StepConfig]()
//stepSet.add(启用调试)
stepSet.add(hqlScriptStep)
executeJobFlowSteps(步骤集)
}
/**
*为S3中给定的.hql文件构建要在作业流中执行的StepConfig
*@param hqlScriptPath包含要运行的脚本的脚本文件在S3中的位置
*@param args配置单元脚本参数的可选字段。
*@param stepName给EMR一个标识符来命名您的步骤
*@返回
*/
私有def buildHQLStep(hqlScriptPath:String,stepName:String,args:String=”“):StepConfig={
新的StepConfig()
.withName(步骤名称)
.withActionOnFailure(ActionOnFailure.取消并等待)
.withHadoopJarStep(stepFactory.newRunHiveScriptStep(hqlScriptPath,args))
}
私有def executeJobFlowSteps(步骤:java.util.Set[StepConfig]):AddJobFlowStepResult={
emr.addJobFlowSteps(新的addJobFlowStepRequest()
.withJobFlowId(emrClusterId)
.withSteps(steps))//引发错误的位置
}
}
但是,当在服务器上实例化此类时,顶部的
println
语句都不可见,将调用my
executeJobFlowSteps
方法并抛出此错误:

java.lang.NoSuchFieldError:签名\u区域 在com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.executeadjobflowsteps(AmazonElasticMapReduceClient.java:439)上 位于com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient.addJobFlowSteps(AmazonElasticMapReduceClient.java:421) 在emrservices.EMRClient.executeJobFlowSteps(EMRClient.scala:64) 位于emrservices.EMRClient.executeHQLStep(EMRClient.scala:44)

这个项目由几个项目组成,类似于我的问题说它与它们的AWS依赖关系有关,但是所有的项目在build.sbt的库依赖关系中都有这样的内容:
“com.amazonaws”%“AWS java sdk”%“1.11.286”


你知道问题是什么吗?

这看起来像是将aws java sdk的1.11.286版本与旧版本(1.11.149)的aws java sdk核心混合在一起。较新的客户端正在使用添加到核心模块的新字段,但由于您的核心模块已过期,您将看到“无此类字段”错误。您能确保所有依赖项彼此同步吗?

这看起来像是将aws java sdk的1.11.286版本与旧版本(1.11.149)的aws java sdk核心混合在一起。较新的客户端正在使用添加到核心模块的新字段,但由于您的核心模块已过期,您将看到“无此类字段”错误。您能否确保所有依赖项都彼此同步?

回答得很好!然而,你可能想考虑把最后一句话移到问题的评论上,并把其余的回答作为你的回答。在答案中寻找反馈并不是SO的真正意图。答案很棒!然而,你可能想考虑把最后一句话移到问题的评论上,并把其余的回答作为你的回答。在答案中寻找反馈并不是SO的真正意图。