• HDFS API编程


    3.1常用类

           3.1.1Configuration

    Hadoop配置文件的管理类,该类的对象封装了客户端或者服务器的配置(配置集群时,所有的xml文件根节点都是configuration)

    创建一个Configuration对象时,其构造方法会默认加载hadoop中的两个配置文件,分别是hdfs-site.xml以及core-site.xml,这两个文件中会有访问hdfs所需的参数值,主要是fs.default.name,指定了hdfs的地址,有了这个地址客户端就可以通过这个地址访问hdfs了。即可理解为configuration就是hadoop中的配置信息。

     

         3.1.2 FileSystem

    该类的对象是一个文件系统对象,对HDFS中的文件进行的一系列操作,如创建等

     

          3.1.3FileStatus

    获取文件或者文件夹的元信息!比如:文件路径,文件大小,文件所有者,所在的块大小,文件修改时间,备份数量,权限等!

     

           3.1.4FSDataInputStream

    输入流对象! 可以将HDFS中的文件或者文件夹读取到本地!

     

         3.1.5FSDataOutputStream

    输出流对象! 可以将本地的文件或者文件夹上传到HDFS中!

     

         3.1.6构建工程

    指定工程路径

    框架结构

    导入依赖节点

    <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>2.8.0</version>
    </dependency>

    查询文件信息

    // 查询文件信息
        private static void catFile() throws IOException, FileNotFoundException {
            // TODO Auto-generated method stub
            // 指定集群当中主机的IP+端口
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
            for (FileStatus fileStatus : listStatus) {
                /**
                 * 快捷键Syso
                 */
                System.out.print("file文件信息------》" + fileStatus);
            }
    
            /**
             * 获取单个文件
             */
    
            /**
             * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
             * "input/file1.txt")); System.out.println(fileStatus);
             */
        }

    查询文件内容

    public static void getFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            // 获取指定的文件
            FSDataInputStream open = fileSystem.open(new Path(fileName));
            // 将文件的内容装载到BufferedReader对象中去
            BufferedReader reader = new BufferedReader(new InputStreamReader(open));
            String line = "";
            // 循环读取文件内容
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // 关闭资源
            reader.close();
            open.close();
            fileSystem.close();
        }

    创建一个空的文件

    public static void createNewFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            if (fileSystem.exists(new Path(fileName))) {
                System.out.println("文件已经存在");
            } else {
                boolean createNewFile = fileSystem
                        .createNewFile(new Path(fileName));
                if (createNewFile) {
                    System.out.println("成功");
                } else {
                    System.out.println("失败");
                }
            }
            fileSystem.close();
        }

    在新创建的文件夹写入内容

    public static void createFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            if (fileSystem.exists(new Path(fileName))) {
                System.out.println("文件已经存在");
            } else {
                FSDataOutputStream create = fileSystem.create(new Path(fileName));
                String str = "老黑今天又黑了";
                create.write(str.getBytes());
                create.flush();
                create.close();
            }
            fileSystem.close();
        }

     创建文件夹

    public static void mkdirFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
            if (mkdirs) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }

    重名文件的名字

    public static void renameFile(String ordername, String newname)
                throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            boolean rename = fileSystem.rename(new Path(ordername), new Path(
                    newname));
            if (rename) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }

    删除文件夹

    @SuppressWarnings("deprecation")
        public static void deleteFile(String filename) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
    
            boolean delete = fileSystem.delete(new Path(filename));
            if (delete) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }

    上传文件 Windows上传到HDFS上

    public static void fromFile(String localName, String fromName)
                throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
            fileSystem.close();
        }

    从hdfs下载到Windows

        public static void downLoad(String defsFile,String localFile) throws Exception {
            String uri = "hdfs://192.168.77.99:9000";
            // 加载hadoop配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
             fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
            fileSystem.close();
            
        }

    注意:要记得调用方法

    完整的代码结构--各种操作的方法

    package com.hdfs;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    public class HDFS {
    
        public static void main(String[] args) throws Exception {
            // catFile();
    
            // getFile("/input/file1.txt");// 查询单个文件信息
    
            // createNewFile("/input/file3.txt");
            // createFile("/input/file4.txt");
            // mkdirFile("/MKDIRS");//创建文件夹
            // renameFile("/input/file5.txt","/input/file4.txt");//重命名文件的名字
            //deleteFile("/MKDIRS");// 删除文件夹
            //fromFile("C:\Users\70424\Desktop\1.txt","/input");//上传文件Windows到HDFS上
            downLoad("/input/file1.txt","C:\Users\70424\Desktop");//从hdfs下载到Windows
        }
    
        // 查询文件信息
        private static void catFile() throws IOException, FileNotFoundException {
            // TODO Auto-generated method stub
            // 指定集群当中主机的IP+端口
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
            for (FileStatus fileStatus : listStatus) {
                /**
                 * 快捷键Syso
                 */
                System.out.print("file文件信息------》" + fileStatus);
            }
    
            /**
             * 获取单个文件
             */
    
            /**
             * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
             * "input/file1.txt")); System.out.println(fileStatus);
             */
        }
    
        // 查询文件内容
        public static void getFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            // 获取指定的文件
            FSDataInputStream open = fileSystem.open(new Path(fileName));
            // 将文件的内容装载到BufferedReader对象中去
            BufferedReader reader = new BufferedReader(new InputStreamReader(open));
            String line = "";
            // 循环读取文件内容
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // 关闭资源
            reader.close();
            open.close();
            fileSystem.close();
        }
    
        // 创建一个空的文件
        public static void createNewFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            if (fileSystem.exists(new Path(fileName))) {
                System.out.println("文件已经存在");
            } else {
                boolean createNewFile = fileSystem
                        .createNewFile(new Path(fileName));
                if (createNewFile) {
                    System.out.println("成功");
                } else {
                    System.out.println("失败");
                }
            }
            fileSystem.close();
        }
    
        // 在新创建的文件夹写入内容
        public static void createFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            if (fileSystem.exists(new Path(fileName))) {
                System.out.println("文件已经存在");
            } else {
                FSDataOutputStream create = fileSystem.create(new Path(fileName));
                String str = "老黑今天又黑了";
                create.write(str.getBytes());
                create.flush();
                create.close();
            }
            fileSystem.close();
        }
    
        // 创建文件夹
        public static void mkdirFile(String fileName) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
            if (mkdirs) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }
    
        // 重名文件的名字
        public static void renameFile(String ordername, String newname)
                throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            boolean rename = fileSystem.rename(new Path(ordername), new Path(
                    newname));
            if (rename) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }
    
        // 删除文件夹
        @SuppressWarnings("deprecation")
        public static void deleteFile(String filename) throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
    
            boolean delete = fileSystem.delete(new Path(filename));
            if (delete) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
            fileSystem.close();
        }
    
        // 上传文件 Windows上传到HDFS上
        public static void fromFile(String localName, String fromName)
                throws Exception {
            // 指定集群中的主机IP+端口号
            String uri = "hdfs://192.168.77.99:9000";
            // 加载Hadoop的配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作的HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
            fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
            fileSystem.close();
        }
        //从hdfs下载到Windows
        public static void downLoad(String defsFile,String localFile) throws Exception {
            String uri = "hdfs://192.168.77.99:9000";
            // 加载hadoop配置文件
            Configuration con = new Configuration();
            // 创建一个可以操作HDFS对象
            FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
             fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
            fileSystem.close();
            
        }
    
    }
    View Code
  • 相关阅读:
    变量、内存区域、MDK文件(map、htm)
    全双工与半双工的区别
    4G网络 LTE、 FDD 和TD网络格式区别
    国内4G频段划分
    Nordic老版官网介绍(2018-11-30停止更新)
    无线通信模组产业链及竞争格局分析
    LBS 与 GPS 定位之间的区别
    99%的人都理解错了HTTP中GET与POST的区别(转自知乎)
    goto 的用法
    C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
  • 原文地址:https://www.cnblogs.com/3020815dzq/p/10123120.html
Copyright © 2020-2023  润新知