hadoop学习:Java对HDFS的基本操作

初学Hadoop,利用Junit对HDFS的基本操作做一个示例。


我的文件系统:



Eclipse中的项目截图:


java源码:

package com.lee.hadoop.junittest;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.vafer.jdeb.ant.Data;

public class HdfsTest {

	private String path = "hdfs://192.168.41.28:9000/lee/test01";
	private Configuration conf = null;
	FileSystem fs = null;

	/**
	 * 连接至文件系统
	 */
	@Before
	public void linkToFileSystem() {
		conf = new Configuration();// 配置文件在src下
		try {
			fs = FileSystem.get(conf);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("连接文件系统出错。。。");
			e.printStackTrace();
		}
	}

	/**
	 * 创建文件夹mk002
	 * 
	 * @throws IOException
	 */
	@Test
	public void makeDir() throws IOException {
		fs.mkdirs(new Path(path + "/output01/mk001"));
	}

	/**
	 * 创建文件
	 * 
	 * @throws IOException
	 */
	@Test
	public void createdFile() throws IOException {
		String str = "Hello World";
		fs.create(new Path(path + "/output01/a.txt")).writeBytes(str);
	}

	/**
	 * 文件的从命名
	 * 
	 * @throws IOException
	 */
	@Test
	public void renameFile() throws IOException {
		// a.txt重命名为b.txt
		fs.rename(new Path(path + "/output01/a.txt"), new Path(path
				+ "/output01/b.txt"));
	}

	/**
	 * 获取文件最后修改时间
	 * 
	 * @throws IOException
	 */
	@Test
	public void lastWriteTime() throws IOException {
		long lestWriteTime = fs.getFileStatus(
				new Path(path + "/output01/b.txt")).getModificationTime();
		System.out.println(lestWriteTime);
	}

	/**
	 * 从本地上传文件至文件系统
	 * 
	 * @throws IOException
	 */
	@Test
	public void copyFile() throws IOException {
		fs.copyFromLocalFile(new Path("C:/Users/man/Desktop/b.txt"), new Path(
				path + "/output01/mk001/"));
	}

	/**
	 * 查找文件在HDFS中的物理位置,即文件所存储在的节点
	 * 
	 * @throws IOException
	 */
	@Test
	public void serchFile() throws IOException {

		BlockLocation[] blockLocation = fs.getFileBlockLocations(fs
				.getFileStatus(new Path(path + "/output01/mk001/b.txt")), 0, fs
				.getFileStatus(new Path(path + "/output01/mk001/b.txt"))
				.getLen());
		for (BlockLocation b : blockLocation) {
			String[] host = b.getHosts();
			for (String str : host)
				System.out.println(str);
		}

	}

	/**
	 * 获取集群中的所有的节点名称
	 * 
	 * @throws IOException
	 */
	@Test
	public void findHostName() throws IOException {
		DistributedFileSystem dfs = (DistributedFileSystem) fs;
		DatanodeInfo[] datanodeStatus = dfs.getDataNodeStats();
		String[] name = new String[datanodeStatus.length];
		for (int i = 0; i < datanodeStatus.length; i++) {
			name[i] = datanodeStatus[i].getHostName();
			System.out.println(name[i]);
		}
	}

	/**
	 * 清理以上测试产生的垃圾
	 * 1.判断文件及文件夹是否存在
	 * 2.删除文件或问价夹
	 * 
	 * @throws IOException
	 */
	@Test
	public void clearTestFileSystem() throws IOException {

		// 判断问价b.txt是否存在,存在则删除
		if (fs.exists(new Path(path + "/output01/mk001/b.txt"))) {
			System.out.println("文件b.txt存在,现在清除。。。");
			fs.delete(new Path(path + "/output01/mk001/b.txt"), false);
		} else {
			System.out.println("文件b.txt不存在。。。");
		}

		// 判断文件夹mk002是否存在,存在则删除
		if (fs.exists(new Path(path + "/output01/mk002"))) {
			fs.delete(new Path(path + "/output01/mk002"), false);
		}
	}

	/**
	 * 关闭连接
	 */
	@After
	public void closeFileSystem() {
		try {
			// System.out.println("关闭文件系统。。。");
			fs.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("文件系统未能正常关闭。。。");
			e.printStackTrace();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值