Job提交前如何分发jar到hadoop
How to distribute jar to hadoop before Job submission
我想实施 REST API 来提交 Hadoop 作业以供执行。这完全是通过 Java 代码完成的。如果我编译一个 jar 文件并通过 "hadoop -jar" 执行它,一切都会按预期进行。但是当我通过 REST API 中的 Java 代码提交 Hadoop 作业时 - 作业已提交但由于 ClassNotFoundException 而失败。
是否可以以某种方式将 jar 文件(使用我的作业代码)部署到 hadoop(节点管理器及其容器),以便 hadoop 能够通过 class 名称定位 jar 文件?我应该将 jar 文件复制到每个节点管理器并在那里设置 HADOOP_CLASSPATH 吗?
您可以创建一个方法,将 jar 文件添加到 Hadoop 的分布式缓存中,以便在需要时可供 tasktrakers 使用。
private static void addJarToDistributedCache(
String jarPath, Configuration conf)
throws IOException {
File jarFile = new File(jarPath);
// Declare new HDFS location
Path hdfsJar = new Path(jarFile.getName());
// Mount HDFS
FileSystem hdfs = FileSystem.get(conf);
// Copy (override) jar file to HDFS
hdfs.copyFromLocalFile(false, true,
new Path(jar), hdfsJar);
// Add jar to distributed classPath
DistributedCache.addFileToClassPath(hdfsJar, conf);
}
然后在您的申请中,在提交作业之前调用 addJarToDistributedCache:
public static void main(String[] args) throws Exception {
// Create Hadoop configuration
Configuration conf = new Configuration();
// Add 3rd-party libraries
addJarToDistributedCache("/tmp/hadoop_app/file.jar", conf);
// Create my job
Job job = new Job(conf, "Hadoop-classpath");
.../...
}
您可以在 blog:
中找到更多详细信息
我想实施 REST API 来提交 Hadoop 作业以供执行。这完全是通过 Java 代码完成的。如果我编译一个 jar 文件并通过 "hadoop -jar" 执行它,一切都会按预期进行。但是当我通过 REST API 中的 Java 代码提交 Hadoop 作业时 - 作业已提交但由于 ClassNotFoundException 而失败。 是否可以以某种方式将 jar 文件(使用我的作业代码)部署到 hadoop(节点管理器及其容器),以便 hadoop 能够通过 class 名称定位 jar 文件?我应该将 jar 文件复制到每个节点管理器并在那里设置 HADOOP_CLASSPATH 吗?
您可以创建一个方法,将 jar 文件添加到 Hadoop 的分布式缓存中,以便在需要时可供 tasktrakers 使用。
private static void addJarToDistributedCache(
String jarPath, Configuration conf)
throws IOException {
File jarFile = new File(jarPath);
// Declare new HDFS location
Path hdfsJar = new Path(jarFile.getName());
// Mount HDFS
FileSystem hdfs = FileSystem.get(conf);
// Copy (override) jar file to HDFS
hdfs.copyFromLocalFile(false, true,
new Path(jar), hdfsJar);
// Add jar to distributed classPath
DistributedCache.addFileToClassPath(hdfsJar, conf);
}
然后在您的申请中,在提交作业之前调用 addJarToDistributedCache:
public static void main(String[] args) throws Exception {
// Create Hadoop configuration
Configuration conf = new Configuration();
// Add 3rd-party libraries
addJarToDistributedCache("/tmp/hadoop_app/file.jar", conf);
// Create my job
Job job = new Job(conf, "Hadoop-classpath");
.../...
}
您可以在 blog:
中找到更多详细信息