|
@@ -31,7 +31,9 @@ import java.util.Map;
|
|
|
import java.util.Random;
|
|
|
import java.util.concurrent.Callable;
|
|
|
import java.util.concurrent.CancellationException;
|
|
|
+import java.util.concurrent.CompletionService;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
+import java.util.concurrent.ExecutorCompletionService;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
import java.util.concurrent.Future;
|
|
@@ -163,7 +165,8 @@ public class ContainerLocalizer {
|
|
|
ExecutorService exec = null;
|
|
|
try {
|
|
|
exec = createDownloadThreadPool();
|
|
|
- localizeFiles(nodeManager, exec, ugi);
|
|
|
+ CompletionService<Path> ecs = createCompletionService(exec);
|
|
|
+ localizeFiles(nodeManager, ecs, ugi);
|
|
|
return 0;
|
|
|
} catch (Throwable e) {
|
|
|
// Print traces to stdout so that they can be logged by the NM address
|
|
@@ -182,6 +185,10 @@ public class ContainerLocalizer {
|
|
|
.setNameFormat("ContainerLocalizer Downloader").build());
|
|
|
}
|
|
|
|
|
|
+ CompletionService<Path> createCompletionService(ExecutorService exec) {
|
|
|
+ return new ExecutorCompletionService<Path>(exec);
|
|
|
+ }
|
|
|
+
|
|
|
Callable<Path> download(LocalDirAllocator lda, LocalResource rsrc,
|
|
|
UserGroupInformation ugi) throws IOException {
|
|
|
Path destPath = lda.getLocalPathForWrite(".", getEstimatedSize(rsrc), conf);
|
|
@@ -206,7 +213,8 @@ public class ContainerLocalizer {
|
|
|
}
|
|
|
|
|
|
private void localizeFiles(LocalizationProtocol nodemanager,
|
|
|
- ExecutorService exec, UserGroupInformation ugi) throws IOException {
|
|
|
+ CompletionService<Path> cs, UserGroupInformation ugi)
|
|
|
+ throws IOException {
|
|
|
while (true) {
|
|
|
try {
|
|
|
LocalizerStatus status = createStatus();
|
|
@@ -231,7 +239,7 @@ public class ContainerLocalizer {
|
|
|
break;
|
|
|
}
|
|
|
// TODO: Synchronization??
|
|
|
- pendingResources.put(r, exec.submit(download(lda, r, ugi)));
|
|
|
+ pendingResources.put(r, cs.submit(download(lda, r, ugi)));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -247,8 +255,7 @@ public class ContainerLocalizer {
|
|
|
} catch (YarnRemoteException e) { }
|
|
|
return;
|
|
|
}
|
|
|
- // TODO HB immediately when rsrc localized
|
|
|
- sleep(1);
|
|
|
+ cs.poll(1000, TimeUnit.MILLISECONDS);
|
|
|
} catch (InterruptedException e) {
|
|
|
return;
|
|
|
} catch (YarnRemoteException e) {
|