在java中访问hdfs会引发错误

在java中访问hdfs会引发错误,java,hadoop,hdfs,Java,Hadoop,Hdfs,我可以通过hdfs dfs-ls/访问终端中的hdfs,并通过hdfs getconf-confKey fs.defaultFS获取集群的地址和端口(我在下面的代码中指的是地址和端口) 尝试在java中读取hdfs上的文件时,我遇到了与前面描述的类似的错误(本文也讨论了这一点)。 对于这个地址,我用java尝试了以下内容 FileSystem fs; BufferedReader br; String line; Path path

我可以通过
hdfs dfs-ls/
访问终端中的hdfs,并通过
hdfs getconf-confKey fs.defaultFS
获取集群的地址和端口(我在下面的代码中指的是地址和端口)

尝试在java中读取hdfs上的文件时,我遇到了与前面描述的类似的错误(本文也讨论了这一点)。 对于这个地址,我用java尝试了以下内容

        FileSystem fs;
        BufferedReader br;
        String line;
        Path path = new Path("hdfs://<address>:<port>/somedata.txt");
        try 
        {
            /* --------------------------
             * Option 1: Gave 'Wrong FS: hdfs://..., Expected file:///' error
            Configuration configuration = new Configuration();
            configuration.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
            configuration.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));
            fs = FileSystem.get(configuration);
            * ---------------------------
            */

            // --------------------------
            // Option 2: Gives error stated below
            Configuration configuration = new Configuration();
            fs = FileSystem.get(new URI("hdfs://<address>:<port>"),configuration);
            // --------------------------

            LOG.info(fs.getConf().toString());

            FSDataInputStream fsDataInputStream = fs.open(path);
            InputStreamReader inputStreamReader = new InputStreamReader(fsDataInputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            while((line=bufferedReader.readLine())!=null){
            // some file processing code here.
            }
            bufferedReader .close();
        } 
        catch (Exception e) 
        {
            fail();
        }
我可以从终端访问文件的事实表明,
core site.xml
hdfs site.xml
必须是正确的

谢谢你的帮助

编辑1: 我用于下面代码的maven依赖项如下

   <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.0.0-alpha4</version>
   </dependency>

   <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>1.2.1</version>
   </dependency>

   <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.0.0-alpha4</version>
   </dependency>

org.apache.hadoop
hadoop hdfs
3.0.0-4
org.apache.hadoop
hadoop内核
1.2.1
org.apache.hadoop
hadoop客户端
3.0.0-4

将您的POM更新为以下内容:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>2.6.0-mr1-cdh5.4.2.1</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.8.1</version>
</dependency>

org.apache.hadoop
hadoop客户端
2.8.1
org.apache.hadoop
hadoop内核
2.6.0-mr1-cdh5.4.2.1
聚甲醛
org.apache.hadoop
hadoop hdfs
2.8.1

永远不要使用alpha版本,因为它们可能有bug。

您可以在pom.xml文件中使用它

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.6.0</version>
    </dependency>

org.apache.hadoop
hadoop通用
2.6.0

我使用了版本2.6.0。您可以尝试任何更新版本。

看起来您可能缺少一些依赖项。如果您使用maven或类似软件,您可以共享您正在进行的hadoop导入吗?谢谢,更新了。为什么被否决?可能是因为你不知道什么是“无赖”。。。它通常指向某种版本控制冲突。库A想从库B调用一个方法。。。但是B中的方法已经不存在了。从这个意义上说:你以前做过一些研究吗,比如搜索那个异常消息?正如@GhostCat提到的,你的pom显示hadoop核心和其他依赖之间的版本冲突。应该是
hadoop common
3.0.0-alpha4
,我认为。这肯定是依赖性方面的版本不匹配。请检查您的构建类路径。非常感谢!必须包含CDH5存储库才能下载JAR
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.6.0</version>
    </dependency>