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();
    }

}

posted @ 2019-03-18 09:38  技术小白丁  阅读(373)  评论(0编辑  收藏  举报