【Hadoop】HDFS编程

news/2024/5/20 3:09:16 标签: hadoop, hdfs

1、初始化配置信息:

@Test
    public void init() throws IOException, URISyntaxException, InterruptedException {
        Configuration configuration =new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        configuration.set("fs.defaultFS","uri");
        fileSystem=FileSystem.get(new URI("uri"),configuration,"hadoop");//以Hadoop身份
    }

2、创建目录上传下载文件及删除文件:

HDFS读数据

与namenode通信查找元数据,文件的数据块在哪台datanode上

选取最近一台datanode服务器建立socket流

Datanode发送数据(从磁盘读取数据流放入数据包发送出去)

客户端接收数据包 先缓存在磁盘 然后写入文件

 

Hdfa写数据

客户端向namenode发送请求 检查目标文件是否存在,检查目标父目录是否存在。

那么返回是否可以上传数据

客户端对文件进行分块,请求namenode该向那台datanode上传数据

Namenode返回哪台datanode

客户端向datanode请求发送数据,几台datanode建立pipeline

客户端读数据以packet为单位发送数据到第一台datanode,第一台收到packet后向第二台发送,第二台向第三台传,第一台每传入一个packet会放入一个应答队列。

第一个块传完后,重复步骤传第二个块。

@Test
    public void upload() throws IOException, URISyntaxException, InterruptedException {
        init();
        fileSystem.delete(new Path("/input/a.txt"),true);//全部删除目录下文件
        fileSystem.mkdirs(new Path("/input/a.txt"));//创建目录
        fileSystem.copyFromLocalFile(new Path("files/a.txt"),new Path("hdfs://39.105.116.243:9000/input/"));//上传文件

        Path path=new Path("hdfs://39.105.116.243:9000/input/x");//下载文件
        FSDataInputStream dis=fileSystem.open(path);//下载文件
        FileOutputStream fileOutputStream=new FileOutputStream("files/a.txt");
        IOUtils.copy(dis,fileOutputStream);
        fileSystem.copyToLocalFile(path,new Path("files/b.txt"));
    }

3、查看文件目录:

 /*
    * 显示文件*/
    @Test
    public void show() throws InterruptedException, IOException, URISyntaxException {
        init();
        RemoteIterator<LocatedFileStatus> iterator= fileSystem.listFiles(new Path("/"),true);//递归显示文件
        while (iterator.hasNext()){
            LocatedFileStatus fileStatus=iterator.next();
            String string=fileStatus.getPath().getName();
            System.out.println(string);
        }
    }

    /*
    * 显示文件及文件夹*/
    @Test
    public void show1() throws InterruptedException, IOException, URISyntaxException {
        init();
        FileStatus[] fileStatuses=fileSystem.listStatus(new Path("/"));//显示文件夹
        for (FileStatus status:fileStatuses){
            String string=status.getPath().getName();
            System.out.println(string);
        }
    }

 


http://www.niftyadmin.cn/n/752645.html

相关文章

Mina实战一:建立Server和Client。有Client加入,Server广播给所有Client

Mina框架介绍&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89102597 Mina实战一&#xff1a;建立Server和Client。有Client加入&#xff0c;Server广播给所有Client&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89103348 Mina实战二&a…

Mina实战二:在控制台中Client可以给Sever和其他Client发送数据

Mina框架介绍&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89102597 Mina实战一&#xff1a;建立Server和Client。有Client加入&#xff0c;Server广播给所有Client&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89103348 Mina实战二&a…

【机器学习】Mahout 基于用户的协同过滤推荐

J2EE实现: maven SpringMVC项目可部署到服务器&#xff0c;由于比较复杂就不再这里写了感兴趣的可访问 https://github.com/XVIIB/UCF-XVII JavaSE实现 1&#xff1a;输入数据&#xff08;26M大小的csv文件&#xff0c;包含1000000条淘宝用户浏览购买信息&#xff09;&…

Mina实战三:特定角色的Client处理消息

Mina框架介绍&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89102597 Mina实战一&#xff1a;建立Server和Client。有Client加入&#xff0c;Server广播给所有Client&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89103348 Mina实战二&a…

微软在GitHub上发布了开源量子教学项目Katas

量子计算是未来&#xff0c;它有潜力改变一切。这些新机器将比现今可用的任何“经典”计算机强大得多。量子计算机将能够做我们今天只能梦想的计算&#xff0c;潜在地解决以前从未解决过的问题。这些强大的计算机甚至可以使现有的加密方法过时。 当然&#xff0c;硬件只是等式…

Mina实战四:特定角色收到消息

Mina框架介绍&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89102597 Mina实战一&#xff1a;建立Server和Client。有Client加入&#xff0c;Server广播给所有Client&#xff1a;https://blog.csdn.net/haoranhaoshi/article/details/89103348 Mina实战二&a…

Hive 使用总结HiveQL

一、基本操作 hive #进入使用HiveQL操作 show databases&#xff1b; #展示所有数据库 show databases like *x*&#xff1b; #展示包含x字段的数据库&#xff0c;不同于sql模糊查询 % _ 不适用 create database dbname; #创…

PyQt5编程学习之控件基类QObject深入

一、QObject描述&#xff1a; PyQt几乎所有的类都是从QObject直接或间接继承的,QObject是所有PyQt类的基类&#xff0c;是PyQt对象模型的核心。 二、基类QObject的功能&#xff1a; &#xff08;一&#xff09;操作对象名称、属性&#xff1a; 1、API介绍&#xff1a; &#xf…