通过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());
 }
  	}
}
发布了50 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/105430039