课堂测试——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(); } } }