java - HDFS API 在尝试从中获取数据时抛出错误

标签 java hadoop hdfs

我是 hadoop 的新手,正在尝试在 java 中使用 HDFS API 从 hdfs 获取数据。运行程序时出现此错误。这是堆栈跟踪。

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.apache.hadoop.tracing.SpanReceiverHost.get(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;)Lorg/apache/hadoop/tracing/SpanReceiverHost;
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:634)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2653)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:92)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2687)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170)
at hdfstest1.HDFSTestGUI1.listDirectory(HDFSTestGUI1.java:663)
at hdfstest1.HDFSTestGUI1.homeBtnActionPerformed(HDFSTestGUI1.java:483)
at hdfstest1.HDFSTestGUI1.access$1200(HDFSTestGUI1.java:47)
at hdfstest1.HDFSTestGUI1$13.actionPerformed(HDFSTestGUI1.java:246)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.AbstractButton.doClick(AbstractButton.java:356)
at hdfstest1.HDFSTestGUI1.<init>(HDFSTestGUI1.java:65)
at hdfstest1.HDFSTestGUI1$18.run(HDFSTestGUI1.java:571)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

阅读了几篇文章后,我了解到我当前的版本不支持我正在使用的某些方法。我的问题是如何检查当前版本的 hadoop 不支持哪种方法,以及如何迁移到正确的版本以在不破坏我当前配置的情况下以最佳方式运行?

我正在使用 hadoop 1.2.1。如果需要,很高兴分享我的代码。如果有人可以帮助我,我将不胜感激。 :)

最佳答案

1) “如何检查当前版本的hadoop不支持哪种方法” 通过编程,您可以捕获 java.lang.NoSuchMethodError。 因此,如果您怀疑某个方法可能未在您正在使用的软件中实现,请将调用包围在 try/catch 中,并在 catch 中执行您打算在发生这种情况时执行的操作。

2) “如何迁移到正确的版本以在不破坏我当前配置的情况下以最佳方式运行?”只需依次查看不同版本的hadoop API文档,然后使用您需要的版本。我去过那里,Hadoop 变化很大(可能不如 Spark,但仍然如此),这是唯一的解决方案。

一个建议,一旦你找到你需要的版本,就坚持下去。 future 的版本可能会实现补充功能,但除非你真的需要更新版本的东西,否则不要升级。 (教训是艰难的)。

关于java - HDFS API 在尝试从中获取数据时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705686/

相关文章:

hadoop - 在引擎盖下? PIG 在哪里保存中间结果/关系数据。?

hadoop - 在 docker 容器中运行 HDFS 伪模式

hadoop - hdfs如何选择一个datanode来存储

java - java中JFrame输入错误时通知用户

java - 如何在 JavaFX css 中将 -fx-max-width 设置为 USE_PREF_SIZE?

java - 索引时间字段在 solr 6.1.0 中未建立索引。给出错误为未定义字段 : "event_timestamp"

java - 在 HBase 中存储和更新 Set 的最佳方式是什么?

java - 如何在所有映射器中使用相同的数据?

java - 如何在Hadoop中加载 native 库

java - android searchview setOnActionExpandListener on Honeycomb 3.2