java hdfs 客户端链接_HDFS客户端操作(JAVA代码)

环境准备

windows需要配置hadoop的windows下的依赖

安装包地址:

将安装包解压至自己所选择的目录,然后配置环境变量:

HADOOP_HOME : 解压的目录

PATH后新增:%HADOOP_HOME%\bin

maven所需依赖

新建Maven项目,添加以下依赖:

junit

junit

4.12

org.apache.logging.log4j

log4j-slf4j-impl

2.12.0

org.apache.hadoop

hadoop-client

3.1.3

实际操作

实际操作前先讲所需要的对象设为全局变量,方便今后操作:

private URI uri;

private Configuration configuration;

private String user;

private FileSystem fileSystem;

使用@Before注释的函数,可以在@Test注释下的函数运行前执行,可以进行对象的初始化:

@Before

public void init() throws IOException, InterruptedException {

uri = URI.create("hdfs://hadoop100:8020");

configuration = new Configuration();

user = "nevesettle";

fileSystem = FileSystem.get(uri,configuration,user);

}

@After则相反

@After

public void closeFs() throws IOException {

fileSystem.close();

}

文件上传

/**

* 上传文件

* @throws IOException

*/

@Test

public void uploadFile() throws IOException {

fileSystem.copyFromLocalFile(false,false,

new Path("D:\\Program files\\QQ\\QQ Data\\794133319\\FileRecv\\资源集合.txt"),

new Path("/"));

}

使用的函数为:

copyFromLocalFile(boolean delSrc, boolean overwrite,Path src, Path dst)

delSrc:是否删除源文件

overwrite:目标地址有相同文件是否覆盖

src:源文件地址

dst:目标文件地址

文件下载

/**

* 文件下载

* @throws IOException

* @throws InterruptedException

*/

@Test

public void downFile() throws IOException {

fileSystem.copyToLocalFile(false,

new Path("/资源集合.txt"),

new Path("d:\\"),

true);

}

使用的函数为:

copyToLocalFile(boolean delSrc, Path src, Path dst,boolean useRawLocalFileSystem)

delSrc:是否删除源文件

src:源文件地址

dst:目标文件地址

useRawLocalFileSystem:是否进行文件传输校验(CRC校验)

文件更名及移动位置

/**

* 文件名字修改

* @throws IOException

* @throws InterruptedException

*/

@Test

public void updateFile() throws IOException {

fileSystem.rename(new Path("/资源集合.txt"),

new Path("/资源.txt"));

}

使用的函数为:

rename(Path src, Path dst)

src:源文件

dst:目标文件

前后目录相同,文件名不同,则是修改文件名

前后目录不同,文件名相同,则是修改目录

前后目录和文件名都不同,则是移动位置并修改文件名

文件删除

/**

* 文件删除

* @throws IOException

* @throws InterruptedException

*/

@Test

public void deleteFile() throws IOException {

fileSystem.delete(new Path("/资源.txt"),false);

}

使用的函数为:

delete(Path f, boolean recursive)

f:删除的文件或目录地址

recursive:是否递归删除

当要删除的为文件是,递归删除为false

当要删除的是目录且为空时,递归删除为false

当要删除的是目录且不为空,则递归删除为true

IO流的文件上传

/**

* IO流的文件上传

* @throws IOException

* @throws InterruptedException

*/

@Test

public void uploadFileByIO() throws IOException {

//源文件地址

String srcFilePath = "D:\\资源集合.txt";

//目标文件地址

String destFilePath = "/资源集合.txt";

//输入流

FileInputStream fis = new FileInputStream(new File(srcFilePath));

//通过hdfs封装的方法获取输出流

FSDataOutputStream fos = fileSystem.create(new Path(destFilePath));

//最原始的方法

// int i = 0;

// while ( ( i = fis.read()) != -1 ){

// fot.write(i);

// }

//hdfs封装的方法

IOUtils.copyBytes(fis,fos,configuration);

//关闭IO流

IOUtils.closeStream(fis);

IOUtils.closeStream(fos);

}

IOUtils 使用时注意要使用hadoop的包,不要使用错了

configuration 为我们的全局变量,即配置

IO流的文件下载

/**

* IO流的文件下载

* @throws IOException

* @throws InterruptedException

*/

@Test

public void downFileByIO() throws IOException {

//源文件

String srcFilePath = "/资源集合.txt";

//目标文件

String destFilePath = "d:\\资源.txt";

//获得输入流

FSDataInputStream fis = fileSystem.open(new Path(srcFilePath));

//获得输出流

FileOutputStream fos = new FileOutputStream(new File(destFilePath));

//传输

IOUtils.copyBytes(fis,fos,configuration);

//关闭

IOUtils.closeStream(fis);

IOUtils.closeStream(fos);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值