操作java上传文件时,报错

操作java上传文件时,报错

问题描述:

操作java上传文件时,报下面的错误。hadoop集群有启动。老师帮忙看下是什么原因导致的,找不出来呀

相关代码:

java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"


相关代码:

package com.imooc.hdfs;

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

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class HdfsOp {

    public static void main(String[] args) throws IOException {
        System.out.println("haha");
        //创建一个配置对象
        Configuration configuration=new Configuration();
        //指定HDFS的地址
        configuration.set("fs.defaultFS","hdfs://bigdata01:9000");
        //获取操作HDFS的对象
        FileSystem fileSystem=FileSystem.get(configuration);

        put(fileSystem);
       // get(fileSystem);
       // delete(fileSystem);
    }

    /**
     * 删除文件
     * @param fileSystem
     * @throws IOException
     */
    private static void delete(FileSystem fileSystem) throws IOException {
        boolean flag = fileSystem.delete(new Path("/user.txt"), true);
        if (flag){
            System.out.println("删除成功!");
        }else{
            System.out.println("删除失败!");
        }
    }

    /**
     * 下载文件
     * @param fileSystem
     * @throws IOException
     */
    private static void get(FileSystem fileSystem) throws IOException {
        //获取HDFS文件系统的输入流
        FSDataInputStream fis = fileSystem.open(new Path("/README.txt"));
        //获取本地文件的输出流
        FileOutputStream fos = new FileOutputStream("D:\\README.txt");
        IOUtils.copyBytes(fis,fos,1024,true);
    }

    /**
     * 上传文件
     * @param fileSystem
     * @throws IOException
     */
    private static void put(FileSystem fileSystem) throws IOException {
        //获取HDFS文件系统的输出流
        FSDataOutputStream fos = fileSystem.create(new Path("/user.txt"));
        //获取本地文件的输入流
        FileInputStream fis = new FileInputStream("D:\\user.txt");
        //上传文件:通过工具类把输入流拷贝到输出流里面,实现本地上传文件
        IOUtils.copyBytes(fis,fos,1024,true);
    }
}



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
徐老师 2022-09-07 17:24:31

这个问题目前发现有两位同学都是因为忘记注释pom.xml中依赖中的scope参数导致的。

一定要注意确认一下这块:


下面这个依赖中的scope配置表示只在编译的时候使用,所以执行的时候还是找不到这个依赖。

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.0</version>
    <scope>provided</scope>
</dependency>


解决办法就是把下面这一行内容注释掉,或者删掉。

<scope>provided</scope>


其实遇到这个问题还是不细心,课程中有重点强调过这个问题。

徐老师 2022-07-12 16:42:21

应该是有两个问题

1.日志中提示的JNI有问题,其实就是Java环境安装的有问题,确认一下windows中配置的JAVA_HOME环境变量是否指向了jdk目录。有可能指向了jre目录,这个是错的

2.当执行代码不再提示JNI错误的时候可能整个代码就可以执行了,如果JNI那个错误解决了,但是还有classnotfound的报错信息,估计是依赖没有成功下载,可以使用课程第6周,6-4小节中第2个问题的解决方案处理一下应该就可以了

  • 提问者 qq_慕神6504824 #1

    老师,还是不行呀。哪天有空能帮我远程看下是什么问题吗?我感觉是hadoop文件的问题。

    2022-07-12 23:28:07
  • 徐老师 回复 提问者 qq_慕神6504824 #2
    下午6点以后我这边可以,你先提前加一下课程内部QQ群,加群方式在第1周1-1小节里面有,到时候在群里联系我即可
    2022-07-13 07:32:50
  • 老师,我也是这个问题,不知道该怎么解决,在CSDN上找了2天都没有彻底解决这个问题,卡在这里了

    2022-09-07 01:11:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师