10.2.4 Java管理扩展
Java管理扩展(JMX)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活地开发无缝集成的系统、网络和服务管理应用。Hadoop包含多个MBean(Managed Bean,管理服务,它描述一个可管理的资源),它可以将Hadoop的Metrics应用到基于JMX的应用程序中。当前MBeans可以将Metrics展示到dfs和rpc上中文中,但不能在mapred及jvm上下文中实现。表10-1是MBeans的列表。
JDK中的Jconsole工具可以帮助我们查看JVM中运行的MBeans信息,使我们很方便地浏览Hadoop中的监控信息。很多第三方监控和调整系统(Nagios和Hyperic等)可用于查询MBeans,这样JMX自然就成为我们监控Hadoop系统的最好工具。但是,需要设置支持远程访问的JMX,并且设置一定的安全级别,包括密码权限、SSL链接及SSL客户端权限设置等。为了使系统支持远程访问,JMX要求对一些选项进行更改,其中包括设置Java系统的属性(可以通过编辑Hadoop的conf/hadoop-env.sh文件实现)。下面的例子展示了如何通过密码远程访问NameNode中的JMX(在SSL不可用的条件下):
export HADOOP_NameNode_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.password.file=$HADOOP_CONF_DIR/jmxremote.password
-Dcom.sun.management.jmxremote.port=8004$HADOOP_NameNode_OPTS"
jmxremote. password文件以纯文本的格式列出了所有的用户名和密码。JMX文档有关于jmxremote.password文件的更进一步的格式信息。
通过以上的配置,我们可以使用JConsole工具浏览远程NameNode中的MBean监控信息。事实上,我们还有很多其他方法实现这个功能,比如通过jmxquery(一个命令行工具,具体信息可查看http://code.google.com/p/jmxquery/)来检索低于副本要求的块:
./check_jmx-U service:jmx:rmi:///jndi/rmi://NameNode-host:8004/jmxrmi-O\
hadoop:service=NameNode, name=FSNamesystemState-A UnderReplicatedBlocks\
-w 100-c 1000-username monitorRole-password secret
JMX OK-UnderReplicatedBlocks is 0
通过jmxquery命令创建一个JMX RMI链接,链接到NameNode主机地址上,端口号为8004。它会读取对象名为hadoop:service=NameNode, name=FSNamesystemState的UnderReplicatedBlocks属性,并将读出的值写入终端。-w、-c选项定义了警告和数值的临界值,这个临界值的选定要在我们运行和维护集群一段时间以后才能选出比较合适的经验值。
需要注意的是,尽管我们可以通过JMX的默认配置看到Hadoop的监控信息,但是它们不会自动更新,除非更改MetricContext的具体实现。如果JMX是我们使用的监控系统信息的唯一方法,那么就可以把MetricContext的实现更改为NullContextWithUpdateThread。
通常大多数人会使用Ganglia和另外一个可选的系统(比如Nagios)来进行Hadoop集群的检测工作。Ganglia可以很好地完成大数据量监控信息的收集和图形化工作,而Nagios及类似的系统则更擅长处理小规模的监控数据,并且在监控信息超出设定的监控阈值时发出警告。管理者可以根据需求选择合适的工具。下一节我们就对Ganglia的使用配置进行详细讲解。