Amazon EMR:如何在参数中添加内联shell脚本的Amazon EMR MapReduce / Hive / Spark步骤?

时间:2018-03-29 05:15:38

标签: shell hadoop hive emr amazon-emr

例如,我有两个Hive作业,其中一个作业的输出用作第二个作业中的参数/变量。我可以在终端上成功运行以下命令,将我的结果发送到EMR集群的主节点上。

[hadoop@ip-10-6-131-223 ~]$ hive -f s3://MyProjectXYZ/bin/GetNewJobDetails_SelectAndOverwrite.hql --hivevar LatestLastUpdated=$(hive -f s3://MyProjectXYZ/bin/GetNewJobDetails_LatestLastUpdated.hql)

但是,似乎我无法添加Hive步骤来运行GetNewJobDetails_SelectAndOverwrite.hql并将参数文本框设置为--hivevar LatestLastUpdated=$(hive -f s3://MyProjectXYZ/bin/GetNewJobDetails_LatestLastUpdated.hql)。 错误是:

  

详细信息:FAILED:ParseException行7:61无法识别附近的输入   ' $' '('' hive' in expression specification

     

JAR位置:command-runner.jar

     

主要课程:无

     

参数:hive-script --run-hive-script --args -f   S3://MyProjectXYZ/bin/GetNewJobDetails_SelectAndOverwrite.hql   --hivevar LatestLastUpdated = $(hive -f s3://MyProjectXYZ/bin/GetNewJobDetails_LatestLastUpdated.hql)

     

失败时采取行动:取消并等待

我还尝试使用command-runner.jar来运行第一个hive命令。它仍然不起作用:

  

NoViableAltException(15 @ [412:1:atomExpression :(常量|(   intervalExpression)=> intervalExpression | castExpression |   extractExpression | floorExpression | caseExpression | whenExpression   | (subQueryExpression)=> (subQueryExpression) - > ^(   TOK_SUBQUERY_EXPR TOK_SUBQUERY_OP subQueryExpression)| (功能   )=>功能| tableOrColumn | expressionsInParenthesis [true]);])at   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser $ DFA36.specialStateTransition(HiveParser_IdentifiersParser.java:31808)     在org.antlr.runtime.DFA.predict(DFA.java:80)at   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.atomExpression(HiveParser_IdentifiersParser.java:6746)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceFieldExpression(HiveParser_IdentifiersParser.java:6988)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceUnaryPrefixExpression(HiveParser_IdentifiersParser.java:7324)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceUnarySuffixExpression(HiveParser_IdentifiersParser.java:7380)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceBitwiseXorExpression(HiveParser_IdentifiersParser.java:7542)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceStarExpression(HiveParser_IdentifiersParser.java:7685)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedencePlusExpression(HiveParser_IdentifiersParser.java:7828)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceConcatenateExpression(HiveParser_IdentifiersParser.java:7967)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceAmpersandExpression(HiveParser_IdentifiersParser.java:8177)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceBitwiseOrExpression(HiveParser_IdentifiersParser.java:8314)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceSimilarExpressionPart(HiveParser_IdentifiersParser.java:8943)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceSimilarExpressionMain(HiveParser_IdentifiersParser.java:8816)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceSimilarExpression(HiveParser_IdentifiersParser.java:8697)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceEqualExpression(HiveParser_IdentifiersParser.java:9537)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceNotExpression(HiveParser_IdentifiersParser.java:9703)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceAndExpression(HiveParser_IdentifiersParser.java:9812)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.precedenceOrExpression(HiveParser_IdentifiersParser.java:9953)     在   org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.expression(HiveParser_IdentifiersParser.java:6686)     在   org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:42062)     在   org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.searchCondition(HiveParser_FromClauseParser.java:6446)     在   org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.whereClause(HiveParser_FromClauseParser.java:6364)     在   org.apache.hadoop.hive.ql.parse.HiveParser.whereClause(HiveParser.java:41844)     在   org.apache.hadoop.hive.ql.parse.HiveParser.atomSelectStatement(HiveParser.java:36755)     在   org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:36987)     在   org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:36504)     在   org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:35822)     在   org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:35710)     在   org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2284)     在   org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1333)     在   org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:208)     在   org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)     在   org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)     在org.apache.hadoop.hive.ql.Driver.compile(Driver.java:468)at   org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1317)at at   org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1457)at   org.apache.hadoop.hive.ql.Driver.run(Driver.java:1237)at   org.apache.hadoop.hive.ql.Driver.run(Driver.java:1227)at at   org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)     在   org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)     在   org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)     在   org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:336)     在   org.apache.hadoop.hive.cli.CliDriver.processReader(CliDriver.java:474)     在   org.apache.hadoop.hive.cli.CliDriver.processFile(CliDriver.java:490)     在   org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:793)     在org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)at   org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.apache.hadoop.util.RunJar.run(RunJar.java:234)at at   org.apache.hadoop.util.RunJar.main(RunJar.java:148)失败:   ParseException行7:61无法识别' $'附近的输入。 '('' hive' in   表达规范

1 个答案:

答案 0 :(得分:0)

您应该在EMR上执行两个hive命令作为两个不同的步骤。参数也应该作为列表而不是字符串传递。您可以按空格分割您的配置单元命令(''),它将返回一个列表并将此列表作为参数传递给EMR步骤。

参考:https://docs.aws.amazon.com/cli/latest/reference/emr/add-steps.html