-
Notifications
You must be signed in to change notification settings - Fork 439
Debug Tips For EasyML
在Tomcat部署EasyML系统、通过IDE(Eclipse or IDEA)运行EasyML或测试新添加的功能时,会遇到一些未曾遇到的问题,那么如何更快速的运用一些工具定位问题对开发者而言显得尤为必要,了解一些开发调试的技巧对开发者的开发效率具有很大的提升。下面我们根据EasyML开发团队的一些开发经验,总结了针对EasyML进行调试的技巧。
( 注:以下的一些地址,仅针对使用Docker部署集群的开发者,若自己搭建集群,则需要根据自身软件安装情况而修改)
- 通过Oozie的
web console
页面http://hadoop-master:11000/oozie/可查看EasyML平台提交的job的详细信息。上面包含提交的Job id、Job名称、当前状态、提交的用户、创建时间、结束时间等信息。
- 点击具体的要查看的某个job,页面会弹出job的详细信息页面,若弹出的界面不完整,请右键Chrome浏览器,在放大缩小中将页面缩小即可弹出完整页面。
-
Job Info:显示Job基本信息,包括Job Id、Name、App Path、Status、User;显示Job包含的Actions信息
-
Job Definition:Oozie job workflow定义,Oozie根据里面的流程定义进行调度相应的Action,里面可以看到从EasyML提交的job的各个Action最终的参数及执行脚本等信息
-
Job Configuration:Oozie job相关的配置信息,包括Hadoop的jobtracker和hdfs地址等
-
Job Log:Oozie运行该job的日志
-
Job DAG: Job运行的DAG图,和Workflow流程一致,EasyML提交的job最终会解析成oozie 的DAG图
当图中某个节点出现错误时,可以点击Job Info中的状态为FAILED
的action,此时会弹出该Action的详细信息,可从上面查询到部分的错误日志,同时还可以通过console url
查看该节点在hadoop中运行的情况(具体在哪个节点运行、执行的状态等)。
- 通过点击Action对应的
Console url
,链接会跳转到Job history server
对应的job中,每个action的执行相当于是一个Hadoop Job。可以通过Hadoop history server
查看其对应节点的相关日志信息。
- 当然,还可以通过到Oozie的安装目录下查看Oozie的job运行日志。
通过
docker exec -it hadoop-master /bin/bash
进入hadoop-master
容器,进入/usr/local/oozie/logs
目录查看oozie.log日志。Oozie默认显示的日志级别为INFO
,可以通过修改/usr/local/oozie/conf/oozie-log4j.properties
文件的日志级别为DEBUG
,查看调试日志。
- 查看Hadoop集群信息地址:http://hadoop-master:50070/dfshealth.html#tab-overview
- Hadoop集群HDFS地址为:http://hadoop-master:50070/explorer.html#/ 其中在根目录下的/EML目录中有三个子目录:
-
Data:与EasyML平台中的Dataset数据一致,用户通过平台上传的数据保存在该目录中
-
Program:与EasyML平台中的Program数据一致,用户通过平台上传的程序保存在该目录中
-
Oozie:用户通过EasyML平台提交的任务会在Oozie目录下创建对应的目录(对应Oozie web console中任务的appPath),里面存储Oozie的workflow.xml任务描述文件及各个Action的结果文件,包括结果、STDOUT和STDERR
若上传文件出错可通过到HDFS上查看数据是否上传成功来定位具体的问题,若HDFS上没有对应的文件,则可能是HDFS写数据出了问题。
- yarn地址:http://hadoop-master:8088/cluster。可通过yarn查看任务的资源调度信息及任务提交状态
- History Server地址:http://hadoop-master:19888/jobhistory/。Job history中的每个job与yarn中的每个application一一对应(即job id一致)
- 除上述WEB UI之外,还可以通过进入
hadoop-master
容器的/usr/local/hadoop/logs
目录中查看Console日志
hadoop-root-namenode-hadoop-master.log // namenode日志 mapred--historyserver-hadoop-master.log // hadoop-master的historyserver日志 yarn--resourcemanager-hadoop-master.log // hadoop-master的yarn日志
默认情况下日志的级别为INFO
级别,可通过修改/usr/local/hadoop/sbin/hadoop-daemon.sh
文件中的HADOOP_ROOT_LOGGER
的日志级别为DEBUG
来查看相关的调试日志。
- 若将EasyML工程打包成war包部署在Docker的Tomcat中,则可通过Tomcat的日志查看相关的错误信息。
通过进入
hadoop-master
容器的/usr/local/tomcat/logs
目录查看tomcat的日志。
值得注意的是,Tomcat的日志信息不包括web app中包含的应用日志,若需要查看具体的应用日志,可以通过给Tomcat配置log4j日志替换默认日志的方式查看。
具体步骤可参考http://www.cnblogs.com/phoenix-smile/p/5923592.html 步骤,下载相关jar包:
将tomcat-juli.jar放置在tomcat/bin目录中,替换原来的。
将tomcat-juli-adapters.jar、log4j-1.2.17.jar、log4j.properties放置在tomcat/lib目录下。
删除tomcat/conf目录下的logging.properties文件。
- 在EasyML平台构建任务并提交之后,界面会自动进入监控状态,可以通过监控界面查看到各个Action的运行状态,若Action显示红色,则表示Action执行失败,此时可通过右键Action,选择
Show Std Error
查看程序运行错误日志。该错误日志只显示程序本身的错误日志,因Hadoop集群或Oozie本身提交任务失败而造成的错误无法显示。
- 通过Eclipse或IDEA本机运行EasyML系统时,系统会自动部署在gwt dev上,此时可通过IDE Console查看各个请求日志。 若要查看Hadoop相关日志,需要给EasyML配置log4j日志,EasyML默认使用
java.util.log
日志。
具体可修改如下:
将log4j.properties文件放置到src/main/java目录中
在pom.xml中添加log4j依赖包
在想查看的文件中,通过添加import org.apache.log4j.Logger将logger类引入即可
- EasyML前端采用GWT技术,GWT可以使用 Java 编程语言编写 AJAX 前端,然后 GWT 会交叉编译到优化的JavaScript 中,而 JavaScript 可以自动在所有主要浏览器上运行。因此对于前端的日志查看,可以通过在EasyML网页上,右键浏览器选择
检查
,在显示的开发者界面中点击Console
,在Console中会显示所有在EasyML工程client端显示的日志,通过引入import java.util.logging.Logger
类即可。
- 当然,你也可以通过在代码中关键点添加
Window.alert
来进行前端代码的调试。
-
Installation And Introduction
-
Sample Description
-
Tips For Developers
-
Problem Summary