前言
- 安装zookeeper请参考Linux - zookeeper集群搭建
- zookeeper基本使用请参考zookeeper命令与API
- Hadoop理论学习请参考Hadoop理论
- HDFS理论学习请参考HDFS理论
- 安装HDFS请参考Linux -HDFS部署
命令
创建一个目录
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();
本专栏为大数据学习专栏,如有问题还望指出,共同学习!