运行copyToLocalFile文件,出现空指针错误。
来源:3-26 HDFS API编程之列出文件夹下的所有内容

酱汁怪兽
2021-07-02
您好:
(1)下载了winutils.exe文件,放置在D:\winutils\bin下面。
(2)添加了:System.setProperty(“hadoop.home.dir”, “d:\winutils\”);
但是还是报空指针错误
前面的配置,应该是没有问题的。麻烦您了~
package com.imooc.bigdata.hadoop.hdfs;
import org.apache.hadoop.conf.Configuration;
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 org.apache.hadoop.util.Progress;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
/**
* 使用Java API操作HDFS文件系统
*
* 因为是放在test下面,所以最好使用单元测试的方式
* 在pom中引入的jUnit单元测试的方式
* 单元测试有两个方法:(1)在单元测试之前进行;(2)在单元测试之后进行
*
* 关键点:
* 1)创建Configuration
* 2)获取FileSystem
* 3)剩下的是HDFS API的操作
*/
public class HDFSApp {
public static final String HDFS_PATH = "hdfs://hadoop000:8020";
//Configuration、FileSystem是每一个方法使用之前必须构建的
Configuration configuration = null;
FileSystem fileSystem = null;
@Before
public void setup() throws Exception{
System.out.println("-----setup-----");
configuration = new Configuration();
configuration.set("dfs.replication", "1");
/*
*构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户的用户名
*/
fileSystem = FileSystem.get(new URI("hdfs://hadoop000:8020"), configuration, "hadoop");
}
/*
* 拷贝HDFS文件系统 至 本地主机文件
*/
@Test
public void copyToLocalFile() throws Exception{
System.setProperty("hadoop.home.dir", "d:\\winutils\\");
Path src = new Path("/hdfsApi/test/hello.txt");
Path dst = new Path("G:/BaiduNetdiskDownload");
fileSystem.copyToLocalFile(src, dst);
}
@After
public void tearDown(){
System.out.println("-----tearDown-----");
//置空
configuration = null;
fileSystem = null;
}
}
写回答
1回答
-
Michael_PK
2021-07-04
遇到问题建议可以先到问答区搜索下,基本都能找到的。参考https://coding.imooc.com/learn/questiondetail/vQW1lPEp0jG6yE9A.html
00
相似问题