ReadFromHadoopURL文件的内容如下:
package com.felix.hadoop.training;
import java.io.InputStream;
import java.net.URL;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;
// URLCat
public class ReadFromHadoopURL {
static {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void main(String[] args) throws Exception {
InputStream in = null;
try {
in = new URL(args[0]).openStream();
IOUtils.copyBytes(in, System.out, 4096, false);
} finally {
IOUtils.closeStream(in);
}
}
}
然后我创建了一个jar文件ReadFromHadoopURL.jar。
然后我运行了这个命令
hadoop jar /home/training/Pradosh/ReadFromHadoopURL.jar ReadFromHadoopURL hdfs://localhost:54310/my/empfile
我收到此错误
Exception in thread "main" java.lang.ClassNotFoundException: ReadFromHadoopURL
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
你能帮我调试吗?
答案 0 :(得分:1)
您可能只需要使用包名称完全限定您的类名。 ReadFromHadoopURL
应为com.felix.hadoop.training.ReadFromHadoopURL
。
hadoop jar /home/training/Pradosh/ReadFromHadoopURL.jar com.felix.hadoop.training.ReadFromHadoopURL hdfs://localhost:54310/my/empfile
答案 1 :(得分:0)
要使用hadoop jar
命令运行,您必须实现一个包含Map extends Mapper<>
类(以及可选Reduce extends Reducer<>
)的类,如规范WordCount Example中所示。
上面看起来您正在尝试实现一个简单的Java控制台应用程序来捕获存储在HDFS中的文件。如果是这种情况,那么您应该使用类似的方式运行它:
java -cp ./ReadFromHadoopURL.jar ReadFromHadoopURL hdfs://localhost:54310/my/empfile
注意:从命令行获取所有Hadoop和Apache依赖项可能需要大量扩展的cp / classpath。