Java 无法连接hadoop

Java 无法连接hadoop,java,hadoop,hdfs,Java,Hadoop,Hdfs,连接到hadoop时,出现以下错误 线程“main”java.lang.AbstractMethodError中出现异常:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.getProxy()Lorg/apache/hadoop/io/retry/FailoverProxyProvider$ProxyInfo; 位于org.apache.hadoop.io.retry.RetryInvocation

连接到hadoop时,出现以下错误

线程“main”java.lang.AbstractMethodError中出现异常:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.getProxy()Lorg/apache/hadoop/io/retry/FailoverProxyProvider$ProxyInfo; 位于org.apache.hadoop.io.retry.RetryInvocationHandler。(RetryInvocationHandler.java:73) 位于org.apache.hadoop.io.retry.RetryInvocationHandler。(RetryInvocationHandler.java:64) 位于org.apache.hadoop.io.retry.RetryProxy.create(RetryProxy.java:58) 在org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:147)上 位于org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:510) 位于org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:453) 在org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:136)上 位于org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2653) 在org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:92) 位于org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2687) 位于org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2669) 位于org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371) 位于org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170) 位于hrumen.HTest.main(HTest.java:26)

下面是我的代码:

***Path corepath = new Path("/var/tmp/hactive/core-site.xml");
        Path sitepath = new Path("/var/tmp/hactive/hdfs-site.xml");
        Path yarnpath = new Path("/var/tmp/hactive/yarn-site.xml");
        Path mapredpath = new Path("/var/tmp/hactive/mapred-site.xml");

        Configuration hconf = new Configuration();
        hconf.addResource(corepath);
        hconf.addResource(sitepath);
        hconf.addResource(yarnpath);
        hconf.addResource(mapredpath);

        try{
            DFSAdmin dfadmin = new DFSAdmin(hconf);
            dfadmin.report();

        }
        catch(Exception e){
            //System.out.println("[Exception]: "+e);
            e.printStackTrace();
        }***
这里是hdfs-site.xml的一部分

...
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
        <final>true</final>

    </property>
....

    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
。。。
dfs.nameservices
mycluster
真的
....
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
在core-site.xml中

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>

fs.defaultFS
hdfs://mycluster

..

我在尝试运行我的应用程序(在Hortonworks中)时遇到了相同的问题。在被卡住后-这需要一段时间,因此在这里添加供将来参考-以下修复了问题

添加到pom.xml(注意:版本可能会有所不同,请相应设置):


org.apache.hadoop
hadoop hdfs
2.8.1
或加上:

/path/to/hadoop-hdfs-client-<version_number>.jar
/path/to/hadoop hdfs client-.jar

到您的类路径,以便在运行时包含hadoop hdfs客户端jar。

可能与您的配置文件有关。否。集群表现良好,但仅尝试从该代码连接时,面临问题。相同的代码和单个namenode(独立)集群运行良好,对于ha namenode,我们必须启用任何其他东西吗?这就是我所需要的,你正在运行HA配置?谢谢@Saifhamad的关注,问题已经解决。集群在hadoop用户上运行,我从根用户运行的代码就是问题所在,一旦我换成hadoop,我就可以从代码连接集群了
/path/to/hadoop-hdfs-client-<version_number>.jar