6.2 Java API 操作 HDFS 文件(一)

任务目的

  • 了解 junit 的作用和常用注解
  • 掌握使用 Java API 在 HDFS 上创建目录的方法
  • 学会使用 Java API 将本地文件上传到 HDFS 指定位置

任务清单

  • 任务1:创建目录
  • 任务2:上传文件

详细任务步骤

  junit 是什么?
  junit 是一个 Java 语言的单元测试框架,用于编写和运行可重复的测试。

  junit 能做什么?
  能让我们快速完成单元测试。简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

  使用 junit 不需要创建 main() 方法,而且每个测试方法一一对应,逻辑特别清晰。

  junit 常用注解:
  (1) @Test:测试方法
  (2) @Before:每个测试方法之前运行
  (3) @After:每个测试方法之后运行

任务1:创建目录

  通过FileSystem.mkdirs(Path f)可在 HDFS 上创建文件夹,其中 f 为文件夹的完整路径,mkdirs()方法可以实现创建多级目录。具体实现如下:

package com.hongyaa.hdfs;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

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

public class HDFSDemo {
	FileSystem fs = null;

	// 每次执行单元测试前都会执行该方法
	@Before
	public void setUp() throws IOException, InterruptedException, URISyntaxException {
		Configuration conf = new Configuration();
		// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,我的是“root”
		fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf, "root");
	}

	// 单元方法:创建目录
	@Test
	public void mkdir() throws IllegalArgumentException, IOException {
		boolean mkdirs = fs.mkdirs(new Path("/123/1/2"));
		System.out.println(mkdirs);
	}

	// 每次执行单元测试后都会执行该方法,关闭资源
	@After
	public void tearDown() {
		if (null != fs) {
			try {
				fs.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

  执行结果如下所示:

Vditor

图1

任务2:上传文件

  通过FileSystem.copyFromLocalFile(Path src,Path dst)可将本地文件上传到 HDFS 的指定位置上,其中 src 和 dst 均为文件的完整路径。具体实现如下:

	//单元方法:上传文件
	@Test
	public void addFileToHdfs() throws IOException{
		/*
		 * src:要上传的文件所在的本地路径
		 * dst:要上传到HDFS的目标路径
		 */
		Path src=new Path("/root/software/hadoop-2.7.7/README.txt");
		Path dst=new Path("/123");
		//默认不删除本地源文件,覆盖HDFS同名文件
		fs.copyFromLocalFile(src, dst);
	}

  执行结果如下所示:

Vditor

扫描二维码关注公众号,回复: 11615981 查看本文章

图2

猜你喜欢

转载自blog.csdn.net/c_lanxiaofang/article/details/107828193