You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-issues@hadoop.apache.org by "yangjun (JIRA)" <ji...@apache.org> on 2014/01/09 04:00:51 UTC
[jira] [Updated] (MAPREDUCE-5626) TaskLogServlet could not get
syslog
[ https://issues.apache.org/jira/browse/MAPREDUCE-5626?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
yangjun updated MAPREDUCE-5626:
-------------------------------
Assignee: (was: yangjun)
> TaskLogServlet could not get syslog
> -----------------------------------
>
> Key: MAPREDUCE-5626
> URL: https://issues.apache.org/jira/browse/MAPREDUCE-5626
> Project: Hadoop Map/Reduce
> Issue Type: Bug
> Affects Versions: 1.2.1
> Environment: Linux version 2.6.18-238.9.1.el5
> Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
> hadoop-1.2.1
> Reporter: yangjun
> Priority: Minor
> Labels: patch
> Fix For: 1.2.1
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> When multiply tasks use one jvm and generated logs.
> eg.
> ./attempt_201211220735_0001_m_000000_0:
> log.index
> ./attempt_201211220735_0001_m_000001_0:
> log.index
> ./attempt_201211220735_0001_m_000002_0:
> log.index stderr stdout syslog
> get from http://xxxxxxxx:50060/tasklog?attemptid= attempt_201211220735_0001_m_000000_0
> could get stderr,stdout,but not the others,include syslog.
> see TaskLogServlet.haveTaskLog() method, not check from local && log.index, but check the original path.
> resolve:
> modify TaskLogServlet haveTaskLog method
> private boolean haveTaskLog(TaskAttemptID taskId, boolean isCleanup,
> TaskLog.LogName type) throws IOException {
> File f = TaskLog.getTaskLogFile(taskId, isCleanup, type);
> if (f.exists() && f.canRead()) {
> return true;
> } else {
> File indexFile = TaskLog.getIndexFile(taskId, isCleanup);
> if (!indexFile.exists()) {
> return false;
> }
>
>
> BufferedReader fis;
> try {
> fis = new BufferedReader(new InputStreamReader(
> SecureIOUtils.openForRead(indexFile,
> TaskLog.obtainLogDirOwner(taskId))));
> } catch (FileNotFoundException ex) {
> LOG.warn("Index file for the log of " + taskId
> + " does not exist.");
>
>
> // Assume no task reuse is used and files exist on attemptdir
> StringBuffer input = new StringBuffer();
> input.append(LogFileDetail.LOCATION
> + TaskLog.getAttemptDir(taskId, isCleanup) + "\n");
> for (LogName logName : TaskLog.LOGS_TRACKED_BY_INDEX_FILES) {
> input.append(logName + ":0 -1\n");
> }
> fis = new BufferedReader(new StringReader(input.toString()));
> }
>
>
> try {
> String str = fis.readLine();
> if (str == null) { // thefile doesn't have anything
> throw new IOException("Index file for the log of " + taskId
> + "is empty.");
> }
> String loc = str.substring(str.indexOf(LogFileDetail.LOCATION)
> + LogFileDetail.LOCATION.length());
> File tf = new File(loc, type.toString());
> return tf.exists() && tf.canRead();
>
>
> } finally {
> if (fis != null)
> fis.close();
> }
> }
>
>
> }
> workaround:
> url add filter=SYSLOG could print syslog also.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)