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

在基于 Linux 的 HDInsight 上为 Apache Hadoop 服务启用堆转储

堆转储包含应用程序的内存快照,其中包括创建转储时各变量的值。 因此,它们在诊断发生在运行时的问题时很有用。

服务

可以启用以下服务的堆转储:

  • Apache hcatalog - tempelton
  • Apache hive - hiveserver2、metastore、derbyserver
  • mapreduce - jobhistoryserver
  • Apache yarn - resourcemanager、nodemanager、timelineserver
  • Apache hdfs - datanode、secondarynamenode、namenode

还可以启用映射的堆转储,并减少由 HDInsight 运行的流程数。

了解堆转储配置

在某项服务启动时,可以通过将选项(有时称为 opts 或参数)传递到 JVM 来启用堆转储。 对于大多数 Apache Hadoop 服务,可以修改用于启动该服务的 shell 脚本来传递这些选项。

在每个脚本中,有一个针对 *_OPTS 的导出,其中包含传递到 JVM 的选项。 例如,在 hadoop-env.sh 脚本中,以 export HADOOP_NAMENODE_OPTS= 开头的行包含用于 NameNode 服务的选项。

映射和化简进程稍有不同,因为这些操作是 MapReduce 服务的子进程。 每个映射或化简进程都在子容器中运行,并且有两个包含 JVM 选项的条目。 二者均包含在 mapred-site.xml 中:

  • mapreduce.admin.map.child.java.opts
  • mapreduce.admin.reduce.child.java.opts

注意

我们建议使用 Apache Ambari 来修改脚本和 mapred-site.xml 设置,因为 Ambari 负责在群集中跨节点复制更改。 请参阅使用 Apache Ambari 部分以了解具体的步骤。

启用堆转储

发生 OutOfMemoryError 时,可以使用以下选项来启用堆转储:

-XX:+HeapDumpOnOutOfMemoryError

+ 指示是否启用了此选项。 默认为禁用。

警告

默认情况下,在 HDInsight 上不为 Hadoop 服务启用堆转储,因为转储文件可能很大。 如果启用了堆转储来进行故障诊断,请记住在重现问题并收集转储文件后禁用堆转储。

转储位置

转储文件的默认位置是当前的工作目录。 可以使用以下选项来控制文件的存储位置:

-XX:HeapDumpPath=/path

例如,使用 -XX:HeapDumpPath=/tmp 可以将转储存储在 /tmp 目录中。

脚本

还可以在发生 OutOfMemoryError 时触发一个脚本。 例如,可以触发一个通知,这样你就知道发生了错误。 使用以下选项在 OutOfMemoryError 上触发某个脚本:

-XX:OnOutOfMemoryError=/path/to/script

注意

由于 Apache Hadoop 是分布式系统,任何使用的脚本都必须放置在服务运行时所在的群集的所有节点上。

该脚本还必须位于可供帐户(服务以该帐户的身份运行)访问的位置,并且必须提供执行权限。 例如,你可能希望将脚本存储在 /usr/local/bin 中,并通过 chmod go+rx /usr/local/bin/filename.sh 来授予读取和执行权限。

使用 Apache Ambari

若要修改服务配置,请使用以下步骤:

  1. 在 Web 浏览器中,导航到 https://CLUSTERNAME.azurehdinsight.net,其中 CLUSTERNAME 是群集的名称。

  2. 使用左侧的列表,选择你想要修改的服务区。 例如,HDFS。 在中心区域,选择“配置”选项卡。

    Image of Ambari web with HDFS Configs tab selected.

  3. 使用“筛选...”条目,输入“opts”。 仅显示包含此文本的项。

    Apache Ambari config filtered list.

  4. 查找需为其启用堆转储的服务的 *_OPTS 条目,并添加希望启用的选项。 在下图中,我已将 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/ 添加到 HADOOP_NAMENODE_OPTS 条目:

    Apache Ambari hadoop-namenode-opts.

    注意

    为映射或化简子进程启用堆转储时,需查找名为 mapreduce.admin.map.child.java.optsmapreduce.admin.reduce.child.java.opts 的字段。

    使用“保存”按钮保存所做的更改。 可以输入简短的说明,描述所做的更改。

  5. 一旦应用了所做的更改,“需要重启”图标会显示在一个或多个服务旁边。

    restart required icon and restart button.

  6. 选择需要重启的每个服务,并使用“服务操作”按钮以“打开维护模式”。 维护模式可以防止重启服务时从该服务生成警报。

    Turn on hdi maintenance mode menu.

  7. 一旦启用维护模式,使用服务的“重启”按钮即可“重启所有受影响的服务”

    Apache Ambari Restart All Affected entry.

    注意

    其他服务的“重启”按钮条目可能会有所不同。

  8. 一旦重启服务,可使用“服务操作”按钮“关闭维护模式”。 这样一来,Ambari 就可以继续监视服务的警报。