场景:在 Azure HDInsight 中提取查询结果时,Apache Hive 视图超时

本文介绍在 Azure HDInsight 群集中使用交互式查询组件时出现的问题的故障排除步骤和可能的解决方案。 在 HDI 3.6 和 HDI 4.0 群集中,默认时间限制为 1 分钟。

问题

从 Apache Hive 视图运行某些查询时,可能会遇到以下错误:

ERROR [ambari-client-thread-1] [HIVE 2.0.0 AUTO_HIVE20_INSTANCE] NonPersistentCursor:131 - Result fetch timed out
java.util.concurrent.TimeoutException: deadline passed
   at akka.actor.dsl.Inbox$InboxActor$$anonfun$receive$1.applyOrElse(Inbox.scala:117)
   at scala.PartialFunction$AndThen.applyOrElse(PartialFunction.scala:189)
   at akka.actor.Actor$class.aroundReceive(Actor.scala:467)
   at akka.actor.dsl.Inbox$InboxActor.aroundReceive(Inbox.scala:62)
   at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
   at akka.actor.ActorCell.invoke(ActorCell.scala:487)
   at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
   at akka.dispatch.Mailbox.run(Mailbox.scala:220)
   at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)
   at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
   at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
   at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
   at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
ERROR [ambari-client-thread-1] [HIVE 2.0.0 AUTO_HIVE20_INSTANCE] ServiceFormattedException:97 - Result fetch timed out
ERROR [ambari-client-thread-1] [HIVE 2.0.0 AUTO_HIVE20_INSTANCE] ServiceFormattedException:98 - java.util.concurrent.TimeoutException: deadline passed

java.util.concurrent.TimeoutException: deadline passed
   at akka.actor.dsl.Inbox$InboxActor$$anonfun$receive$1.applyOrElse(Inbox.scala:117)
   at scala.PartialFunction$AndThen.applyOrElse(PartialFunction.scala:189)
   at akka.actor.Actor$class.aroundReceive(Actor.scala:467)
   at akka.actor.dsl.Inbox$InboxActor.aroundReceive(Inbox.scala:62)
   at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
   at akka.actor.ActorCell.invoke(ActorCell.scala:487)
   at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
   at akka.dispatch.Mailbox.run(Mailbox.scala:220)
   at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)
   at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
   at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
   at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
   at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

原因

Hive 视图默认超时值可能不适用于你所运行的查询。 指定的时间段对于 Hive 视图而言太短,无法提取查询结果。

解决方法

  1. 通过在中 /etc/ambari-server/conf/ambari.properties 为这两个头节点设置以下属性,增大 Apache Ambari Hive 视图的超时值。

    views.ambari.hive.AUTO_HIVE20_INSTANCE.result.fetch.timeout=300000
    

    通过前往“YOUR_USERNAME”>“管理 Ambari”>“视图”来确认 Hive View 实例名称 AUTO_HIVE20_INSTANCE。 从“名称”列获取实例名称。 如果不匹配,请替换此值。 请勿使用 URL 名称列。

  2. 通过运行以下命令重新启动活动的 Ambari 服务器。 如果收到一条错误消息,指出它不是活动的 Ambari 服务器,请通过 ssh 连接到下一个头节点并重复此步骤。 记下当前 Ambari 服务器进程的 PID。

    sudo ambari-server status 
    sudo systemctl restart ambari-server
    
  3. 确认已重启 Ambari 服务器。 如果按照这些步骤操作,你会注意到 PID 已更改。

    sudo ambari-server status
    

备注

如果收到 502 错误,则说明 HDI 网关出现问题。 你可以打开 Web 检查器,转到“网络”选项卡,然后重新提交查询来进行确认。 你将看到请求失败,并返回 502 状态代码,时间将显示已过去 2 分钟。

该查询不适用于 Hive 视图。 建议你改为执行以下操作:

  • 使用 Beeline
  • 重新编写查询以进行优化

后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道之一获取更多支持:

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。