• 解决Eclipse中运行WordCount出现 java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount$TokenizerMapper问题【转】


    View Code
     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()); 

  • 相关阅读:
    redis数据类型
    golang的select实现原理剖析
    goroutine的设计与实现
    go语言的duck typing
    go语言的局部变量在堆上还是栈上?
    REDIS学习
    C++11右值引用
    C++自问
    go语言interface学习
    go语言学习(基本数据类型)
  • 原文地址:https://www.cnblogs.com/94julia/p/2966705.html
Copyright © 2020-2023  润新知