HDFS命令与API

HDFS命令与API

前言

命令

创建一个目录

hdfs dfs -mkdir /usr

创建多层目录

hdfs dfs -mkdir -p /usr1/local   

查看hdfs目录

hdfs dfs -ls /   

上传文件到hdfs的某一个目录中,可上传目录

hdfs dfs -put file.txt /usr 

查看此目录下的文件

hdfs dfs -ls /usr  

下载文件到当前目录,后边可以跟路径指定下载到什么位置

hdfs dfs -get /usr/file.txt

查看文件内容

hdfs dfs -cat  /usr/file.txt

搜索文件

hdfs dfs -find / -name test.txt   # 精准查询文件
hdfs dfs -find / -name '*.txt'   # 模糊查询文件

修改hdfs中文件名,移动文件位置,复制文件

hdfs dfs -mv /usr/test.txt /usr/test1.txt   # 修改文件名
hdfs dfs -cp /usr/test1.txt /   # 复制文件到指定位置
hdfs dfs -mv /usr/test1.txt /usr1/test1.txt   # 移动文件

删除文件、目录

hdfs dfs -rm /usr/file.txt  # 文件 
hdfs dfs -rm -r /usr   # 目录

API

此处使用的是Java语言,导入maven依赖

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.3</version>
</dependency>

将Linux上安装的hdfs配置文件core-site.xml和hdfs-site.xml拿到Java程序的conf文件中
在这里插入图片描述

HDFS连接

// true: 会加载上面的xml文件
Configuration configuration = new Configuration(true);
// 设置文件块的大小为1MB,看自己需要不设置使用默认128MB
configuration.set("dfs.blocksize","1048576");
// 此处要设置root,由于使用windows电脑用户名不是root在使用hdfs时会报用户错误
FileSystem fileSystem = FileSystem.get(new URI("hdfs://node1:8020"),configuration,"root");

查看文件状态

	// 获取指定路径下文件的状态
	FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
	// 循环遍历
	for (FileStatus fileStatus : fileStatuses) {
	    System.out.println(fileStatus);
	}

创建目录,可创建多层

	boolean flag = fileSystem.mkdirs(new Path("/a/b/c"));
	System.out.println(flag?"创建成功":"创建失败");

删除文件或者目录

	// true: 可以删除非空目录   false: 只能删除文件或者空目录
	boolean delete = fileSystem.delete(new Path("/a"), true);
	System.out.println(delete?"删除成功":"删除失败");

上传文件

	// 本地的输入流->hdfs文件系统的输出流
	FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path("/usr/local/hadoop/redis1.tar.gz"));
	// 创建本地的输入流,用来读取本地磁盘的文件
	FileInputStream fileInputStream = new FileInputStream(new File("D:\\redis-7.0.0.tar.gz"));
	// 使用hadoop的工具类,第一位输入流,第二位输出流,第三位为缓冲区大小,第四位是否关闭
	IOUtils.copyBytes(fileInputStream, fsDataOutputStream,1024,true);

下载文件

	// hdfs文件系统的输入流->本地输出流
	FSDataInputStream fsDataInputStream = fileSystem.open(new Path("/usr/local/hadoop/redis1.tar.gz"));
	// 创建本地的输出流
	FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\redis1.tar.gz"));
	// 对接两个流
	IOUtils.copyBytes(fsDataInputStream, fileOutputStream,1024,true);

获取所有文件块的所有信息

	// 获取文件信息
	FileStatus fileStatus = fileSystem.getFileStatus(new Path("/usr/local/hadoop/redis2.tar.gz"));
	// 获取fileStatus对应文件的所有块的信息
	BlockLocation[] fileBlockLocations = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
	// 遍历
	for (BlockLocation blockLocation : fileBlockLocations) {
	    System.out.println(blockLocation);
	}

关闭HDFS连接

fileSystem.close();

本专栏为大数据学习专栏,如有问题还望指出,共同学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

week@eight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值