你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

案例:Azure HDInsight 中的“阻止跨源 API”导致 Jupyter 服务器 404“找不到”错误

本文介绍在 Azure HDInsight 群集中使用 Apache Spark 组件时出现的问题的故障排除步骤和可能的解决方案。

问题

访问 HDInsight 上的 Jupyter 服务时看到一个指出“找不到”的错误框。 如果检查 Jupyter 日志,会看到如下内容:

[W 2018-08-21 17:43:33.352 NotebookApp] 404 PUT /api/contents/PySpark/notebook.ipynb (10.16.0.144) 4504.03ms referer=https://pnhr01hdi-corpdir.msappproxy.net/jupyter/notebooks/PySpark/notebook.ipynb
Blocking Cross Origin API request.  
Origin: https://xxx.xxx.xxx, Host: pnhr01.j101qxjrl4zebmhb0vmhg044xe.ax.internal.cloudapp.net:8001

此外,在 Jupyter 日志中的“源”字段中还可以看到一个 IP 地址。

原因

此错误可能是由于:

  • 如果已应用网络安全组 (NSG) 规则来限制对群集的访问。 使用 NSG 规则限制访问仍然可以允许使用 IP 地址而不是群集名称直接访问 Apache Ambari 和其他服务。 但是,在访问 Jupyter 时,可能会看到 404“找不到”错误。

  • 如果为 HDInsight 网关指定了自定义的 DNS 名称而不是标准的 xxx.azurehdinsight.net

解决方法

  1. 在以下两个位置修改 jupyter.py 文件:

    /var/lib/ambari-server/resources/common-services/JUPYTER/1.0.0/package/scripts/jupyter.py
    /var/lib/ambari-agent/cache/common-services/JUPYTER/1.0.0/package/scripts/jupyter.py
    
  2. 找到写着以下内容的行:NotebookApp.allow_origin='\"https://{2}.{3}\"',并将此值更改为:NotebookApp.allow_origin='\"*\"'

  3. 从 Ambari 重启 Jupyter 服务。

  4. 在命令提示符下键入 ps aux | grep jupyter 后,应会显示允许任何 URL 与该服务建立连接。

这种方法不如现有的设置安全。 但是,它会假设对群集的访问受到限制,并且允许外部的流量连接到群集,因为应用了 NSG。

后续步骤

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

  • 通过 Azure 社区支持获取 Azure 专家的解答。

  • 联系 @AzureSupport,这是用于改进客户体验的官方 Microsoft Azure 帐户。 它可以将 Azure 社区成员连接到适当的资源,为他们提供解答、支持和专家建议。

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持”,或打开“帮助 + 支持”中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Microsoft Azure 订阅中带有对订阅管理和计费支持的访问权限,技术支持通过 Azure 支持计划之一提供。