当前位置: 首页 > 知识库问答 >
问题:

从Java API启动AWS弹性mapreduce jobflow。我的蜂巢脚本应该去哪里?

云育
2023-03-14

我一直在使用Amazon Elastic MapReduce和Hive开发一个数据处理应用程序。现在,当我使用交互模式作业流SSH并运行它们时,Hive脚本就可以工作了,现在我尝试使用AWS Java API创建一个作业流。

使用http://docs.amazonwebservices.com/elasticmapreduce/latest/developerguide/calling-emr-with-java-sdk.html作为起点,我创建了如下步骤配置

StepConfig runScript = new StepConfig().withName("Prepare Admin")
.withActionOnFailure("TERMINATE_JOB_FLOW")
.withHadoopJarStep(oStepFactory.newRunHiveScriptStep(scriptPath, args));

我假设/希望scriptPath可以是我的Hive脚本的s3 url,比如:s3://bucketname/hive-script。我找到的唯一文档讨论了如何从主节点的文件系统中使用脚本。但是,如果主节点是为了这个作业流而启动的实例,我不明白如何将任何脚本(配置单元或其他方式)添加到文件系统中。

当我尝试我的想法(将一个s3位置传递给stepFactory方法)时,runScript步骤失败了。

我已经通过AWS控制台检查了日志。stdout日志以

2012-11-19 19:28:33 GMT-执行cmd时出错:/home/hadoop/.versions/hive-0.7.1/bin/hive'-f''s3://anet-emr/scripts/admin.q''-d rawdatalocation=s3://anet-emr/raw-d year=2010-d cycle=1'

stderr日志以

java.lang.nosuchmethoderror:org.apache.commons.cli.commandline.getOptionProperties(ljava/lang/string;)ljava/util/properties;在org.apache.hadoop.hive.cli.optionsprocessor.process_stage1(optionsprocessor.java:115)在org.apache.hadoop.hive.cli.cli.clidriver.main(clidriver.java:399)在sun.reflect.nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.java:39)在ar.main(runjar.java:155)在org.apache.hadoop.mapred.jobshell.run(jobshell.java:54)在org.apache.hadoop.util.toolrunner.run(toolrunner.java:65)在org.apache.hadoop.util.toolrunner.run(toolrunner.java:79)在org.apache.hadoop.mapred.jobshell.main(jobshell.java:68)

控制器日志中有

2012-11-19T19:28:27.406 z信息执行log.file=syslog-dhadoop.home.dir=/home/hadoop-dhadoop.id.str=hadoop-dhadoop.root.logger=INFO,DRFA-djava.io.tmpdir=/mnt/var/lib/hadoop/steps/3/tmp-djava.library.path=/home/hadoop/library.path=/home/hadoop/lib/native/linux-i386-32 org.apache.hadoop.mapred.jobshell://US-EAST-1.ElasticMapReduce/libs/hive/--hive-版本最新--run-hive-script--args-f s3:/aNet-emr/scripts/admin.q-d rawdatalocation=s3://aNet-emr/raw-d year=2010-d cycle=1 2012-11-19t19:28:34.143 z信息执行以ret val 255 201 2-11-19t19:28:34.143 z警告步骤失败,retval错误

问题似乎在于我通过Amazon的API传递给Hive对Apache CLI库的调用的参数...我尝试过用“-d arg1=val1-d arg2=val2”传递单个字符串,我尝试过“-d,arg1=val1等”。我已经尝试了各种方法来分解成字符串数组-例如{“-d”,“arg1=val1”...}。找不到任何文档的适当方式做到这一点!

谢谢你的帮助,科尔曼

共有1个答案

薛利
2023-03-14

嗨,这段代码适合我:

String accessKey = "";
String secretKey = "";
 AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
   AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);

   StepFactory stepFactory = new StepFactory();

   StepConfig enabledebugging = new StepConfig()
       .withName("Enable debugging")
       .withActionOnFailure("TERMINATE_JOB_FLOW")
       .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

   StepConfig installHive = new StepConfig()
       .withName("Install Hive")
       .withActionOnFailure("TERMINATE_JOB_FLOW")
       .withHadoopJarStep(stepFactory.newInstallHiveStep());

   StepConfig runScript = new StepConfig()
        .withName("Run Script")
        .withActionOnFailure("TERMINATE_JOB_FLOW")
        .withHadoopJarStep(stepFactory.newRunHiveScriptStep("s3://dummy/dummy.hive"));


   RunJobFlowRequest request = new RunJobFlowRequest()
       .withName("Hive Interactive")
       .withSteps(enabledebugging, installHive, runScript)
       .withLogUri("s3://dummy/")
       .withInstances(new JobFlowInstancesConfig()
           .withHadoopVersion("0.20.205")
           .withInstanceCount(1)
           .withKeepJobFlowAliveWhenNoSteps(false)
           .withMasterInstanceType("m1.small")
           .withSlaveInstanceType("m1.small"));

   RunJobFlowResult result = emr.runJobFlow(request);

希望这有所帮助:)

 类似资料:
  • 蜂巢平台(OpenComb Platform)是一个基于 PHP 5.3 实现的深度云计算应用框架。蜂巢采用了扩展模式,系统中的功能和特性,都由扩展提供。 因此,用户可以通过开发和安装扩展来部署各种类型的互联网应用。

  • 我正在执行一个HQL查询,该查询几乎没有连接、联合和插入覆盖操作,如果只运行一次,它就可以正常工作。 如果我第二次执行相同的作业,我就会面临这个问题。有人能帮我确定在哪种情况下我们会得到这个异常吗?

  • 我有一个将protobuf写入HDFS的数据管道,现在我需要一种查询该数据的方法。我偶然发现了象鸟和蜂巢,并一直在努力使这个解决方案运行了一天。 3.)启动hive并添加core、hive和hadoop-compat jar 4.)为.proto文件生成java类;用protobuf-java-3.0.0.jar封装并添加到hive中 5.)将protobuf-java-3.0.0.jar添加到h

  • 按照惯例,用户接口的ActionListener应该去哪里?我有几个选择,但似乎没有一个是对的。 速记: null 我可以在GUI中内联声明一个新的ActionListener,存储它,然后它/将其指针传递到需要它的地方。 我可以让GUI本身实现ActionListener,并将对自身的引用传递到需要它的地方。 我可以在主逻辑中内联声明一个新的ActionListener(这是有意义的,因为按钮执

  • 轻应用-审批(如果没有点击“添加”) 审批支持手机端和电脑端,电脑端操作与手机端相同。

  • 1.手机端 手机轻推-通讯录-我的企业-管理-设置新人邀请 手机端上可以处理一些简单的管理操作如设置新人申请包括邀请权限、邀请方式、审核方式的设置,以及处理新成员/访客加入团队申请。 2.电脑端 登录企业管理网页web.qingtui.com/tms或者登录电脑端轻推-企业管理-输入轻推账号和密码-进入企业管理(若您同时是多个企业的管理员,选择您想要管理的企业)。