hdfs客户端操作

 hdfs客户端操作也就是在idea等环境也可以使用hdfs的一些命令,挑出一些常见的命令列出来:

文件操作

create 写文件

open 读取文件

delete 删除文件

目录操作

mkdirs 创建目录

delete 删除文件或目录

listStatus 列出目录的内容

getFileStatus 显示文件系统的目录和文件的元数据信息

getFileBlockLocations 显示文件存储位置

 需要导入的依赖如下:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.6</version>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.6</version>
</dependency>
 <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.6</version>
</dependency>    

1.连接客户端

导入的包非常容易出错,除了使用URI外都是hadoop里面的包

我这里的写的是删除根目录文件下的output文件夹,后面跟上的true表示迭代删除

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.net.URI;

public class hadoopAPI {
    public static void main(String[] args) throws Exception{
        //使用9000端口号,50070是客户端的端口号
        URI uri = new URI("hdfs://master:9000");
        //获取hadoop的hdfs配置文件,只要new出来就算获取成功,利用conf对象就可以修改配置
        Configuration conf = new Configuration();
        //举个例子,使用conf对象设置副本数量为1
        conf.set("dfs.replication","1");
        //获取文件系统对象fs,利用fs来对hdfs中的文件进行操作
        FileSystem fs = FileSystem.get(uri,conf);
        fs.delete(new Path("/output"),true);
    }

浏览器输入master:50070 进入文件系统,发现output文件确实被删除了

 

//根目录下创建一个test文件夹
fs.mkdirs(new Path("/test"));
//返回根目录的内容
FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
for (FileStatus fileStatus : fileStatuses) {
    System.out.println(fileStatus);
}

 返回了很多文件的相关属性,所以我们还可以通过上面的遍历获得一些属性,给出2个例子

//迭代获取文件大小
 for (FileStatus fileStatus : fileStatuses) {
        System.out.println(fileStatus.getlength());
  }
//获取文件分区大小
 for (FileStatus fileStatus : fileStatuses) {
        System.out.println(fileStatus.getBlockSize());
 }

 获取单个文件的属性,这里演示给就给3个了,还有其他的可以自己试试

FileStatus fileStatus = fs.getFileStatus(new Path("/student.txt"));
fileStatus.getLen();//获取文件大小
fileStatus.getBlockSize();//获取分区大小
fileStatus.getGroup();//获取分组信息

读取hdfs文件的内容 

FSDataInputStream open = fs.open(new Path("/student.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(open));
String line=null;
while((line=br.readLine())!=null){
    System.out.println(line);
}
br.close();
open.close();

 截取部分结果:

 

创建文件并传入内容,这里给的一定要是文件路径,

FSDataOutputStream fsDataOutputStream = fs.create(new Path("/test/a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fsDataOutputStream));
bw.write("hello");
bw.write("\t");
bw.write("world");
bw.close();
fsDataOutputStream.close();

下载查看hdfs中的内容 

 上传文件,没有什么好说的注意路径不要给反掉了

Path hdfs = new Path("/");//hdfs的路径
Path local = new Path("E:\\ideaFile\\code\\a.txt");//本地文件的路径
fs.copyFromLocalFile(local,hdfs);

下载文件

这里方法最后加上的true和false是权限验证

Path path = new Path("/studnet.txt");
Path local = new Path("E:\\ideaFile\\code\\test");
fs.copyToLocalFile(false,path,local,true);

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值