zoukankan      html  css  js  c++  java
  • 基于JavaAPI对远程hdfs的操作

    基于JavaAPI对hdfs的操作

    通过Java API来访问HDFS,首先介绍HDFS中的文件操作主要涉及的几个类。

    ·Configuration类:该类的对象封装了客户端或者服务器的配置。

    ·FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法对文件进行操作。FileSystem fs=FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。

    ·FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入/输出流,分别通过FileSystem的open方法和create方法获得。

    接下来通过实例介绍如何利用Java API进行文件夹的创建、文件列表显示、文件上传和文件下载操作,为了使读者对实例具有完整性的理解,我们把主函数也列了出来。实例代码如下:

    //需要的包
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    public class HdfsDemo1 {
        public static void main(String[] args) {
            createFolder();//文件的创建
            uploadFile();//文件上传
            downloadFile();//文件下载
            listFile(new Path("/");//递归显示文件夹
        }
    }

    1.创建文件夹

    如果想要将文件放入不同的文件夹中,则可以有针对性地动态创建文件夹。关于文件夹的创建比较简单。代码如下:

    //1.创建文件夹
        public static void createFolder()  {
            //定义一个配置对象
            Configuration conf = new Configuration();
            try {
                //通过配置信息得到文件系统的对象
                FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"),conf,"root");
                //在指定的路径下创建文件夹
    
                Path path = new Path("/javaAddFolder1");
                System.out.println(fs.mkdirs(path));
                fs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    2.递归显示文件

        //2.递归显示文件
        public static void listFile(Path path){
            //定义个配置对象
            Configuration conf = new Configuration();
    
            try {
                //通过配置信息得到文件系统的对象
                FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
                //传入路径,表示显示某个路径下的文件夹列表
                //将给定路径下所有的文件元数据放到一个FileStatus的数组
                //FileStatus对象封装了文件和目录的元数据,包括文件长度、块大小、权限等
                FileStatus[] fileStatuses = fs.listStatus(path);
    
                for (int i= 0 ; i<fileStatuses.length;i++){
                    FileStatus fileStatus = fileStatuses[i];
                    //首先检测当前是否是文件夹,如果是则进行递归
                    if(fileStatus.isDirectory()){
                        System.out.println("当前路径是: "+fileStatus.getPath());
                        listFile(fileStatus.getPath());
                    } else {
                        System.out.println("当前路径是:"+fileStatus.getPath());
                    }
    
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }
        }

    3.文件上传

     //3.文件上传
        public static void uploadFile(){
            //定义个配置对象
            Configuration conf = new Configuration();
    
            try {
                //通过配置信息得到文件系统的对象
                FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
    
                //定义文件的路径和上传的路径
                Path src = new Path("D://kmeans_data.txt");
                Path dest = new Path("/");
    
                //从本地上传到文件服务器上
                fs.copyFromLocalFile(src,dest);
                fs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    4.文件下载

     //4.文件下载
        public static void downloadFile(){
            //定义配置对象
            Configuration conf = new Configuration();
    
            try {
                //通过配置文件加载文件系统对象
                FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root");
    
                //定义下文文件的路径和本地下载路径
                Path src = new Path("/kmeans_data.txt");
                Path dest = new Path("F://");
    
                //下载文件到本地
                fs.copyToLocalFile(src,dest);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    author@nohert
  • 相关阅读:
    WPF 重新启动该程序
    Winform水印
    PS 切HTML (ps+div+css)
    VS服务器运行有问题 怎么办?
    ISDeleted 软删除!!
    项目初始框架
    MD5加密
    !!LoginWindow.cs
    !!!精简版三层架构
    !!C#交互操作SqlServer数据库 基本的增删改查
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13715348.html
Copyright © 2011-2022 走看看