通过API操作HDFS
一、HDFS获取文件系统
详细代码:
@Test
public void intiHDFS() throws IOException {
//1.创建配信信息对象
Configuration conf = new Configuration();
//2.获取文件系统
FileSystem fs = FileSystem.get(conf);
//3.打印文件系统
System.out.println(fs.toString());
}
二、HDFS文件上传
@Test
public void putFileToHDFS() throws Exception {
//注:import org.apache.hadoop.conf.Configuration;
//1.创建配置信息对象
Configuration conf = new Configuration();
//2.设置部分参数
conf.set("dfs.replication","2");
//3.找到HDFS的地址
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"), conf, "root");
//4.上传本地Windows文件的路径
Path src = new Path("D:\\hadoop-2.7.2.rar");
//5.要上传到HDFS的路径
Path dst = new Path("hdfs://bigdata111:9000/");
//6.以拷贝的方式上传,从src-> dst
fs.copyFromLocalFile(src,dst);
//7.关闭
fs.close();
stem.out.println("上传成功");
}
三、HDFS文件下载
@Test
public void getFileFromHDFS() throws Exception {
//1.创建配置信息对象
Configuration:配置
Configuration conf = new Configuration();
//2.找到文件系统
//final URI uri :HDFS地址
//final Configuration conf:配置信息
// String user :Linux用户名
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"), conf, "root");
//3.下载文件
//boolean delSrc:是否将原文件删除
//Path src :要下载的路径
//Path dst :要下载到哪
//boolean useRawLocalFileSystem :是否校验文件
fs.copyToLocalFile(false,new Path("hdfs://bigdata111:9000/README.txt"),new Path("F:\\date\\README.txt"),true);
//4.关闭fs
//alt + enter 找错误
//ctrl + alt + o 可以快速的去除没有用的导包
fs.close();
System.out.println("下载成功");
}
四、HDFS目录创建
@Test
public void mkmdirHDFS() throws Exception {
//1.创新配置信息对象
Configuration configuration = new Configuration();
//2.链接文件系统
//final URI uri 地址
//final Configuration conf 配置
//String user Linux用户
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"), configuration, "root");
//3.创建目录
fs.mkdirs(new Path("hdfs://bigdata111:9000/Good/Goog/Study"));
//4.关闭
fs.close();
System.out.println("创建文件夹成功");
}
五、HDFS文件夹删除
@Test
public void deleteHDFS() throws Exception {
//1.创建配置对象
Configuration conf = new Configuration();
//2.链接文件系统
//final URI uri, final Configuration conf, String user
//final URI uri 地址
//final Configuration conf 配置
//String user Linux用户
FileSystem fs = FileSystem.get(new
URI("hdfs://bigdata111:9000"), conf, "root");
/3.删除文件
//Path var1 : HDFS地址
//boolean var2 : 是否递归删除
fs.delete(new Path("hdfs://bigdata111:9000/a"),false);
//4.关闭
fs.close();
System.out.println("删除成功啦");
}
六、HDFS文件名更改
@Test
public void renameAtHDFS() throws Exception{
//1.创建配置信息对象
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"),configuration, "itstar");
//2重命名文件或文件夹
fs.rename(new
Path("hdfs://bigdata111:9000/user/itstar/hello.txt"), new
Path("hdfs://bigdata111:9000/user/itstar/hellonihao.txt"));
fs.close();
}
七、HDFS文件详情查看
查看文件名称、权限、长度、块信息:
@Test
public void readListFiles() throws Exception {
//1.创建配置对象
Configuration conf = new Configuration();
//2.链接文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"), conf, "root");
//3.迭代器
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
//4.遍历迭代器
while (listFiles.hasNext()){
//一个一个出
LocatedFileStatus fileStatus = listFiles.next();
//名字
System.out.println("文件名:" + fileStatus.getPath().getName());
//块大小
System.out.println("大小:" + fileStatus.getBlockSize());
//权限
System.out.println("权限:" + fileStatus.getPermission());
System.out.println(fileStatus.getLen());
lockLocation[] locations = fileStatus.getBlockLocations();
for (BlockLocation bl:locations){
System.out.println("block-offset:" + bl.getOffset());
String[] hosts = bl.getHosts();
for (String host:hosts){
System.out.println(host);
}
}
System.out.println("------------------华丽的分割线----------------");
}
}
八、HDFS文件和文件夹判断
@Test
public void judge() throws Exception {
//1.创建配置文件信息
Configuration conf = new Configuration();
//2.获取文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://bigdata111:9000"), conf, "root");
//3.遍历所有的文件
FileStatus[] liststatus = fs.listStatus(new Path("/"));
for(FileStatus status :liststatus){
//4.判断是否是文件
if (status.isFile()){
//ctrl + d:复制一行
//ctrl + x 是剪切一行,可以用来当作是删除一行
System.out.println("文件:" + status.getPath().getName());
} else {
System.out.println("目录:" + status.getPath().getName());
}
}
}