操作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); } }
21
收起
正在回答 回答被采纳积分+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>
其实遇到这个问题还是不细心,课程中有重点强调过这个问题。
相似问题
登录后可查看更多问答,登录/注册
大数据工程师 2024 版
- 参与学习 1151 人
- 提交作业 5960 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星