zoukankan      html  css  js  c++  java
  • HDFS学习总结之API交互

    第一种、shell交互

           官方文档:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0/hadoop-project-dist/hadoop-common/FileSystemShell.html

    例子:

        1、 hdfs dfs -ls [-R] <args> 

               -R:递归列出目录所有内容

               hdfs dfs -ls  /     :列出根目录的内容

        2、hdfs dfs -put <localsrc> ... <dst>  上传文件

        3、hdfs dfs -text <src> 或者  hdfs dfs -cat URI [URI ...]  查看文件内容

        4、hdfs dfs -mkdir [-p] <paths>  创建文件夹

                                   -p:自动创建父目录

        5、hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI ...] 删除文件

    第二种、Java交互

    package rdb.com.hadoop01;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    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;
    import org.apache.hadoop.io.IOUtils;
    import org.apache.hadoop.util.Progressable;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;


    /*
     * Hadoop HDFS Java API 操作
     */
    public class HDFSAPP {
        
        public static final String HDFS_PATH="hdfs://192.168.44.183:8020";
        
        FileSystem fileSystem = null;
        Configuration configuration = null;
        
        @Before
        public void setUp()throws Exception{
            configuration = new Configuration();
            fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration,"hadoop");
            
        }
        
        /**
         * 创建文件夹
         * @throws IOException 
         * @throws IllegalArgumentException 
         */
        @Test
        public void mkdir() throws Exception{
            //创建文件夹
            fileSystem.mkdirs(new Path("/javaApi/test01"));
        }
        
        /**
         * 创建文件
         *@throws Exception
         */
        @Test
        public void create()throws Exception{
            FSDataOutputStream outPut = fileSystem.create(new Path("/javaApi/test01/a.txt"));
            outPut.write("hadoop 分布式文件系统:HDFS".getBytes());
            outPut.flush();
            outPut.close();
        }
        
        /**
         * 查看文件内容
         *@throws Exception
         */
        @Test
        public void cat()throws Exception{
            FSDataInputStream input = fileSystem.open(new Path("/javaApi/test01/a.txt"));
            IOUtils.copyBytes(input, System.out, 1024);
            input.close();
        }
        
        /**
         * 重命名
         *@throws Exception
         */
        @Test
        public void rename() throws Exception{
            fileSystem.rename(new Path("/javaApi/test01/a.txt"), new Path("/javaApi/test01/b.txt"));
        }
        
        /**
         * 从本地拷贝文件到hdfs
         */
        @Test
        public void copyFromLocalFile()throws Exception{
            fileSystem.copyFromLocalFile(new Path("D://PS//logo.png"), new Path("/javaApi/test01"));
        }
        
        /**
         * 从本地拷贝大文件,带进度条上传
         *@throws Exception
         */
        @Test
        public void copyFromLocalFileWithProgress()throws Exception{
            InputStream in = new BufferedInputStream(new FileInputStream(new File("D://PS//001.rar")));
            FSDataOutputStream out = fileSystem.create(new Path("/javaApi/test01/001.rar"), new Progressable() {    
                public void progress() {
                    //以*表示上传进度
                    System.out.print("*");
                }
            });
            IOUtils.copyBytes(in, out, 1024);
        }
        
        /**
         * 下载文件
         *@throws Exception
         */
        @Test
        public void copyToLocal()throws Exception{
            fileSystem.copyToLocalFile(false,new Path("/javaApi/test01/b.txt"), new Path("D://PS//tmp//"),true);
        }
        
        @Test
        public void listPath()throws Exception{
            FileStatus[] fileStatus = fileSystem.listStatus(new Path("/javaApi/test01"));
            for(FileStatus f:fileStatus){
                String isDir = f.isDirectory()? "文件夹" : "文件";
                String path = f.getPath().toString();
                System.out.println(isDir+":"+path);
            }
        }
        
        /**
         * 删除
         *@throws Exception
         */
        @Test
        public void delete()throws Exception{
            fileSystem.delete(new Path("/javaApi/test01"),true);
        }
        
        @After
        public void tearDown() throws Exception{
            fileSystem.close();
        }

    }

  • 相关阅读:
    设计模式(五)——单例模式
    设计模式(四)——工厂模式
    设计模式(三)—— 装饰者模式
    设计模式(二)—— 观察者模式
    JAVA环境配置
    在线求中位数
    不能对自己期望太大,但总是要拼一拼
    Leetcode | String to Integer (atoi)
    Leetcode | Simplify Path
    Leetcode | Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/jnba/p/10550382.html
Copyright © 2011-2022 走看看