【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStrea线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/hadoop/fs/FSDataInputStrea
【发布时间】:2018-09-28 10:48:04
【问题描述】:

我是 Cloudera 快速入门的新手,如果我的解释不是很清楚,我很抱歉。无论如何,我正在用 Java 编写一个从 Hdfs 读取文件的代码。我构建了一个 Maven-Project 并在 pom.xml 中设置了所有依赖项,但是当我尝试从 shell (java -jar jnameofthefile.jar) 启动 jar 时,我收到了这个错误: 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/hadoop/fs/FSDataInputStrea

这是我的 Java 代码:

package com.hdfs_java_api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;



import java.io.InputStream;
import java.io.IOException;
import java.net.URI;

public class HadoopFileSystemCat {

public static void main(String [] args) throws IOException
{
    String uri = "hdfs://quickstart.cloudera:8020/user/hive/warehouse/Orders.csv";
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(uri), conf);
    InputStream in = null;

    try {

    in = fs.open(new Path(uri));


    IOUtils.copyBytes(in, System.out, 4096, false);
}finally{
    IOUtils.closeStream(in);
        }
}


}

这是我的 pom.xml:

 <project xmlns="http://maven.apache.org/POM/4.0.0" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com</groupId>
<artifactId>cards</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>hdfs_java_api</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF- 
8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>

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

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

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-common</artifactId>
  <version>2.6.0-cdh5.13.0</version>
</dependency>

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-core</artifactId>
  <version>2.6.0-cdh5.13.0</version>
</dependency>
</dependencies>

<repositories>
<repository>
  <id>cloudera</id>
  <name>cloudera</name>
  <url>https://repository.cloudera.com/artifactory/cloudera- 
   repos/</url>
</repository>
</repositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>

  <mainClass>com.hdfs_java_api.HadoopFileSystemCat</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

正如我所说,我是菜鸟,所以请耐心等待,并尽量做到清楚,提前谢谢!

【问题讨论】:

    标签: java hdfs cloudera-quickstart-vm


    【解决方案1】:

    我认为您缺少核心库

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

    然后确保您已在构建路径中包含“Maven 依赖项”。

    在部署组装中 -

    【讨论】:

    • 我已经添加了核心库,但是出现了同样的错误
    • 是否正确下载?使用 maven>更新项目。
    • 我做到了,没有任何改变
    • 首先感谢您的时间,我包含了 Maven 依赖项,但第二步缺少部署程序集。因此,我将 org.eclipse.wst.common.modulecore.ModuleCoreNature 添加到我的 .project 文件中,如此处所述 [stackoverflow.com/questions/8399885/… 出现了,但出现了一个错误,表明这不是虚拟项目,一段时间后 Eclipse 崩溃了。也许我还需要重新安装 eclipse,因为它是光子版本而不是 EE。
    • 我认为您应该关注其他用户在此链接中提供的其他内容stackoverflow.com/questions/8399885/…
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多