文档章节

HDFS JAVA API简单测试

Endless2010
 Endless2010
发布于 2017/08/07 21:57
字数 556
阅读 56
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

创建目录

mkdirs相当于 mkdir -p, mkdirs在dir存在的情况下也是返回true

public static void mkdirs(FileSystem fs, String path) {
		try {
			Path dirPath = new Path(path);
			if (!fs.exists(dirPath)) {
				fs.mkdirs(dirPath);
				System.out.println("created dir:" + path);
			} else {
				System.out.println("dir:" + path + "already exists");
			}
		} catch (IOException e) {
			System.out.println("mkdir:" + path + " failed, msg="+ e.getMessage());
			e.printStackTrace();
		}
	}

创建新文件

文件的父目录会自动创建

	public static void createFile(FileSystem fs, String filePath, String content) {
		try {
			Path path = new Path(filePath);
			FSDataOutputStream out = fs.create(path);
			out.write(content.getBytes());
			System.out.println("create File:" + filePath + " successed");
			out.close();
		} catch (IOException e) {
			System.out.println("create File:" + filePath + " failed, msg="+ e.getMessage());
			e.printStackTrace();
		}
	}

文件重命名

to目录必须存在,否则rename会失败,文件不会移动到目的路径

	public static void mv(FileSystem fs, String from, String to) {
		try {
			fs.rename(new Path(from), new Path(to));
			System.out.println("mv from:" + from + " to " + to+ " successed");
		} catch (IOException e) {
			System.out.println("mv from:" + from + " to " + to+ " failed, msg="+ e.getMessage());
			e.printStackTrace();
		}
	}

删除文件或目录

	public static void delete(FileSystem fs, String filePath) {
		try {
			fs.delete(new Path(filePath), true);// true表示是否递归删除目录,如果是文件则无效
			System.out.println("delete file:" + filePath + " successed");
		} catch (IOException e) {
			System.out.println("delete file:" + filePath + " delete failed, msg="+ e.getMessage());
			e.printStackTrace();
		}
	}

上传本地文件

hdfsPath的目录会自动创建

public static void uploadFile(FileSystem fs, String localPath, String hdfsPath,boolean deleteLocal){
		if(!new File(localPath).exists()){
			System.out.println("localfile: "+localPath+" does not exist");
			return;
		}
		try {
			//deleteLocal为false表示不删除源文件,true为删除
			fs.copyFromLocalFile(deleteLocal, new Path(localPath), new Path(hdfsPath));
			System.out.println("uploadFile File:" + localPath + " to: "+hdfsPath+" successed");
		} catch (IOException e) {
			System.out.println("uploadFile File:" + localPath + " to: "+hdfsPath+" failed,msg="+e.getMessage());
			e.printStackTrace();
		}
	}

下载HDFS文件到本地

本地目录会自动创建


public static void downloadFiles(FileSystem fs, String hdfsPath, String localPath,boolean deleteSrc){
		try {
			if(!fs.exists(new Path(hdfsPath))){
				System.out.println("hdfsPath: "+hdfsPath+" does not exist");
				return;
			}
			fs.copyToLocalFile(deleteSrc, new Path(hdfsPath), new Path(localPath));
			System.out.println("downloadFiles File from:" + hdfsPath + " to: "+localPath+" successed");
		} catch (IOException e) {
			System.out.println("downloadFiles File from:" + hdfsPath + " to: "+localPath+" failed,msg="+e.getMessage());
			e.printStackTrace();
		}
	}

读取文件的内容

public static void printFile(FileSystem fs, String filePath) throws IOException{
		Path srcPath = new Path(filePath);
		InputStream in = null;
		try {
			in = fs.open(srcPath);
			IOUtils.copyBytes(in, System.out, 4096, false);
		} finally {
			IOUtils.closeStream(in);
		}

	}

读取目录信息


	public static void printStatus(FileSystem fs, String hdfsPath){
		try {
              FileStatus[] files = fs.listStatus(new Path(hdfsPath));
              for(FileStatus file: files)
            	  System.out.println(file.getPath().toString());
		} catch (IOException e) {
			System.out.println("printStatus :" + hdfsPath + " failed,msg="+e.getMessage());
			e.printStackTrace();
		}
		
	}

测试

	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://localhost:9000");
		FileSystem fs = FileSystem.get(conf);
		mkdirs(fs, "/hadoop/test");
		createFile(fs, "/hadoop/test1/files/helloworld.txt", "helloscala");
		mkdirs(fs, "/hadoop/test3/files/");
		mv(fs, "/hadoop/test1/files/helloworld.txt","/hadoop/test3/files/hellohdfs.txt");
		delete(fs, "/helloworld");
		uploadFile(fs,"D:/hadoop-2.7.3/LICENSE.txt","/hadoop/files/license.txt",false);
		downloadFiles(fs,"/files","D:/hdfs/files",false);
		printStatus(fs,"/files");
		printFile(fs,"/hadoop/files/license.txt");
	}
Endless2010
粉丝 1
博文 36
码字总数 23027
作品 0
南京
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6K
18
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

HTML5 视频和音频的常用方法

HTML5 中为视频 video 和音频 audio 元素,提供了属性、方法和事件。这两个元素的常用属性上一节我们已经讲过了,本节我们来讲一下这两个元素的方法。 视频和音频的常用方法 HTML5 中为 vide...

凌兮洛
8分钟前
5
0
Git应用详解第一讲:Git分区、配置与日志

Git应用详解第一讲:Git分区、配置与日志 前言 曾经听到过这样一句话:不会「git」就不要敲代码了。细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧! 因此,为了避免这种情...

osc_jhlfbvu7
8分钟前
0
0
HashMap、HashSet、HashTable比较

1.HashMap和HashTable区别 线程安全:HashMap线程不安全。而HashTable通过让get/put上锁达到线程安全,不过代价很大。 HashMap允许key/value为null(但只能有一个null键),而HashTable不允许...

曦鱼violet
8分钟前
10
0
SHELL脚本编程练习答案(多版本)

练习: 1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核 版本,CPU型号,内存大小,硬盘大小 #!/bin/bashYELLOW='\e[1;33m'RED='\e[1;31m'...

osc_0cugk2ks
9分钟前
0
0
盘点 35 个 Apache 顶级项目,我拜服了…

Apache 软件基金会 Apache 软件基金会,全称:Apache Software Foundation,简称:ASF,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生...

Java技术栈
10分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部