目录
- HDFS分布式文件系统
- 一、HDFS命令行的操作
- 1.1、查看根目录
- 1.2、根目录创建文件夹
- 1.3、父目录不存在创建文件夹
- 1.4、递归查看目录结构
- 1.5、创建文件
- 1.6、修改文件夹的用户和用户组
- 1.7、修改文件夹的权限
- 1.8、查看文件的内容
- 1.9、追加文件内容
- 1.10、上传文件
- 1.11、下载文件到本地
- 1.12、删除文件
- 1.13、删除目录
- 二、HDFS的API操作
- 2.1、文件夹的创建
- 2.2、文件的创建
- 2.3、重命名
- 2.4、上传文件到HDFS
- 2.5、上传多个文件到HDFS
- 2.6、查看目标文件夹下的所有内容
- 2.7、下载HDFS文件到本地
- 2.8、删除文件或目录
- 2.9、查看文件块的信息
- 2.10、创建文件并写入内容
- 2.11、上传大文件到HDFS
- 2.12、查看文件内容
HDFS分布式文件系统
一、HDFS命令行的操作
1.1、查看根目录
hadoop fs -ls /
1.2、根目录创建文件夹
hadoop fs -mkdir /test
1.3、父目录不存在创建文件夹
hadoop fs -mkdir -p /zzm/abc
1.4、递归查看目录结构
hadoop fs -ls -R /
1.5、创建文件
hadoop fs -touchz /zzm/word.txt
1.6、修改文件夹的用户和用户组
hadoop fs -chown -R hadoop1:hadoop1 /zzm
1.7、修改文件夹的权限
hadoop fs -chmod -R 777 /zzm
1.8、查看文件的内容
hadoop fs -cat /zzm/word.txt
hadoop fs -tail /zzm/word.txt
hadoop fs -text /zzm/word.txt
1.9、追加文件内容
hadoop fs -appendToFile ./word.txt /zzm/word.txt
1.10、上传文件
hadoop fs -put ./word.txt /zzm/abc
hadoop fs -copyFromLocal ./word.txt /zzm/abc
1.11、下载文件到本地
hadoop fs -get /zzm/word.txt ./
1.12、删除文件
hadoop fs -rm /zzm/abc/word.txt
1.13、删除目录
hadoop fs -rmdir /test
二、HDFS的API操作
2.1、文件夹的创建
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 文件夹创建
*/
public class HDFS_mkdir {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.HDFS_mkdir API操作
Path path = new Path("/a");
boolean result = fileSystem.mkdirs(path);
System.out.println(result);
}
}
2.2、文件的创建
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 文件的创建
*/
public class HDFS_createFile {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.HDFS_mkdir API操作
Path path = new Path("/zzm/a.txt");
boolean result = fileSystem.mkdirs(path);
System.out.println(result);
}
}
2.3、重命名
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 重命名
*/
public class HDFS_rename {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.HDFS_mkdir API操作
Path oldPath = new Path("/zzm/a.txt");
Path newPath = new Path("/zzm/b.txt");
boolean result = fileSystem.rename(oldPath, newPath );
System.out.println(result);
}
}
2.4、上传文件到HDFS
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 拷贝本地文件到HDFS
*/
public class HDFS_copyFromLocalFile {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.HDFS_mkdir API操作
Path src = new Path("C:/Users/LENOVO/Desktop/header.jpg");
Path dst = new Path("/zzm/");
fileSystem.copyFromLocalFile(src,dst);
}
}
2.5、上传多个文件到HDFS
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 拷贝本地多个文件到HDFS
*/
public class HDFS_copyFromLocalFiles {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.获取本地文件系统
Path localPath = new Path("D:/VuePress/myblog/docs/*");
FileSystem local = FileSystem.getLocal(configuration);
FileStatus[] localStatus = local.globStatus(localPath, new RegexAcceptPathFilter("^.*md$"));
Path[] localPaths = FileUtil.stat2Paths(localStatus);
// 4.HDFS_mkdir API操作
for (Path path : localPaths){
Path dst = new Path("/test/");
fileSystem.copyFromLocalFile(path,dst);
}
}
public static class RegexAcceptPathFilter implements PathFilter{
private final String regex;
public RegexAcceptPathFilter(String regex) {
this.regex = regex;
}
@Override
public boolean accept(Path path) {
boolean flag = path.toString().matches(regex);
return flag;
}
}
}
2.6、查看目标文件夹下的所有内容
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 查看目标文件夹下的所有内容
*/
public class HDFS_find {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
FileStatus[] statuses = fileSystem.listStatus(new Path("/"));
for (FileStatus file: statuses){
// 判断是文件还是文件夹
String fileName = file.isDirectory() ? "文件夹" : "文件";
// 获得权限
String permission = file.getPermission().toString();
short replication = file.getReplication();
// 长度
long length = file.getLen();
// 路径
String path = file.getPath().toString();
System.out.println("类型:" + fileName + "、权限:" + permission + "、replication:" + replication + "、长度:" + length + "、路径:" + path);
}
}
}
2.7、下载HDFS文件到本地
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 拷贝HDFS文件到本地
*/
public class HDFS_copyToLocalFile {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
// 3.HDFS_mkdir API操作
Path src = new Path("/word.txt");
Path dst = new Path("D:/");
fileSystem.copyToLocalFile(false,src,dst,true);
}
}
2.8、删除文件或目录
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 文件删除
*/
public class HDFS_delete {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop");
boolean result = fileSystem.delete(new Path("/zzm/b.txt"), true);
System.out.println(result);
}
}
2.9、查看文件块的信息
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 查看文件块信息
*/
public class HDFS_findBlock {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
FileStatus fileStatus = fileSystem.getFileStatus(new Path("/zzm/word.txt"));
BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
for (BlockLocation block : blocks){
for (String name: block.getNames()){
System.out.println(name + ":" + block.getOffset() + ":" + block.getLength());
}
}
}
}
2.10、创建文件并写入内容
package com.hadoop.hdfs.api;
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;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 创建文件并写入
*/
public class HDFS_createFileAndWirter {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
configuration.set("dfs.replication","1");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
Path path = new Path("/zzm/test.txt");
FSDataOutputStream outputStream = fileSystem.create(path);
outputStream.writeUTF("Hello HDFS!");
outputStream.flush();
outputStream.close();
}
}
2.11、上传大文件到HDFS
package com.hadoop.hdfs.api;
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.Progressable;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 拷贝本地大文件到HDFS
*/
public class HDFS_copyFromLocalBigFile {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("F:/百度云下载/vgg16.npy")));
FSDataOutputStream outputStream = fileSystem.create(new Path("/zzm/vgg16.npy"), new Progressable() {
// 添加进度条
@Override
public void progress() {
System.out.print(".");
}
});
IOUtils.copyBytes(inputStream, outputStream, 4096);
}
}
2.12、查看文件内容
package com.hadoop.hdfs.api;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.net.URI;
/**
* @author zzm
* @time 2019/11/4 11:04
* 使用Java API操作HDFS文件系统
* 查看文件
*/
public class HDFS_open {
public static void main(String[] args) throws Exception{
// 1.创建Configuration
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
// 2.获取FileSystem
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份,说白了就是用户名
*/
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");
Path path = new Path("/zzm/word.txt");
FSDataInputStream inputStream = fileSystem.open(path);
IOUtils.copyBytes(inputStream, System.out, 1024);
}
}