hdfs java操作_java操作HDFS

操作步骤

IDEA + MAVEN 创建JAVA工程

本地安装maven,IDEA配置maven并创建相应的maven项目

添加HDFS相关依赖

2.6.0-cdh5.7.0//指定hadoop版本

cloudera

https://repository.cloudera.com/artifactory/cloudera-repos//指定仓库地址

org.apache.hadoop //添加hadoop依赖

hadoop-client

${hadoop.version}

开发Java api 操作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;

public static final String HDFS_PATH = "hdfs://192.168.247.100:9000"; //hdfs路径

FileSystem fileSystem = null; //操作Hdfs核心类

Configuration configuration = null; //配置类

@Before

public void setUp() throws Exception{

System.out.println("set up");

configuration = new Configuration();

fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); //如用户无权限,可加用户参数

}

@After

public void tearDown() throws Exception {

configuration = null;

fileSystem = null;

System.out.print("tearDowm");

}

创建HDFS文件目录

@Test

public void mkdir() throws Exception{

fileSystem.mkdirs(new Path("/hdfsapi/test"));

}

创建HDFS文件

@Test

public void create() throws Exception{

FSDataOutputStream outputStream = fileSystem.create(new Path("/hdfsapi/test/test.txt"));

outputStream.write("Hello World".getBytes());

outputStream.flush();

outputStream.close();

}

查看HDFS文件内容

@Test

public void cat() throws Exception{

FSDataInputStream inputStream = fileSystem.open(new Path("/hdfsapi/test/test.txt"));

IOUtils.copyBytes(inputStream, System.out, 1024);

inputStream.close();

}

文件重命名

@Test

public void rename() throws Exception{

fileSystem.rename(new Path("/hdfsapi/test/test.txt"), new Path("/hdfsapi/test/test1.txt"));

}

上传本地文件

@Test

public void copyFromLocalFile() throws Exception{

fileSystem.copyFromLocalFile(new Path("E://U盘/test.sql"), new Path("/hdfsapi/test/")); //Windows系统和Linux系统都可以,写法不一样

}

上传本地大文件带进度条

@Test

public void copyFromLocalFileWithProgress() throws Exception{

InputStream is = new BufferedInputStream(

new FileInputStream(

new File("E://game.tgz")

)

);

FSDataOutputStream outputStream = fileSystem.create(

new Path("/hdfsapi/test/zookeeper.tar.gz"),

new Progressable() {

@Override

public void progress() {

System.out.print("."); //自定义进度条显示

}

}

);

IOUtils.copyBytes(is,outputStream,4096);

}

}

下载HDFS文件

@Test

public void copyToLocalFile() throws Exception{

fileSystem.copyToLocalFile(false, new Path("/hdfsapi/test/test.txt"), new Path("F://test.txt"), true);

//public void copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem)

//使用java io流 而不使用本地文件系统,windows会报空指针异常

}

查看HDFS目录

@Test

public void listFiles() throws Exception{

FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/hdfsapi/test"));

Arrays.stream(fileStatuses).forEach(fileStatus -> {

String isDir = fileStatus.isDirectory()? "文件夹" : "文件";

Short replication = fileStatus.getReplication(); //副本系数

/**

*如果采用HDFS Shell put的方式上传文件,采用服务器设置的默认副本系数

*如果采用java api 方式上传文件,本地没有设置副本系数,默认采用hadoop默认副本系数3

**/

Long blockSize = fileStatus.getBlockSize();

Long len = fileStatus.getLen();

String path = fileStatus.getPath().toString();

System.out.println(isDir+"\t"+replication+"\t"+blockSize+"\t"+len+"\t"+path);

});

}

删除

@Test

public void delete() throws Exception{

fileSystem.delete(new Path("/hdfsapi/test/zookeeper.tar.gz"),true);//是否递归删除

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值