课堂测试——hdfs文件操作

课堂测试,主要进行hadoop的hdfs操作,只需要完成文件操作

题目要求:

测试一:

编程实现一个简单的文本编辑器,主要包括以下功能:

1、创建一个自己姓名首字母的文件夹;

2、在该文件夹下创建一个hdfstest1.txt文件,向文件内输入“班级学号姓名HDFS课堂测试”的文字内容;

3、在文件加下再创建一个hdfstest2.txt文件,并将hdfstest1文件的内容写到该文件中,并将hdfstest2的内容输出。

测试二:

编程实现一个简单的文本编辑器,主要包括以下功能:

(1) 新建:新建文本文件;

(2) 打开:打开指定目录下的文本文件,并将文本内容显示在编辑区;

(3) 编辑:向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;

(4) 保存:可以将编辑后的文件保存到指定的目录中。

为了省事,我直接在test中进行测试类运行,这个控制台只能readonly

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.util.Arrays;
import java.util.Scanner;

public class HdfsTest {
    private FileSystem fs;

    @Before
    public void init(){
        //           连接集群namenode地址
        URI uri = null;
        try {
            uri = new URI("hdfs://hadoop102:8020");
            //            创建配置文件
            Configuration configuration = new Configuration();
            configuration.set("dfs.replication","2");
//            获取到客户端对象
            fs = FileSystem.get(uri, configuration,"jzz");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @After
    public void destory(){
        try {
            fs.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //创建目录
    @Test
    public void testmkdir(){
        try {
//            创建文件夹
            fs.mkdirs(new Path("/Jzz"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //写入文件
    @Test
    public void testWrite(){
        try{
            Path file1 = new Path("/Jzz/hdfstest5.txt");
            FSDataOutputStream fsDataOutputStream = fs.create(file1);
            fsDataOutputStream.writeUTF("信2005-3 20204177 贾梓钊HDFS课堂测试");
            fsDataOutputStream.flush();
            fsDataOutputStream.close();

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

    @Test
    public void testWrite2(){
        try{
            Path inFile = new Path("/Jzz/hdfstest1.txt");
            Path newFile = new Path("/Jzz/hdfstest3.txt");

            FSDataOutputStream outputStream = fs.create(newFile);
            FSDataInputStream inputStream = fs.open(inFile);
            String str = inputStream.readUTF();
            inputStream.close();
            outputStream.writeUTF(str);
            outputStream.flush();
            outputStream.close();

            inputStream = fs.open(newFile);
            System.out.println(inputStream.readUTF());


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

以后就是测试1的代码

下面是测试二的文本编辑器

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

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

public class HdfsTest {
    private static FileSystem fs;

    public static void main(String[] args) {
        init();
        //
        testRm();

    }public static void init(){
        //           连接集群namenode地址
        URI uri = null;
        try {
            uri = new URI("hdfs://hadoop102:8020");
            //            创建配置文件
            Configuration configuration = new Configuration();
            configuration.set("dfs.replication","2");
//            获取到客户端对象
            fs = FileSystem.get(uri, configuration,"jzz");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void testWrite2(){
        try{
            Path inFile = new Path("/Jzz/hdfstest1.txt");
            Path newFile = new Path("/Jzz/hdfstest6.txt");

            FSDataOutputStream outputStream = fs.create(newFile);
            FSDataInputStream inputStream = fs.open(inFile);
            String str = inputStream.readUTF();
            inputStream.close();
            outputStream.writeUTF(str);
            outputStream.flush();
            outputStream.close();

            inputStream = fs.open(newFile);
            System.out.println(inputStream.readUTF());


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

    public static void testWrite(){
        try{
            Path file1 = new Path("/Jzz/hdfstest5.txt");
            FSDataOutputStream fsDataOutputStream = fs.create(file1);
            fsDataOutputStream.writeUTF("信2005-3 20204177 贾梓钊HDFS课堂测试");
            fsDataOutputStream.flush();
            fsDataOutputStream.close();

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

    public static void testEditor() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请选择你需要的功能:1、新建文本文件;2、查看文件信息;3、追加文件信息;");
        int num = scanner.nextInt();
        try {
            switch (num) {
                case 1:
                    System.out.print("请输入文件路径:");
                    String path = scanner.next();
                    System.out.print("请输入文件信息:");
                    String edit = scanner.next();
                    Path path1 = new Path(path);
                    FSDataOutputStream fsDataOutputStream = fs.create(path1);
                    fsDataOutputStream.writeUTF(edit);
                    fsDataOutputStream.flush();
                    fsDataOutputStream.close();
                    break;
                case 2:
                    System.out.print("请输入文件路径:");
                    String readpath = scanner.next();
                    Path path2 = new Path(readpath);
                    FSDataInputStream fsDataInputStream = fs.open(path2);
                    System.out.println(fsDataInputStream.readUTF());
                    break;
                case 3:
                    System.out.print("请输入文件路径:");
                    String appPath = scanner.next();
                    System.out.print("输入追加信息:");
                    String appendText = scanner.next();
                    FSDataOutputStream append = fs.append(new Path(appPath));
                    append.writeUTF(appendText);
                    System.out.println("追加成功");

                    break;
                default:
                    break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

posted on 2022-09-23 22:53  跨越&尘世  阅读(129)  评论(0编辑  收藏  举报