Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop分布式缓存:使用-libjars:如何在代码中使用外部jar_Java_Hadoop_Mapreduce_Distributed Cache - Fatal编程技术网

Java Hadoop分布式缓存:使用-libjars:如何在代码中使用外部jar

Java Hadoop分布式缓存:使用-libjars:如何在代码中使用外部jar,java,hadoop,mapreduce,distributed-cache,Java,Hadoop,Mapreduce,Distributed Cache,好的,我可以使用ilibjars路径将外部JAR添加到我的代码中。 现在,如何在我的代码中使用这些外部jar。假设我在jar中定义了一个函数,它对字符串进行操作。如何使用它。 使用context.getArchiveClassPaths(),我可以获得它的路径,但我不知道如何实例化该对象 下面是我正在导入的示例jar类 package replace; public class ReplacingAcronyms { public static String Replace(Stri

好的,我可以使用ilibjars路径将外部JAR添加到我的代码中。 现在,如何在我的代码中使用这些外部jar。假设我在jar中定义了一个函数,它对字符串进行操作。如何使用它。 使用context.getArchiveClassPaths(),我可以获得它的路径,但我不知道如何实例化该对象

下面是我正在导入的示例jar类

package replace;

public class ReplacingAcronyms {

    public static String Replace(String abc){
        String n;
        n="This is trial";
        return n;
}

}





public class wc_runner extends Configured implements Tool {
        @Override
        public int run(String[] args) throws Exception {
        Configuration conf = getConf();
        Job job = new Job(new Configuration());
        job.setJarByClass(wc_runner.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        job.setMapperClass(wc_mapper.class);
        job.setCombinerClass(wc_reducer.class);
        job.setReducerClass(wc_reducer.class);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        return (job.waitForCompletion(true)?0:1);


        }        

    public static void main(String[] args) throws Exception {
        int exitCode = ToolRunner.run(new wc_runner(), args);
        System.exit(exitCode);
    }
}
运行命令

[training@localhost Desktop]$ export HADOOP_CLASSPATH=file:///home/training/Desktop/replace.jar 
[training@localhost Desktop]$ hadoop jar try1.jar wc_runner /user/training/MR/custom/trial1 /user/training/MR/custom/out -libjars ./replace.jar
错误

14/03/08 02:39:40 WARN mapred.JobClient: Use GenericOptionsParser for parsing the    arguments. Applications should implement Tool for the same.
14/03/08 02:39:41 INFO input.FileInputFormat: Total input paths to process : 1
14/03/08 02:39:41 WARN snappy.LoadSnappy: Snappy native library is available
14/03/08 02:39:41 INFO snappy.LoadSnappy: Snappy native library loaded
14/03/08 02:39:41 INFO mapred.JobClient: Running job: job_201403080114_0021
14/03/08 02:39:42 INFO mapred.JobClient:  map 0% reduce 0%
14/03/08 02:39:46 INFO mapred.JobClient: Task Id : attempt_201403080114_0021_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: replace.ReplacingAcronyms
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190

在运行mapred作业之前,将包导入mapred代码,然后在HADOOP_类路径中添加jar文件的路径

例如。 在映射的java中

import your.external.package;
论编辑

javac -cp /path/to/your/external/package.jar:...
关于运行hadoop jar

export HADOOP_CLASSPATH=/path/to/your/external/package.jar
hadoop jar yourmapred.jar your.class -libjar /path/to/your/external/package.jar ....

好吧,我用错命令了。。用了这个以后。hadoop jar try.jar wc_runner/user/training/MR/custom/trial1/user/training/MR/custom/out-libjars replace.jar现在给出了未解决的编译错误,因为在用java编写时,我没有将replace包放在与代码相同的包中,代码给出了“无法解决”的结果但我正试图通过分布式缓存来实现这个包。关于如何解决这个问题有什么建议吗?如果我导入了我的包,那么在为我的MapReduce代码创建jar时就会包含这些建议。但是我想通过-libjars命令包含我的外部jar。不,这并不一定意味着您需要在映射的作业jar文件中包含您的包,您只需要在编译期间将其包含在javac类路径中。然后在执行hadoop jar-libjar时执行hadoop_类路径操作。您能告诉我将其包含在类路径中的命令吗。我正在用JavaEclipse编写代码,无法理解processOk。我试过了,但还是出错了。你能看看我的runner类和命令吗?你能试着省略这个文件吗://