diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/markdown/PluggableShuffleAndPluggableSort.md b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/markdown/PluggableShuffleAndPluggableSort.md
index 5ea05673a25..9e24103f934 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/markdown/PluggableShuffleAndPluggableSort.md
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/markdown/PluggableShuffleAndPluggableSort.md
@@ -67,6 +67,50 @@ The collector class configuration may specify a comma-separated list of collecto
|:---- |:---- |:---- |
| `yarn.nodemanager.aux-services` | `...,mapreduce_shuffle` | The auxiliary service name |
| `yarn.nodemanager.aux-services.mapreduce_shuffle.class` | `org.apache.hadoop.mapred.ShuffleHandler` | The auxiliary service class to use |
+| `yarn.nodemanager.aux-services.%s.classpath` | NONE | local directory which includes the related jar file as well as all the dependencies’ jar file. We could specify the single jar file or use /dep/* to load all jars under the dep directory. |
+| `yarn.nodemanager.aux-services.%s.remote-classpath` | NONE | The remote absolute or relative path to jar file |
+
+#### Example of loading jar file from HDFS:
+
+```xml
+
+
+ yarn.nodemanager.aux-services
+ mapreduce_shuffle,AuxServiceFromHDFS
+
+
+
+ yarn.nodemanager.aux-services.AuxServiceFromHDFS.remote-classpath
+ /aux/test/aux-service-hdfs.jar
+
+
+
+ yarn.nodemanager.aux-services.AuxServiceFromHDFS.class</name>
+ org.apache.auxtest.AuxServiceFromHDFS2
+
+
+```
+
+#### Example of loading jar file from local file system:
+
+```xml
+
+
+ yarn.nodemanager.aux-services
+ mapreduce_shuffle,AuxServiceFromHDFS
+
+
+
+ yarn.nodemanager.aux-services.AuxServiceFromHDFS.classpath
+ /aux/test/aux-service-hdfs.jar
+
+
+
+ yarn.nodemanager.aux-services.AuxServiceFromHDFS.class</name>
+ org.apache.auxtest.AuxServiceFromHDFS2
+
+
+```
**IMPORTANT:** If setting an auxiliary service in addition the default
`mapreduce_shuffle` service, then a new service key should be added to the
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java
index c8b7a766baa..3fe3cfd16ef 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java
@@ -230,15 +230,30 @@ public class AuxServices extends AbstractService
}
}
if (reDownload) {
+ LocalResourceType srcType = null;
+ String lowerDst = StringUtils.toLowerCase(src.toString());
+ if (lowerDst.endsWith(".jar")) {
+ srcType = LocalResourceType.FILE;
+ } else if (lowerDst.endsWith(".zip") ||
+ lowerDst.endsWith(".tar.gz") || lowerDst.endsWith(".tgz")
+ || lowerDst.endsWith(".tar")) {
+ srcType = LocalResourceType.ARCHIVE;
+ } else {
+ throw new YarnRuntimeException(
+ "Can not unpack file from remote-file-path:" + src
+ + "for aux-service:" + ".\n");
+ }
LocalResource scRsrc = LocalResource.newInstance(
URL.fromURI(src.toUri()),
- LocalResourceType.ARCHIVE, LocalResourceVisibility.PRIVATE,
+ srcType, LocalResourceVisibility.PRIVATE,
scFileStatus.getLen(), scFileStatus.getModificationTime());
FSDownload download = new FSDownload(localLFS, null, conf,
downloadDest, scRsrc, null);
try {
Path downloaded = download.call();
- dest = new Path(downloaded + Path.SEPARATOR + "*");
+ // don't need to convert downloaded path into a dir
+ // since its already a jar path.
+ dest = downloaded;
} catch (Exception ex) {
throw new YarnRuntimeException(
"Exception happend while downloading files "