[ 
https://issues.apache.org/jira/browse/HADOOP-4664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12679067#action_12679067
 ] 

Amar Kamat commented on HADOOP-4664:
------------------------------------

Few comments :
# I feel Matei's implementation is simpler and does not involve the overhead of 
adding an extra thread. Tom, can you plz explain why {{ThreadPoolExecutor}} 
should be used?
# In {{JobInProgress.initTasks()}}, the first dfs call is made via 
{{JobHistory.logSubmitted()}}. This can also block on a dfs call made in 
{{JobHistory.getJobHistoryFileName()}} thus blocking all the other threads. 
Hence there is a corner case where all the threads will be blocked (on 
{{JobHistory}}). Here are the apis which are synchronized and might block on a 
dfs call
 ##  {{JobHistory.getJobHistoryFileName()}} within {{JobHistory.logSubmitted()}}
 ##  {{JobTracker.finalizeJob()}} and {{JobHistory.finalizeRecovery()}} within 
{{JobTracker.finalizeJob()}}
# All the api's invoked from {{JobInProgress.initTasks()}} should be made 
thread safe. Example, we should document that 
{{JobTracker.resolveAndAddToTopology()}} should be thread safe. Following are 
the apis that should be made thread safe
||Class||api||structure||
|JobHistory|logSubmitted() / logInited() / logFinished() / logFailed() / 
logJobPriority()|openJobs|
|JobTracker|resolveAndAddToTopology()|dnsToSwitchMapping|
|JobEndNotifier|registerNotification()|queue|
|JobTracker|storeCompletedJob()|completedJobStatusStore(looks at store() etc)|

 Hey can you plz check if there are other such apis.
----
In future we might want to associate a timer with each thread. We really dont 
want 3 out of 4 threads to be blocked for 1hr on dfs operations. But for now I 
think its a premature step.

> Parallelize job initialization
> ------------------------------
>
>                 Key: HADOOP-4664
>                 URL: https://issues.apache.org/jira/browse/HADOOP-4664
>             Project: Hadoop Core
>          Issue Type: Improvement
>          Components: mapred
>            Reporter: Matei Zaharia
>            Assignee: Jothi Padmanabhan
>            Priority: Blocker
>             Fix For: 0.20.0
>
>         Attachments: hadoop-4664-v1.patch, parallel-job-init-v1.patch
>
>
> The job init thread currently initializes one job at a time. However, this is 
> a lengthy and partly IO-bound process because all of the job's block 
> locations need to be resolved through the namenode and a map of them needs to 
> be built. It can take tens of seconds. As a result, the cluster sometimes 
> initializes jobs too slowly for full utilization to be achieved, if there are 
> many small jobs queued up. It would be better to have a pool of threads that 
> initialize multiple jobs in parallel. One thing to be careful of, however, is 
> not causing deadlocks or holding locks for too long in these threads.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to