簡體   English   中英

hadoop中的NoCLassDefFound錯誤

[英]NoCLassDefFound error in hadoop

我正在使用hadoop 2.4.1版本。 我正在嘗試運行將數據從本地系統移動到hdfs集群(輸出目錄)的mapreduce作業。 如果將輸出目錄設置為本地系統路徑,則程序運行正常。 但是當我將輸出目錄設置為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依賴有關。 從hadoop 1.0.4升級后,Hadoop 2.2.0 mapreduce作業未運行我正在使用具有protobuf的hadoop commons jar 2.5.2。 任何幫助解決此問題的方法將不勝感激。

使它工作! 發現有一些2.2版本的jar與當前版本不兼容。 當我更新這些程序時,該程序運行正常。

如果您編譯* .java,請使用默認的Java CLASSPATH即可。 編輯hadoop_env.sh導出HADOOP_CLASSPATH = $ {CLASSPATH}重新啟動hadoop服務器

當類路徑中不存在類時,jvm將在運行時拋出NoClassDefFoundError

檢查您的類路徑。

還要檢查此答案。 如果您解決了NoClassDefFoundError 鏈接,可能會很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM