文档章节

HDFS JAVA API简单测试

Endless2010
 Endless2010
发布于 2017/08/07 21:57
字数 556
阅读 13
收藏 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
南京
程序员
私信 提问
八步教你在笔记本电脑创建Hadoop本地实例!

  【IT168 评论】要想进入大数据领域,Hadoop是一件非常重要的事情,它具有复杂的安装过程,大量的集群,数百台机器以及TB(或者PB)级别的数据等。但实际上,用户可以下载简单的JAR并在个人...

it168网站
2018/05/25
0
0
Hadoop入门进阶步步高(四)-测试Hadoop

四、测试Hadoop 一个简单的求每年温度最大值的程序。 1、准备两个文本测试数据 准备两个名为data1.txt及data2.txt的文件,用于做为计算的输入数据,将其放于/home/fenglibin/java/data目录下...

帅锅锅
2015/08/18
0
0
Scala 比 Java 还快?

通常Scala被认为比Java要慢,特别是用于函数式编程时。本文会解释为什么这个被广泛接受的假设是错误的。 数据验证 编程中一个常见的问题是数据验证。即我们要确保所有得到的数据处于正确的结...

oschina
2014/06/22
24.1K
48
Hadoop中其他知识(24)

Thrift: 因为Hadoop文件系统的接口是通过JAVAApi提供的,所以其他非Java应用程序访问Hadoop文件系统会比较麻烦。 Thriftfs定制功能模块中ThriftApi通过把hadoop文件系统包装成一个ApacheThr...

肖鋭
2014/03/13
0
0
Spark 从零到开发(四)单词计数的三种环境实现

实现一:spark shell 主要用于测试,在部署到集群之前,自己使用集合测试数据来测试流程是否通顺。 1.1 文件上传hdfs 首先先得把文本文件上传到HDFS上的spark目录下 文本内容: 1.2 开启she...

一个入门攻城狮
2018/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面理解Java内存模型(JMM)及volatile关键字

理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的...

亭子happy
7分钟前
0
0
Prometheus监控mysql实例--centos7安装mysql_exporter

目录 概述 环境准备 普罗米修斯简介 mysql安装 mysqld_exporter安装 启动参数列表 概述 prometheus(普罗米修斯) 是一个开源系统监控和报警工具包,许多公司和组织都采用了Prometheus,该项目...

java_龙
13分钟前
3
0
拥有2000家门店,他如何晋升为服装界的新宠?

摘要: —— iwarm3.0加热组件、碳纳米管膜炎、管状石墨结构体...你看到并不是一款高科技电子产品,这是快鱼服饰在这个冬天推出的黑科技产品 - 智能温控羽绒服。 在竞争激烈的服装行业,快鱼...

阿里云云栖社区
15分钟前
0
0
不忘初心 砥砺前行-智和信通2018年年会报道

1月18日,智和信通以“不忘初心 砥砺前行”为主题的2018总结会议暨2019年年会在京召开。年会以总经理李少龙的讲话为开场,充分肯定了全体员工2018年的工作和成绩,并表达了公司产品智和网管平...

智和网管平台
23分钟前
0
0
NGINX api网关

以谁为师
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部