一招解决MRS作业中shell节点获取Hive SQL执行结果【玩转华为云】

举报
Jack20 发表于 2025/04/18 14:34:37 2025/04/18
【摘要】 在DataArts作业中,Shell节点可以通过以下方式获取MRS Hive SQL节点执行的结果:使用EL表达式:当MRS Hive SQL节点的输出结果只有一个字段时,可以使用#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput(\"前一节点名\"),\"]\"),\"[\"),\"\\\\\"\")...

在DataArts作业中,Shell节点可以通过以下方式获取MRS Hive SQL节点执行的结果:

  1. 使用EL表达式

    • 当MRS Hive SQL节点的输出结果只有一个字段时,可以使用#{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput(\"前一节点名\"),\"]\"),\"[\"),\"\\\\\"\")}这种形式的EL表达式来获取结果值。这种方法适用于前一SQL节点的输出结果只有一个字段,且输出结果值数据类型为String的场景。
  2. 通过For Each节点

    • 当MRS Hive SQL节点的输出结果为多个字段时,可以使用For Each节点来循环获取数据集中二维数组的值。具体配置如下:
      • For Each节点数据集:#{Job.getNodeOutput('前一节点名 ')}
      • For Each节点子作业参数:#{Loop.current[索引 ]}
    • 这种方法适用于输出结果值数据类型为String的场景,但需要将作业拆分为主作业和子作业。

示例

假设在DataArts Studio中有一个作业,其中包含一个MRS Hive SQL节点和一个Shell节点,MRS Hive SQL节点执行了一个查询并返回了一个结果集,Shell节点需要获取这个结果集并进行后续处理。

  1. MRS Hive SQL节点配置

    • 假设MRS Hive SQL节点执行了如下查询:
      SELECT COUNT(*) FROM student_score;
      
    • 这个查询返回了一个单字段的结果集,例如[],表示student_score表中的记录数为100。
  2. 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中,然后打印出来。
  3. 作业执行结果

    • 当作业执行时,Shell节点将输出:
      Student score count: 100
      

通过这种方式,Shell节点成功获取了MRS Hive SQL节点执行的结果,并在后续的脚本中进行了处理。

在DataArts作业中,如果MRS Hive SQL节点执行失败,Shell节点可以通过以下方式进行处理:

  1. 配置失败重试

    • 在作业的高级参数中,可以配置MRS Hive SQL节点的失败重试策略。例如,可以设置最大重试次数和重试间隔时间,以便在节点执行失败后自动重试。
  2. 后续节点处理策略

    • 可以配置当前节点失败后,后续节点的处理策略。例如,可以选择终止后续节点执行计划、终止当前作业执行计划、继续执行下一节点或者挂起当前作业执行计划。
  3. 日志分析和错误处理

    • Shell节点可以通过分析MRS Hive SQL节点的日志来确定失败原因,并采取相应的处理措施。例如,可以检查SQL语法错误、资源不足或者权限问题等。
  4. 通知和报警

    • 可以配置通知机制,当MRS Hive SQL节点执行失败时,通过邮件、短信或者其他方式通知相关人员,以便及时处理问题。
  5. 数据恢复和修正

    • 如果MRS Hive SQL节点的执行失败导致数据不一致或者丢失,Shell节点可以执行数据恢复和修正操作,以确保数据的完整性和准确性。
  6. 人工干预

    • 在某些情况下,可能需要人工干预来解决MRS Hive SQL节点执行失败的问题。例如,当遇到复杂的业务逻辑错误或者数据问题时,人工检查和修正可能是必要的。

通过上述方法,Shell节点可以有效地处理MRS Hive SQL节点执行失败的情况,确保作业的稳定性和数据的准确性。

在DataArts中,可以通过以下方式在Shell节点中判断MRS Hive SQL节点是否执行成功:

  1. 使用Job内嵌对象的getNodeStatus方法

    • 可以使用#{Job.getNodeStatus("mrs_hive_sql_node")}这种形式的EL表达式来获取MRS Hive SQL节点的执行状态。如果节点执行成功,该方法将返回success;如果执行失败,则返回fail
  2. 分析MRS Hive SQL节点的日志

    • Shell节点可以通过分析MRS Hive SQL节点的日志来确定执行是否成功。例如,可以检查日志中是否存在错误信息或者异常堆栈。
  3. 检查MRS Hive SQL节点的输出结果

    • 如果MRS Hive SQL节点有输出结果,可以在Shell节点中使用#{Job.getNodeOutput("mrs_hive_sql_node")}这种形式的EL表达式来获取输出结果,并检查结果是否符合预期。
  4. 使用For Each节点进行条件判断

    • 可以使用For Each节点来循环检查MRS Hive SQL节点的输出结果,并根据结果进行条件判断。例如,可以使用#{Loop.current}这种形式的EL表达式来获取循环中的当前元素,并进行条件判断。
  5. 配置通知和报警机制

    • 可以配置通知机制,当MRS Hive SQL节点执行失败时,通过邮件、短信或者其他方式通知相关人员,以便及时处理问题。
  6. 人工干预和检查

    • 在某些情况下,可能需要人工干预来检查MRS Hive SQL节点的执行情况,例如,当遇到复杂的业务逻辑错误或者数据问题时,人工检查可能是必要的。

通过上述方法,Shell节点可以有效地判断MRS Hive SQL节点是否执行成功,并采取相应的处理措施。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。