【案例分享】HetuEngine执行SQL查询返回“No nodes available to run query"错误

举报
hetuengine2019 发表于 2021/08/27 21:47:50 2021/08/27
【摘要】 HetuEngine查询非本集群的Hive数据,由于使用了“hive.force-local-scheduling=true“参数,导致查询无法被HetuEnigne调度执行。

问题现象

HetuEngine查询Hive数据,提交SQL语句后被返回如下错误:
..spi.*Exception: No nodes available to run query
at ..execution.scheduler.UniformNodeSelector.computeAssignments(UniformNodeSelector.java:170)
at ..execution.scheduler.DynamicSplitPlacementPolicy.computeAssignments(DynamicSplitPlacementPolicy.java:41)
at ..execution.scheduler.SourcePartitionedScheduler.schedule(SourcePartitionedScheduler.java:305)
at ..execution.scheduler.SourcePartitionedScheduler$1.schedule(SourcePartitionedScheduler.java:168)
at ..execution.scheduler.SqlQueryScheduler.schedule(SqlQueryScheduler.java:550)

问题分析

  • 从堆栈信息上大致可确认此错误与任务调度相关。
  • 由于HetuEngine查询Hive数据时,是HetuEngine计算实例的Worker节点直接与Hive数据的HDFS交互,通过访问NameNode和DataNode来获取数据。首先确认HetuEngine计算实例运行的节点(即Yarn的NodeManager节点)与Hive数据的HDFS节点网络是正常,排除网络通信因素。
  • 根据错误描述
    No nodes available,推测是由于HetuEngine计算实例内没有Worker节点可用,导致任务无法被调度执行。其次进入HetuEngine原生页面,确认当前计算实例有足够个数的、处于Active状态的Worker节点,排除没有可用Worker节点因素。
  • 接下来就只能排查配置了。由于HetuEngine与被查询的Hive数据分属不同集群,再看HetuEngine对接Hive数据的配置中存在
    hive.force-local-scheduling=true这个较为不寻常的参数,这个参数的用途是强制将任务调度到与任务要处理的数据所在的Hadoop DataNode节点上(计算感知存储),但前提是HetuEngine计算实例的每个节点与每个DataNode都同在一个机器节点。由此可确定这个参数不能用于此场景,否则会造成HetuEngine计算实例的Coodinator节点错把非本机器节点的任务强制Local执行。

解决方案

在HetuEngine管理节点HSConsole中修改对接Hive数据的配置,删除
hive.force-local-scheduling=true配置。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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