原文:http://tonymomo.pixnet.net/blog/post/62329497
1 package org.apache.hadoop.examples;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.net.URL;
8 import java.net.URLClassLoader;
9 import java.util.ArrayList;
10 import java.util.List;
11 import java.util.jar.JarEntry;
12 import java.util.jar.JarOutputStream;
13 import java.util.jar.Manifest;
14
15 public class EJob {
16
17 // To declare global field
18 private static List<URL> classPath = new ArrayList<URL>();
19
20 // To declare method
21 public static File createTempJar(String root) throws IOException {
22 if (!new File(root).exists()) {
23 return null;
24 }
25 Manifest manifest = new Manifest();
26 manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
27 final File jarFile = File.createTempFile("EJob-", ".jar", new File(
28 System.getProperty("java.io.tmpdir")));
29
30 Runtime.getRuntime().addShutdownHook(new Thread() {
31 public void run() {
32 jarFile.delete();
33 }
34 });
35
36 JarOutputStream out = new JarOutputStream(
37 new FileOutputStream(jarFile), manifest);
38 createTempJarInner(out, new File(root), "");
39 out.flush();
40 out.close();
41 return jarFile;
42 }
43
44 private static void createTempJarInner(JarOutputStream out, File f,
45 String base) throws IOException {
46 if (f.isDirectory()) {
47 File[] fl = f.listFiles();
48 if (base.length() > 0) {
49 base = base + "/";
50 }
51 for (int i = 0; i < fl.length; i++) {
52 createTempJarInner(out, fl[i], base + fl[i].getName());
53 }
54 } else {
55 out.putNextEntry(new JarEntry(base));
56 FileInputStream in = new FileInputStream(f);
57 byte[] buffer = new byte[1024];
58 int n = in.read(buffer);
59 while (n != -1) {
60 out.write(buffer, 0, n);
61 n = in.read(buffer);
62 }
63 in.close();
64 }
65 }
66
67 public static ClassLoader getClassLoader() {
68 ClassLoader parent = Thread.currentThread().getContextClassLoader();
69 if (parent == null) {
70 parent = EJob.class.getClassLoader();
71 }
72 if (parent == null) {
73 parent = ClassLoader.getSystemClassLoader();
74 }
75 return new URLClassLoader(classPath.toArray(new URL[0]), parent);
76 }
77
78 public static void addClasspath(String component) {
79
80 if ((component != null) && (component.length() > 0)) {
81 try {
82 File f = new File(component);
83
84 if (f.exists()) {
85 URL key = f.getCanonicalFile().toURL();
86 if (!classPath.contains(key)) {
87 classPath.add(key);
88 }
89 }
90 } catch (IOException e) {
91 }
92 }
93 }
94
95 }
mian方法中添加:
File jarFile = EJob.createTempJar("bin");
EJob.addClasspath("/usr/hadoop/conf");
ClassLoader classLoader = EJob.getClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
。。。
((JobConf) job.getConfiguration()).setJar(jarFile.toString());
如果本文对您有帮助,点一下右下角的“推荐”