Hadoop对文件的基本操作方式(shell命令、JAVA API)

Hadoop对文件的基本操作方式:shell命令、JAVA API
 
一、Shell中操作HDFS时常用命令
 
  1. 创建目录命令
   hdfs dfs -mkdir /user        在根目录下创建user目录
        
        2. 上传文件到HDFS
        hdfs dfs -put hadoop-native-64-2.5.0.tar /user/hadoop-native-64-2.5.0.tar
        
        3.  查看HDFS下某个文件的内容
        hdfs dfs -cat install.log
        4.  把HDFS文件系统中的某个文件复制到本地系统中
        hdfs dfs -get 文件名 新文件名
        注意:-get命令和-put命令既可以操作目录,也可以操件文件
        5. 删除文件
        hdfs dfs -rm -r /user/install.log
        
        6. 格式化HDFS
        hdfs namenode -format
        7. 启动HDFS
        start-dfs.sh
        8. 退出HDFS
        stop-dfs.sh
 
 
二、基于Java API操作
 
    HDFS中对于文件操作主要涉及的几个类
    Configuration类:
    这个类主要封装了客户端或者服务器的配置
    FileSystem类:
    这个类的对象是一个文件系统对象,可以使用这个对象的方法对文件进行一些操作
FileSystem fs = FileSystem.get(conf);    //通过FileSystem的静态方法get来获得对象
    FSDataInputStream/FSDataOutputStream类:
    这两个类是HDFS中的输入/输出流,分别是通过FileSystem对象的open方法和create方法获得
 
    使用java程序来进行文件的创建:
    准备工作:
        JAVA需要的jar包
            在hadoop压缩包中进行解压
  1. 必要的jar包
         \share\hadoop\hdfs 下的jar
         \share\hadoop\hdfs\lib 下的jar
     2. 通用jar包
          \share\hadoop\common下的jar
          \share\hadoop\common\lib下的jar
     NameNode需要退出安全模式:
           hdfs dfsadmin -safemode leave
    对于hadoop中的core-site.xml进行配置
        
    对HDFS有写入的权限
        hadoop fs -chmod 777 /
 
JAVA测试代码:
 
        
创建文件:
public class HdfsTest {
    //定义一个配置文件
    public static Configuration conf = new Configuration();
    public static void main(String[] args) {
        createFolder();
    }


    /**
     * 创建一个文件
     */
    public static void createFolder(){
        conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
        try {
            //通过配置信息得到文件系统的对象
            FileSystem fs = FileSystem.get(conf);
            //在指定的路径下创建文件夹
            Path path = new Path("/test01");
            fs.mkdirs(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

     

递归显示文件
 
public static void listFile(Path path){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try {
        FileSystem fs = FileSystem.get(conf);
        //把文件元数据封装到fileStatuses数组当中
        FileStatus[] fileStatuses = fs.listStatus(path);
        //遍历这个数组
        for (FileStatus fstatus:fileStatuses) {
            //如果当前文件是一个文件夹则进行递归
            if(fstatus.isDirectory()){
                System.out.println("当前路径是:" + fstatus.getPath());
                listFile(fstatus.getPath());
            } else {
                System.out.println("当前路径是:" + fstatus.getPath());
            }
        }
    }catch (IOException e){
        e.printStackTrace();
    }
}

         

上传文件:
public static void uploadFile(){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try {
        FileSystem fs = FileSystem.get(conf);
        //定义待上传本地文件及服务器的路径
        Path src = new Path(new File("xiesheng.txt").getAbsolutePath());
        Path dest = new Path("/test01/hello.txt");
        //从本地上传文件
        fs.copyFromLocalFile(src,dest);
    } catch (IOException e){
        e.printStackTrace();
    }
}

 

下载文件:
public static void downloadFile(){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try{
        FileSystem fs = FileSystem.get(conf);
        //定义服务器要下载文件的路径和本地存储路径
        Path src = new Path("/test01/hello.txt");
        Path dst = new Path("D://download//hello.txt");
        //从服务器下载文件到本地
        //fs.copyToLocalFile(src,dest); 使用这个会报一个空指针,需要使用下面这个方法
        fs.copyToLocalFile(false,src,dst,true);
    } catch (IOException e){
        e.printStackTrace();
    }
}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章