了解和解决从 HDInsight 上的 WebHCat 收到的错误

了解将 WebHCat 用于 HDInsight 时接收的错误以及如何解决错误。 WebHCat 由 Azure PowerShell 和 Data Lake Tools for Visual Studio 等客户端工具在内部使用。

什么是 WebHCat

WebHCat 是适用于 HCatalog 的 REST API,是针对 Hadoop 的表和存储管理层。 WebHCat 默认情况下在 HDInsight 群集上处于启用状态,可供各种工具在执行提交作业、获取作业状态等操作时使用,无需登录到群集中。

修改配置

Important

本文档中列出的几大错误之所以发生,是因为超出了配置的最大值。 当解决步骤提到可以更改一个值时,必须使用下列选项之一来执行更改:

  • 对于 Windows 群集:使用脚本操作在群集创建过程中配置值。 有关详细信息,请参阅开发脚本操作

  • 对于 Linux 群集:使用 Ambari(Web 或 REST API)修改值。 有关详细信息,请参阅使用 Ambari 管理 HDInsight

Note

在 Azure 中国区,HDInsight Linux 仅支持 3.5 或更高版本。 在 Azure 中国区无法创建 HDInsight Linux 3.2、3.3 和 3.4。 但是,可以通过 HDInsight 模拟器使用这些版本。

Important

Linux 是 HDInsight 3.4 或更高版本上使用的唯一操作系统。 有关详细信息,请参阅 HDInsight 在 Windows 上停用

默认配置

如果超过以下默认值,则可能降低 WebHCat 性能或导致错误:

设置 作用 默认值
yarn.scheduler.capacity.maximum-applications 可以同时处于活动状态(挂起或运行)的最大作业数 10,000
templeton.exec.max-procs 可以同时处理的最大请求数 20 个
mapreduce.jobhistory.max-age-ms 作业历史记录保留的天数 7 天

请求过多

HTTP 状态代码:429

原因 解决方法
已超过 WebHCat 每分钟能够处理的最大并发请求数(默认值为 20) 减少工作负载以确保提交的数量没有超出最大并发请求数,或者通过修改 templeton.exec.max-procs 来提高并发请求限制。 有关详细信息,请参阅修改配置

服务器不可用

HTTP 状态代码:503

原因 解决方法
此状态代码通常发生在群集的主要和辅助 HeadNode 之间进行故障转移时 等待两分钟,并重试该操作

请求内容错误:找不到作业

HTTP 状态代码:400

原因 解决方法
作业详细信息已被作业历史记录清除器清除 作业历史记录的默认保留期为 7 天。 通过修改 mapreduce.jobhistory.max-age-ms 可更改默认保留期。 有关详细信息,请参阅修改配置
作业因故障转移而终止 重试提交作业,重试时间最多两分钟
使用了无效的作业 ID 检查作业 ID 是否正确

网关错误

HTTP 状态代码:502

原因 解决方法
WebHCat 进程内发生内部垃圾回收 等待垃圾回收完成或重新启动 WebHCat 服务
等待 ResourceManager 服务的响应超时。 当活动应用程序的数量达到配置的最大值(默认为 10,000)时,可能会发生此错误 等待当前正在运行的作业完成,或者通过修改 yarn.scheduler.capacity.maximum-applications 来提高并发作业限制。 有关详细信息,请参阅修改配置部分。
Fields 设置为 * 时,尝试通过 GET /jobs 调用来检索所有作业 不检索全部作业详细信息。 而是改用 jobid 来仅检索作业 ID 大于特定作业 ID 的作业的详细信息。 或者,不使用 Fields
在 HeadNode 故障转移期间 WebHCat 服务关闭 等待两分钟,并重试该操作
通过 WebHCat 提交的作业有超过 500 个处于挂起状态 等到当前挂起的作业完成再提交更多作业