【实验作业1】自己动手实现HDFS Shell
基于已经学习到的Hadoop API编程知识,自己动手实现一个简单的HDFS Shell程序,程序名称为HShell,要求能够支持以下功能:
1.使用HShell -cp 本地路径 HDFS路径,将文件从Linux本地文件系统拷贝到HDFS指定路径上。

2.使用HShell -rm 路径删除文件

3.使用HShell -rm -r 路径删除目录

4.使用HShell -cp -r 本地目录路径 HDFS路径,将目录从Linux本地拷贝到HDFS指定路径上。

5.使用HShell -list 路径显示某个文件的信息或者某个目录的信息

6.使用HShell -mv 路径 路径移动文件或者重命名文件

7.使用HShell -find 文件名 目录实现在目录下递归查找某个文件名的文件。

实验结果:
1.HShell -cp 功能的测试结果。在终端中查看后显示拷贝成功。
在这里插入图片描述
在这里插入图片描述

实验代码:

import com.sun.javaws.IconUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.net.URI;
import java.util.Scanner;

public class HShell {
    public static void main(String[] args) {
        try {
            FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
            Scanner sc = new Scanner(System.in);
            while(true)
            {
                String cmd1=sc.next();
                String cmd2,cmd3,cmd4,cmd5;
                if(cmd1.equals("HShell")){
                    cmd2=sc.next();
                    if(cmd2.equals("-cp")){
                        cmd3=sc.next();
                        cmd4=sc.next();
                        if(cmd3.equals("-r")){
                            cmd5=sc.next();
                            fs.copyFromLocalFile(false,true,new Path(cmd4),new Path(cmd5));
                            System.out.println("copy directory from "+cmd4+"to "+cmd5);
                        }
                        else
                        {
                            fs.copyFromLocalFile(new Path(cmd3),new Path(cmd4));
                            System.out.println("copy file from "+cmd3+"to "+cmd4);
                        }

                    }
                    else if(cmd2.equals("-rm")){
                        cmd3=sc.next();
                        if(cmd3.equals("-r")){
                            cmd4=sc.next();
                            if(fs.delete(new Path(cmd4),true)){
                                System.out.println("Directory "+ cmd4 +" has been deleted successfully!");
                            }
                        }
                        else
                        if(fs.delete(new Path(cmd3),false)){
                            System.out.println("File "+ cmd3 +" has been deleted successfully!");
                        }

                    }
                    else if(cmd2.equals("-list")){
                        cmd3=sc.next();
                        //FileStatus [] fileStatus=fs.listStatus(new Path(cmd3));
                        FileStatus filestatus =fs.getFileStatus(new Path(cmd3));
                        System.out.println(filestatus.toString());
                    }
                    else if(cmd2.equals("-mv")){
                        cmd3=sc.next();
                        cmd4=sc.next();
                        fs.moveFromLocalFile(new Path(cmd3),new Path(cmd4));
                        System.out.println("move file from "+cmd3+"to "+cmd4);
                    }
                    else if(cmd2.equals("-mv")){
                        cmd3=sc.next();
                        cmd4=sc.next();
                        fs.moveFromLocalFile(new Path(cmd3),new Path(cmd4));
                        System.out.println("move file from "+cmd3+"to "+cmd4);
                    }
                    else if(cmd2.equals("-find")){
                        cmd3=sc.next();
                        cmd4=sc.next();
                        fs.setWorkingDirectory(new Path(cmd4));
                        if(!fs.exists(new Path(cmd3)))
                        {
                            System.out.println(cmd3+" is not found");
                        }
                        else {
                            System.out.println(fs.getFileStatus(new Path(cmd3)).getPath());
                        }
                    }
                }


            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

完结撒花

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐