Hadoop教程(四)HDFS文件系统JavaAPI接口

 

 

Hadoop教程()HDFS文件系统JavaAPI接口

 


HDFS是存取数据的分布式文件系统,HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具。另一种是JavaAPI,即利用HadoopJava库,采用编程的方式操作HDFS的文件。

 

1 软件下载及安装

 

1.1 相关下载

1、JDK下载Java是运行在JVM虚拟机 (Java Virtual Machine)之上,因此它的运行需要JDK环境的支持,建议下载Oracle官方发布的JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html


2、Eclipse下载:开发Java程序需要强大的Java集成开发环境(IDE)支持,目前最新版本MARS-1版,下载地址:http://mirrors.neusoft.edu.cn/eclipse/technology/epp/downloads/release/mars/1/eclipse-jee-mars-1-win32-x86_64.zip

       

3、Maven下载:Maven是一个项目管理和构建自动化工具。使用Maven管理项目的整个声明周期,包括编译,构建,测试,发布,报告等等。而Maven本身还支持多种插件,可以方便更灵活的控制项目。下载地址:http://maven.apache.org/download.html


1.2 软件安装

        JDK安装位置:D:\software\Java\jdk1.8

        Eclipse安装位置:D:\software\Eclipse\eclipse_jee

        Maven安装位置:D:\software\Maven

1.3 环境配置

1、Java环境变量http://jingyan.baidu.com/article/c85b7a6414f2ee003bac95d5.html

2、Maven环境变量http://jingyan.baidu.com/article/cb5d61050b8ee7005d2fe04e.html

3、Maven修改默认仓库配置

Maven的安装目录下新建repository做为默认仓库:<localRepository>D:\software\Maven\repository</localRepository>

找到修改D:\software\Maven\conf\settings.xml文件


4、Eclipse配置Maven


启动Eclipse后,找到Window -> Preference-> Maven -> Installation -> Add按钮,设置安装目录:

 


设置setting.xml,找到Window -> Preference-> Maven -> User Settings,设置settings.xml文件:

 

 

1.4 创建项目

打开Eclipse,创建Maven项目,依次点击File-->New-->Maven Project ,请选中Createa simple project(skip archetype selection),之后点击Next

Hadoop教程(四)HDFS文件系统JavaAPI接口_第1张图片

填写Group idartifact id Version默认,Packaging默认为jar,NameDescription填,其他的不填,之后点击Finish

      Hadoop教程(四)HDFS文件系统JavaAPI接口_第2张图片

 

1.5 Package视图

找到Package视图:Window -> Show View-> Other,搜索Package Explorer

Hadoop教程(四)HDFS文件系统JavaAPI接口_第3张图片

1.6 配置pom.xml文件

编写pom.xml文件引入依赖的Jar包:

	<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
		<modelVersion>4.0.0</modelVersion>
		<!-- 定义组织标识Id -->
		<groupId>com.hadoop</groupId>
		<!-- 定义项目名称Id -->
		<artifactId>hdfs</artifactId>
		<!-- 版本号 -->
		<version>0.0.1-SNAPSHOT</version>
	
		<!-- 依赖关系:依赖关系列表 -->
		<dependencies>
			<!-- 引入hadoop-common Jar包 -->
			<dependency>
				<groupId>org.apache.hadoop</groupId>
				<artifactId>hadoop-common</artifactId>
				<version>2.7.1</version>
			</dependency>
	
			<!-- 引入hadoop-hdfs Jar包 -->
			<dependency>
				<groupId>org.apache.hadoop</groupId>
				<artifactId>hadoop-hdfs</artifactId>
				<version>2.7.1</version>
			</dependency>
		</dependencies>
	</project>

2 Java- API操作

2.1 文件下载

Java代码实现:HDFS文件系统复制文件到本地。

代码实现:

	import java.io.FileOutputStream;
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.OutputStream;
	import java.net.URI;
	import java.net.URISyntaxException;
	
	import org.apache.hadoop.conf.Configuration;
	import org.apache.hadoop.fs.FileSystem;
	import org.apache.hadoop.fs.Path;
	import org.apache.hadoop.io.IOUtils;
	
	public class OpenDemo {
		public static void main(String[] args) throws IOException, URISyntaxException {
			// 获得FileSystem对象
			FileSystem fileSystem = FileSystem.get(new URI("hdfs://Hadoop1:9000"), new Configuration());
			// 调用open方法进行下载,参数HDFS路径
			InputStream in = fileSystem.open(new Path("/hadoop/LICENSE.txt"));
			// 创建输出流,参数指定文件输出地址
			OutputStream out = new FileOutputStream("F://hadoop/LICENSE.txt");
			// 使用Hadoop提供的IOUtils,将in的内容copy到out,设置buffSize大小,是否关闭流设置true
			IOUtils.copyBytes(in, out, 4096, true);
		}
	}


2.2 上传文件

Java代码实现:从本地文件上传到HDFS文件服务器上。

代码实现:

	import java.io.FileInputStream;
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.OutputStream;
	import java.net.URI;
	import java.net.URISyntaxException;
	
	import org.apache.hadoop.conf.Configuration;
	import org.apache.hadoop.fs.FileSystem;
	import org.apache.hadoop.fs.Path;
	import org.apache.hadoop.io.IOUtils;
	
	public class UpLoadDemo {
		public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
			// 获得FileSystem对象,指定使用root用户上传
			FileSystem fileSystem = FileSystem.get(new URI("hdfs://Hadoop1:9000"), new Configuration(), "root");
			// 创建输入流,参数指定文件输出地址
			InputStream in = new FileInputStream("C:\\Windows\\System32\\drivers\\etc\\hosts");
			// 调用create方法指定文件上传,参数HDFS上传路径
			OutputStream out = fileSystem.create(new Path("/hadoop/hosts"));
			// 使用Hadoop提供的IOUtils,将in的内容copy到out,设置buffSize大小,是否关闭流设置true
			IOUtils.copyBytes(in, out, 4096, true);
		}
	}

Hadoop教程(四)HDFS文件系统JavaAPI接口_第4张图片


2.3 删除文件

Java代码实现:删除HDFS文件服务器上的文件。

代码实现:

	import java.io.IOException;
	import java.net.URI;
	import java.net.URISyntaxException;
	
	import org.apache.hadoop.conf.Configuration;
	import org.apache.hadoop.fs.FileSystem;
	import org.apache.hadoop.fs.Path;
	
	public class DeleteDemo {
		public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
			// 获得FileSystem对象
			FileSystem fileSystem = FileSystem.get(new URI("hdfs://Hadoop1:9000"), new Configuration(), "root");
			// 调用delete方法,删除指定的文件。参数:false:表示是否递归删除
			boolean flag = fileSystem.delete(new Path("/hadoop/hosts"), false);
			// 执行结果:true
			System.out.println(flag);
		}
	}

Hadoop教程(四)HDFS文件系统JavaAPI接口_第5张图片


2.4 创建文件

Java代码实理:在HDFS文件服务器上创建文件夹。

代码实现:

	import java.io.IOException;
	import java.net.URI;
	import java.net.URISyntaxException;
	
	import org.apache.hadoop.conf.Configuration;
	import org.apache.hadoop.fs.FileSystem;
	import org.apache.hadoop.fs.Path;
	
	public class MkDirDemo {
		public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
			// 获得FileSystem对象
			FileSystem fileSystem = FileSystem.get(new URI("hdfs://Hadoop1:9000"), new Configuration(), "root");
			// 调用mkdirs方法,在HDFS文件服务器上创建文件夹。
			boolean flag = fileSystem.mkdirs(new Path("/hadoop/dir3"));
			// 执行结果:true
			System.out.println(flag);
		}
	}

Hadoop教程(四)HDFS文件系统JavaAPI接口_第6张图片

 


                --以上为《Hadoop教程(四)HDFS文件系统JavaAPI接口》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


你可能感兴趣的:(Hadoop教程(四)HDFS文件系统JavaAPI接口)