文档章节

使用java写HDFS的操作代码

静下来想想静静
 静下来想想静静
发布于 2017/03/08 17:54
字数 592
阅读 5
收藏 0

学习hadoop,学了hadoop的shell命令,诸如:hadoop fs -put | -mkdir | -cat | -ls 等等等等。这里不再说。这里主要说说,使用java API来操作HDFS。

 一>>>配置JDK
     略

 二>>>配置maven

    配置maven的环境变量和配置eclipse的maven插件 略
    新建一个maven工程:
    配置pom.xml文件(如下):
<!-- 设定仓库 -->
	<repositories>
		<repository>
			<id>central-repos</id>
			<name>Central Repository</name>
			<url>http://repo.maven.apache.org/maven2</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>

		<repository>
			<id>central-repos2</id>
			<name>Central Repository 2</name>
			<url>http://repo1.maven.org/maven2/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>

		<repository>
			<id>springsource-repos</id>
			<name>SpringSource Repository</name>
			<url>http://repo.springsource.org/libs-milestone-local</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<name>osc Repository</name>
			<id>osc_thirdparty</id>
			<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
		</repository>
		<repository>
			<id>bitwalker.user-agent-utils.mvn.repo</id>
			<url>https://raw.github.com/HaraldWalker/user-agent-utils/mvn-repo/</url>
			<!-- use snapshot version -->
			<snapshots>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
	  
<dependencies>
	<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
	<dependency>
	    <groupId>org.apache.hadoop</groupId>
	    <artifactId>hadoop-hdfs</artifactId>
	    <version>2.6.4</version>
	</dependency>

	<dependency>
	    <groupId>org.apache.hadoop</groupId>
	    <artifactId>hadoop-common</artifactId>
	    <version>2.6.4</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.hadoop</groupId>
	    <artifactId>hadoop-client</artifactId>
	    <version>2.6.4</version>
	</dependency>	
		
	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.8.1</version>
	</dependency>
	 
	<dependency>
		<groupId>jdk.tools</groupId>
		<artifactId>jdk.tools</artifactId>
		<version>1.7</version>
		<scope>system</scope>
		<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
	</dependency>  
</dependencies>

写java代码 如下:下面代码实现了一些基本的对HDFS的操作:

public class HDFSDemo {
	static String uri="hdfs://192.168.1.101:8020";
	static FileSystem fs;
	/**
	 * 获取FileSystem
	 * @return
	 */
	public static FileSystem getFs(){
		try {
			fs = FileSystem.get(new URI(uri),new Configuration(),"root");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		return fs;
	}
	/**
	 * 创建目录
	 * @param path
	 */
	public static void mkdir(String path){
		try {
			fs = getFs(); 
			fs.mkdirs(new Path(path));
			fs.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
	}
	/**
	 * 查看目录下文件(可能不包含目录)
	 * @param path
	 */
	public static void show(String path){
		fs = getFs();
		try {
			RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path(path), true);
			
			while (ri.hasNext()) {
				LocatedFileStatus lfs = ri.next();
				Path fs = lfs.getPath();
				System.out.println(fs.getName());
				
			}
			fs.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	/**
	 * 查看所有目录 并得到当前目录
	 */
	public static String showAll(String path){
		fs = getFs();
		try {
			FileStatus[] fls = fs.listStatus(new Path(path));
			for (FileStatus file : fls) {
				System.out.println(file.getPath().getName());
			}
			fs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return path;
	}
	
	
	/**
	 * 删除文件
	 * @param args
	 */
	public static void delete(String path){
		fs = getFs();
		try {
			fs.delete(new Path(path),true);
			fs.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	/**
	 * 下载文件
	 * @param args
	 */
	@Test 
	public  void download(){
		
		fs = getFs();
		try {
			fs.copyToLocalFile(new Path("/jdk-7u75-linux-x64.gz"),new Path("E:\\12.gz"));
			fs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
//		fs = getFs();
//		try {
//			FSDataInputStream fip = fs.open(new Path(path1)); //获取一个输入流,HDFS文件的输入流
//			OutputStream ops = new FileOutputStream(path2);
//			IOUtils.copyBytes(fip,ops,4096,true);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		
		
		
		
	}
	/**
	 * 上传文件
	 * @param args
	 */
	public static void upload(String path1,String path2){
		fs = getFs();
		try {
			fs.copyFromLocalFile(new Path(path1),new Path(path2));
			fs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

大概就是这些。 感谢观看!

© 著作权归作者所有

静下来想想静静
粉丝 2
博文 14
码字总数 12348
作品 0
焦作
私信 提问
kettle 大数据插件操作相关问题

一、hadoop 没有权限的解决方案 原文:http://kcd.nivalsoul.cn/article/1545533237270 问题 在 windows 上使用 kettle 连接 hadoop 写文件的时候,默认使用的是本机登录用户作为文件属主访问...

空山苦水禅人
2018/12/23
68
0
Spark 从零到开发(四)单词计数的三种环境实现

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

一个入门攻城狮
2018/11/20
0
0
HDFS之SequenceFile和MapFile

Hadoop的HDFS和MapReduce子框架主要是针对大数据文件来设计的,在小文件的处理上不但效率低下,而且十分消耗磁盘空间(每一个小文件占用一个Block,HDFS默认block大小为64M)。解决办法通常是选...

mahout
2012/09/02
1K
0
大数据(hadoop-HDFS的本地开发环境的配置与常见的HDFS的JAVA API)

HDFS的本地开发环境搭建 1:所需工具 1)hadoop2.7.3安装包 2)hadoop-eclipse-plugin插件 https://github.com/winghc/hadoop2x-eclipse-plugin 2:搭建过程 HDFS Java API介绍 configuratio......

这很耳东先生
04/22
4
0
CDH版本hadoop2.6伪分布式安装

CDH版本hadoop的一个重要分支,使用hadoop-2.6.0-cdh5.9.0在单台CentOS配置hadoop伪分布式环境; 1、基础环境配置 1.1、关闭防火墙和SELinux 1.1.1、关闭防火墙 1.1.2、关闭SELinux 注:以上...

巴利奇
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
312
7
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部