noclassdeffound在hadoop中出错

5w9g7ksd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(516)

我使用的是hadoop2.4.1版本。我正在尝试运行一个mapreduce作业,它将数据从本地系统移动到hdfs集群(输出目录)。如果将输出目录设置为本地系统路径,则程序运行正常。但是当我在hdfs集群中将输出目录设置为路径时,我得到了以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/protobuf/ServiceException
    at org.apache.hadoop.ipc.ProtobufRpcEngine.<clinit>(ProtobufRpcEngine.java:69)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:1834)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1799)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1893)
    at org.apache.hadoop.ipc.RPC.getProtocolEngine(RPC.java:203)
    at org.apache.hadoop.ipc.RPC.getProtocolProxy(RPC.java:537)
    at org.apache.hadoop.hdfs.NameNodeProxies.createNNProxyWithClientProtocol(NameNodeProxies.java:328)
    at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies.java:235)
    at org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:139)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:510)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:453)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:136)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2397)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2431)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2413)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:368)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
    at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.setOutputPath(FileOutputFormat.java:160)
    at s1.run(s1.java:66)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at s1.main(s1.java:75)
Caused by: java.lang.ClassNotFoundException: com.google.protobuf.ServiceException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 25 more

我看到一些帖子说这个问题可能与protobuf依赖有关。Hadoop2.2.0 mapreduce作业从Hadoop1.0.4升级后未运行我使用的是HadoopCommonsjar2.5.2,它有protobuf。任何帮助解决这个问题都将不胜感激。

00jrzges

00jrzges1#

如果编译zhe*.java,使用默认的java类路径是可以的。编辑hadoop\u env.sh导出hadoop\u classpath=${classpath}重新启动hadoop服务器

rslzwgfq

rslzwgfq2#

NoClassDefFoundError 当类路径中不存在类时,jvm在运行时抛出。
检查你的类路径。
也检查这个答案。如果您解决了noclassdeffounderror链接,可能会很有用

bbuxkriu

bbuxkriu3#

成功了!发现一些2.2版本的jar与当前版本不兼容。当我更新这些时,程序运行良好。

相关问题