hadoop1.0.4;
昨天看了源码,说到可以使用log信息来打印出来JobTracker的启动时间,然后来解析这个Log文件,但是这里有个问题,就是log文件是在hadoop的主节点namenode的linux机器中的,不是在客户端,读取会有一定的问题,然后就又想到了还是写文件(hdfs文件系统)的方式。只要在JobTracker启动之后,然后再写入即可。
还是按源码来说(首先把原来修改的还原回来),看代码的302、303行:
- result = new JobTracker(conf, identifier);
- result.taskScheduler.setTaskTrackerManager(result);
这里就是新建JobTracker的代码了,可以在这两行代码后面加上这样的代码:
- result = new JobTracker(conf, identifier);
- result.taskScheduler.setTaskTrackerManager(result);
- /**
- * add by fansy at 2013/12/20
- */
- writeString(JOBTRACKER_STARTTIME,conf);
- LOG.info(“***—JOBTRACKER_STARTTIME:”+JOBTRACKER_STARTTIME);
这样就可以写入了,同时保证不会是在safemode状态写入,这样就不会报错了。
额,还需要修改的代码为:
新增一个static 变量:
- private static String JOBTRACKER_STARTTIME;
修改generateNewIdentifier代码:
- private static String generateNewIdentifier() {
- JOBTRACKER_STARTTIME=getDateFormat().format(new Date());
- return JOBTRACKER_STARTTIME;
- }
这样就可以了。
编译、替换、重新启动集群,可以看到hdfs文件系统上面的新文件:
集群启动的图片为:
额,同时可以下载hadoop-core-1.0.4.jar 文件,在http://download.csdn.net/detail/fansy1990/6745283可以看到;
需要读取这个文件,可以使用下面的方法:
- public static String readString(Path path, Configuration conf) throws IOException {
- FileSystem fs = FileSystem.get(path.toUri(), conf);
- FSDataInputStream in = fs.open(path);
- try {
- return in.readUTF();
- } finally {
- Closeables.closeQuietly(in);
- }
- }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/58114.html