无法创建 Hadoop Eclipse 服务器



我已经安装了hadoop 2.2.0我的Linux 12.1我成功创建了一个 hadoop插件 jar 文件,并使用此插件复制到 eclipse 插件文件夹中。当我尝试在日食中创建 dfs 服务器时,出现以下错误。我尝试使用不同的番石榴版本,但我仍然有相同的错误。

有人可以帮助我解决这个问题吗?

谢谢。

java.lang.NoClassDefFoundError: com/google/common/collect/Interners
at org.apache.hadoop.util.StringInterner.(StringInterner.java:48)
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2108)
at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2001)
at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1918)
at org.apache.hadoop.conf.Configuration.get(Configuration.java:721)
at org.apache.hadoop.eclipse.server.HadoopServer.addPluginConfigDefaultProperties(HadoopServer.java:450)
at org.apache.hadoop.eclipse.server.HadoopServer.(HadoopServer.java:229)
at org.apache.hadoop.eclipse.servers.HadoopLocationWizard.(HadoopLocationWizard.java:88)
at org.apache.hadoop.eclipse.actions.NewLocationAction$1.(NewLocationAction.java:41)
at org.apache.hadoop.eclipse.actions.NewLocationAction.run(NewLocationAction.java:40)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:588)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:505)
at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:456)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4421)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1388)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3771)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3391)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1122)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1006)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:146)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:565)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:125)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:109)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:80)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:372)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:226)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Interners cannot be found by osgi.identity; osgi.identity="org.apache.hadoop.eclipse"; type="osgi.bundle"; version:Version="0.18.0"; singleton:="true"
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:411)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:331)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:323)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 40 more

缺少指向您正在使用的插件的链接。所以我所能做的就是诊断症状:

堆栈跟踪的相关部分是:

Caused by: 
java.lang.ClassNotFoundException: com.google.common.collect.Interners cannot be found 
by osgi.identity; osgi.identity="org.apache.hadoop.eclipse"; type="osgi.bundle";
version:Version="0.18.0"; singleton:="true"

因此,您的类路径上缺少一个 jar。Maven Central 有一个包含此类的 jar 列表:

  • http://search.maven.org/#search|ga|1|fc%3A%22com.google.common.collect.Interners%22

希望这有帮助。

我发现了问题!问题出在清单文件中,位于 jar 文件中的番石榴.jar位置错误。我正在使用"ant"构建插件,该插件应该像"lib/guava-15.0.jar"而不是"lib/guava-{$guava.version}"这样的位置。