例如,我有两个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 表达规范
答案 0 :(得分:0)
您应该在EMR上执行两个hive命令作为两个不同的步骤。参数也应该作为列表而不是字符串传递。您可以按空格分割您的配置单元命令(''),它将返回一个列表并将此列表作为参数传递给EMR步骤。
参考:https://docs.aws.amazon.com/cli/latest/reference/emr/add-steps.html