[ https://issues.apache.org/jira/browse/MAPREDUCE-6542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15005935#comment-15005935 ]
Daniel Templeton commented on MAPREDUCE-6542: --------------------------------------------- [~piaoyu zhang], thanks for the new patch. We're getting closer. Three more things I'd like to see: # Mark the old {{getFormattedTimeWithDiff()}} method as {{@Deprecated}} # Refactor both the {{getFormattedTimeWithDiff()}} methods to call a new private method that contains all the replicated logic. Something like {{private static getFormattedTimeWithDiff(String formattedFinishTime, long startTime)}} # Use {{StringBuilder}} instead of {{StringBuffer}}. {{StringBuffer}} is MT safe, but the places where it's used are locally scoped, so necessarily single-threaded. {{StringBuilder}} is faster because it's not MT-safe. (http://stackoverflow.com/questions/355089/stringbuilder-and-stringbuffer) If you're feeling ambitious, it would also be nice to add a unit test that tries to force concurrent access to the function. > HistoryViewer use SimpleDateFormat,But SimpleDateFormat is not threadsafe > ------------------------------------------------------------------------- > > Key: MAPREDUCE-6542 > URL: https://issues.apache.org/jira/browse/MAPREDUCE-6542 > Project: Hadoop Map/Reduce > Issue Type: Bug > Components: jobhistoryserver > Affects Versions: 2.2.0, 2.7.1 > Environment: CentOS6.5 Hadoop > Reporter: zhangyubiao > Assignee: zhangyubiao > Attachments: MAPREDUCE-6542-v2.patch, MAPREDUCE-6542-v3.patch, > MAPREDUCE-6542.patch > > > I use SimpleDateFormat to Parse the JobHistory File before > private static final SimpleDateFormat dateFormat = > new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); > public static String getJobDetail(JobInfo job) { > StringBuffer jobDetails = new StringBuffer(""); > SummarizedJob ts = new SummarizedJob(job); > jobDetails.append(job.getJobId().toString().trim()).append("\t"); > jobDetails.append(job.getUsername()).append("\t"); > jobDetails.append(job.getJobname().replaceAll("\\n", > "")).append("\t"); > jobDetails.append(job.getJobQueueName()).append("\t"); > jobDetails.append(job.getPriority()).append("\t"); > jobDetails.append(job.getJobConfPath()).append("\t"); > jobDetails.append(job.getUberized()).append("\t"); > > jobDetails.append(dateFormat.format(job.getSubmitTime())).append("\t"); > > jobDetails.append(dateFormat.format(job.getLaunchTime())).append("\t"); > > jobDetails.append(dateFormat.format(job.getFinishTime())).append("\t"); > return jobDetails.toString(); > } > But I find I query the SubmitTime and LaunchTime in hive and compare > JobHistory File time , I find that the submitTime and launchTime was wrong. > Finally,I chang to use the FastDateFormat to parse the time format and the > time become right > -- This message was sent by Atlassian JIRA (v6.3.4#6332)