hadoop系列之五JavaAPI操作HDFS文本系统

JavaAPI操作HDFS文本系统

window下用到的hadoop版本:
链接:http://pan.baidu.com/s/1jI2yVgq 密码:yvet

创建项目

使用idea创建的项目






<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.6.4</version>
</dependency>

操作JavaAPI

1.初始化方式一操作

注意:出现错误请查看hadoop系统六错误解决方案
private FileSystem fs;
private Configuration c;

@Before
public void init() throws Exception {
	c = new Configuration();
	//方式一 设置地址,传递配置,在vm options中设置-DHADOOP_USER_NAME=hadoop
	c.set("fs.defaultFS", "hdfs://mini06:9000");
	//拿到一个文件系统操作客户端实例对象
	fs = FileSystem.get(c);
}

2.初始化方式二操作 推荐

private FileSystem fs;
private Configuration c;

@Before
public void init() throws Exception {
	c = new Configuration();
	//方式二 传递用户与文件系统
	/**
         *  URI uri, hdfs的地址
         *  Configuration conf, 客户端配置对象
         *  String user  指定linux上运行的用户名称
         */
	fs = FileSystem.get(new URI("hdfs://mini06:9000"), c, "hadoop");
}

3.文件上传

//从本地上传文件到hadoop hdfs文件系统的根目录下
@Test
public void upload() throws IOException {
	/**
	* 将文件上传到fdhs
	* 参数一:本地文件路径
	* 参数二:fdhs文件目录
	*/
	f.copyFromLocalFile(new Path("c:/1.png"),new Path("/"));
	f.close();
}

4.下载文件

//从hadoop hdfs下载文件到本地
@Test
public void testDonwload() throws IOException {
	/**
	 * Path src, 下载的地址
	 * Path dst  存放下载文件的地址
	 */
	f.copyToLocalFile(new Path("/1.png"),new Path("d:/2.png"));
	f.close();
}

5.获取客户端所有配置信息并打印

//获取客户端所有的配置信息
@Test
public void testGetConf(){
	Iterator<Map.Entry<String, String>> it = c.iterator();
	while(it.hasNext()){
	    Map.Entry<String, String> conf = it.next();
	    System.out.println(conf.getKey()+":"+conf.getValue());
	}
}

6.创建目录

默认就是递归创建目录
 //创建目录
@Test
public void testMkdir() throws IOException {
	boolean mkdirs = f.mkdirs(new Path("/abc/def"));
	System.out.println("是否创建成功"+mkdirs);
}

7.删除文件

//删除文件
@Test
public void testDelete() throws IOException {
	/**
	 * 参数一:删除的路径
	 * 参数二:要不要递归删除
	 * 返回:是否删除成功
	 */
	boolean delete = f.delete(new Path("/1.png"), false);
	System.out.println("是否删除成功:"+delete);
}

8.递归列出文件下文件与子文件

//递归列出文件下文件与子文件
@Test
public void testTrss() throws IOException {
	/**
	 * 参数一:路径
	 * 参数二:是否递归查询
	 * 返回:返回迭代器
	 */
	RemoteIterator<LocatedFileStatus> listFiles = f.listFiles(new Path("/"),true);
	while(listFiles.hasNext()){
	    LocatedFileStatus fs = listFiles.next();
	    System.out.println("blockSize:" + fs.getBlockSize());
	    System.out.println("owner:" + fs.getOwner());
	    System.out.println("replication:" + fs.getReplication());
	    System.out.println("permission:" + fs.getPermission());
	    System.out.println("path:" + fs.getPath());
	    //获取某一个文件的块信息
	    BlockLocation[] blockLocations = fs.getBlockLocations();
	    for (BlockLocation b:blockLocations){
		//获取某一个文件分块后的起始位置
		System.out.println("offset:"+b.getOffset());
		//获取每一个块的大小
		System.out.println("block length:"+b.getLength());
		String[] datanodes = b.getHosts();
		for (String node:datanodes){
		    System.out.println("datanodes:"+node);
		}
	    }
	    System.out.println("========================================================");
	}
}

9.读取一级目录

//读取一级目录
@Test
public void testLs2() throws IOException {
	FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
	for (FileStatus f : fileStatuses) {
	    System.out.print(f.getPath().getName());
	    System.out.println(f.isFile() ? "====>file:" : "====>directory");
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值