大数据技术原理与应用 - 实验二 熟悉常用的 HDFS 操作

一、实验目的(1)理解HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的Shell命令。(3)熟悉HDFS操作常用的Java API。二、实验平台操作系统:Linux。Hadoop 版本:2.7.3 或以上版本。JDK 版本:1.7 或以上版本。Java IDE:IDEA三、实验内容和要求(1)编程实现以下指定功能,并利用 Hadopp 提供的 Shel...
摘要由CSDN通过智能技术生成

一、实验目的

(1)理解HDFS在Hadoop体系结构中的角色。 (2)熟练使用HDFS操作常用的Shell命令。 (3)熟悉HDFS操作常用的Java API。

二、实验平台

操作系统:Linux。 Hadoop 版本:2.7.3 或以上版本。 JDK 版本:1.7 或以上版本。 Java IDE:IDEA

三、实验内容和要求

(1)编程实现以下指定功能,并利用 Hadopp 提供的 Shell 命令完成相同的任务。

1. 向HDFS中上传任意文本文件,如果指定的文件在 HDFS 中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。

shell:

hadoop fs -put /User/Binguner/Desktop/test.txt /test
hadoop fs -appendToFile /User/Binguner/Desktop/test.txt /test/test.txt
hadoop fs -copyFromLocal -f /User/Binguner/Desktop/test.txt / input/test.txt
复制代码
    /**
     * @param fileSystem 
     * @param srcPath 本地文件地址
     * @param desPath 目标文件地址
     */
    private static void test1(FileSystem fileSystem,Path srcPath, Path desPath){
        try {
            if (fileSystem.exists(new Path("/test/test.txt"))){
                System.out.println("Do you want to overwrite the existed file? ( y / n )");
                if (new Scanner(System.in).next().equals("y")){
                    fileSystem.copyFromLocalFile(false,true,srcPath,desPath);
                }else {
                    FileInputStream inputStream = new FileInputStream(srcPath.toString());
                    FSDataOutputStream outputStream  = fileSystem.append(new Path("/test/test.txt"));
                    byte[] bytes = new byte[1024];
                    int read = -1;
                    while ((read = inputStream.read(bytes)) > 0){
                        outputStream.write(bytes,0,read);
                    }
                    inputStream.close();
                    outputStream.close();
                }
            }else {
                fileSystem.copyFromLocalFile(srcPath,desPath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
复制代码

运行结果:

HDFS 中原来到文件列表:

第一次运行:

HDFS 中文件列表:

第二次运行:

此时 HDFS 中的目录:

2. 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。

shell:

hadoop fs -copyToLocal /input/test.txt /User/binguner/Desktop/test.txt
复制代码
    /**
     * @param fileSystem
     * @param remotePath HDFS 中文件的地址
     * @param localPath 本地要保存的文件的地址
     */
    private static void test2(FileSystem fileSystem,Path remotePath, Path localPath){
        try {
            if (fileSystem.exists(remotePath)){
                fileSystem.copyToLocalFile(remotePath,localPath);
            }else {
                System.out.println("Can't find this file in HDFS!");
            }
        } catch (FileAlreadyExistsException e){
            try {
                System.out.println(localPath.toString());
                fileSystem.copyToLocalFile(remotePath,new Path("src/test"+ new Random().nextInt()+".txt"));
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
复制代码

执行前本地目录:

第一次执行:

第二次执行:

3. 将HDFS中指定文件的内容输出到终端中。
  • 20
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值