一招解决MRS作业中shell节点获取Hive SQL执行结果【玩转华为云】
【摘要】 在DataArts作业中,Shell节点可以通过以下方式获取MRS Hive SQL节点执行的结果:使用EL表达式:当MRS Hive SQL节点的输出结果只有一个字段时,可以使用#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput(\"前一节点名\"),\"]\"),\"[\"),\"\\\\\"\")...
在DataArts作业中,Shell节点可以通过以下方式获取MRS Hive SQL节点执行的结果:
-
使用EL表达式:
- 当MRS Hive SQL节点的输出结果只有一个字段时,可以使用
#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput(\"前一节点名\"),\"]\"),\"[\"),\"\\\\\"\")}
这种形式的EL表达式来获取结果值。这种方法适用于前一SQL节点的输出结果只有一个字段,且输出结果值数据类型为String的场景。
- 当MRS Hive SQL节点的输出结果只有一个字段时,可以使用
-
通过For Each节点:
- 当MRS Hive SQL节点的输出结果为多个字段时,可以使用For Each节点来循环获取数据集中二维数组的值。具体配置如下:
- For Each节点数据集:
#{Job.getNodeOutput('前一节点名 ')}
- For Each节点子作业参数:
#{Loop.current[索引 ]}
- For Each节点数据集:
- 这种方法适用于输出结果值数据类型为String的场景,但需要将作业拆分为主作业和子作业。
- 当MRS Hive SQL节点的输出结果为多个字段时,可以使用For Each节点来循环获取数据集中二维数组的值。具体配置如下:
示例
假设在DataArts Studio中有一个作业,其中包含一个MRS Hive SQL节点和一个Shell节点,MRS Hive SQL节点执行了一个查询并返回了一个结果集,Shell节点需要获取这个结果集并进行后续处理。
-
MRS Hive SQL节点配置:
- 假设MRS Hive SQL节点执行了如下查询:
SELECT COUNT(*) FROM student_score;
- 这个查询返回了一个单字段的结果集,例如
[]
,表示student_score表中的记录数为100。
- 假设MRS Hive SQL节点执行了如下查询:
-
Shell节点配置:
- 在Shell节点中,可以使用以下EL表达式来获取MRS Hive SQL节点的输出结果:
result=$(#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("mrs_hive_sql_node"),"]"),"["),"\\\"")}) echo "Student score count: $result"
- 这个Shell脚本将获取MRS Hive SQL节点的输出结果,并将其存储在变量
result
中,然后打印出来。
- 在Shell节点中,可以使用以下EL表达式来获取MRS Hive SQL节点的输出结果:
-
作业执行结果:
- 当作业执行时,Shell节点将输出:
Student score count: 100
- 当作业执行时,Shell节点将输出:
通过这种方式,Shell节点成功获取了MRS Hive SQL节点执行的结果,并在后续的脚本中进行了处理。
在DataArts作业中,如果MRS Hive SQL节点执行失败,Shell节点可以通过以下方式进行处理:
-
配置失败重试:
- 在作业的高级参数中,可以配置MRS Hive SQL节点的失败重试策略。例如,可以设置最大重试次数和重试间隔时间,以便在节点执行失败后自动重试。
-
后续节点处理策略:
- 可以配置当前节点失败后,后续节点的处理策略。例如,可以选择终止后续节点执行计划、终止当前作业执行计划、继续执行下一节点或者挂起当前作业执行计划。
-
日志分析和错误处理:
- Shell节点可以通过分析MRS Hive SQL节点的日志来确定失败原因,并采取相应的处理措施。例如,可以检查SQL语法错误、资源不足或者权限问题等。
-
通知和报警:
- 可以配置通知机制,当MRS Hive SQL节点执行失败时,通过邮件、短信或者其他方式通知相关人员,以便及时处理问题。
-
数据恢复和修正:
- 如果MRS Hive SQL节点的执行失败导致数据不一致或者丢失,Shell节点可以执行数据恢复和修正操作,以确保数据的完整性和准确性。
-
人工干预:
- 在某些情况下,可能需要人工干预来解决MRS Hive SQL节点执行失败的问题。例如,当遇到复杂的业务逻辑错误或者数据问题时,人工检查和修正可能是必要的。
通过上述方法,Shell节点可以有效地处理MRS Hive SQL节点执行失败的情况,确保作业的稳定性和数据的准确性。
在DataArts中,可以通过以下方式在Shell节点中判断MRS Hive SQL节点是否执行成功:
-
使用Job内嵌对象的getNodeStatus方法:
- 可以使用
#{Job.getNodeStatus("mrs_hive_sql_node")}
这种形式的EL表达式来获取MRS Hive SQL节点的执行状态。如果节点执行成功,该方法将返回success
;如果执行失败,则返回fail
。
- 可以使用
-
分析MRS Hive SQL节点的日志:
- Shell节点可以通过分析MRS Hive SQL节点的日志来确定执行是否成功。例如,可以检查日志中是否存在错误信息或者异常堆栈。
-
检查MRS Hive SQL节点的输出结果:
- 如果MRS Hive SQL节点有输出结果,可以在Shell节点中使用
#{Job.getNodeOutput("mrs_hive_sql_node")}
这种形式的EL表达式来获取输出结果,并检查结果是否符合预期。
- 如果MRS Hive SQL节点有输出结果,可以在Shell节点中使用
-
使用For Each节点进行条件判断:
- 可以使用For Each节点来循环检查MRS Hive SQL节点的输出结果,并根据结果进行条件判断。例如,可以使用
#{Loop.current}
这种形式的EL表达式来获取循环中的当前元素,并进行条件判断。
- 可以使用For Each节点来循环检查MRS Hive SQL节点的输出结果,并根据结果进行条件判断。例如,可以使用
-
配置通知和报警机制:
- 可以配置通知机制,当MRS Hive SQL节点执行失败时,通过邮件、短信或者其他方式通知相关人员,以便及时处理问题。
-
人工干预和检查:
- 在某些情况下,可能需要人工干预来检查MRS Hive SQL节点的执行情况,例如,当遇到复杂的业务逻辑错误或者数据问题时,人工检查可能是必要的。
通过上述方法,Shell节点可以有效地判断MRS Hive SQL节点是否执行成功,并采取相应的处理措施。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)