hadoop上java


本人参考书上的源代码在hadoop上做实验,源代码如下:


 public class URLCat {
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);
}
}
}

程序编译完成后,执行:


 hadoop URLCat hdfs://文件路径...

报错:


 Exception in thread "main" java.lang.UnsupportedClassVersionError: URLCat:Unsupported major.minor version 51.0
    ...

怎么破?
怎么解决?
谢谢~

hadoop java 大数据

蒙娜丽莎的猥笑 10 years ago

从异常提示的信息的来看就是不支持的class文件版本异常,建议更换更高版本的jdk

最終鬼畜熊貓君 answered 10 years ago

源码的话,应该没问题,如果是这样报错的话,我遇到过,是因为环境变量和conf文件指定的问题,找不到你所指定的URLCat这个类,你只要配置好你所需要使用的集群的配置文件,并且指定好对应集群的客户端,以及相关的各种库就可以了,当时我也是搞了很久,在书上对配置的东西弱化了,没怎么讲,只能自己去实践。
你可以参考一下这个文章:
http://segmentfault.com/blog/akunamatata/1190000002610514
这里面详细讲了如何配置环境变量,编译,执行,以及如何指定配置文件

蛋疼的菊花 answered 10 years ago

java 版本不对

孩子de弟弟 answered 10 years ago

这个异常应该和源码没有关系。
class文件结构里最开头4字节是 Magic Number ,也就是 0xCAFEBABE
后面接的4个字节就是题主异常信息中的 Minor version Major version
第5、第6是 Minor version ,第7、第8则是 Major version
而Java的版本号是从45开始的,参考:

J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

真不知道知道这些有什么用,题主试试用Java7以上编译。
参考: http://en.wikipedia.org/wiki/Java_class_file

玛利隔壁的 answered 10 years ago

Your Answer