由于Hadoop是使用Java语言编写的,因此可以使用Java API操作Hadoop文件系统。
HDFS Shell本质上就是对Java API的应用,通过编程的形式操作HDFS,其核心是使用HDFS提供的Java API构造一个访问客户端对象,然后通过客户端对象对HDFS上的文件进行操作(增、删、改、查)。
一、HDFS JAVA API介绍
Hadoop整合了众多文件系统。HDFS只是这个文件系统的一个实例。HDFS Java API的****核心包****如下所示。
• org.Apache.hadoop.****fs********.********FileSystem****:它是通用文件系统的抽象基类,可以被分布式文件系统继承,它具有许多实现类,如LocalFileSystem、DistributedFileSystem、FtpFileSystem等。
• org.Apache.hadoop.****fs********.********FileSta********t********us****:它用于向客户端展示系统中文件和目录的元数据,具体包含文件大小、块大小、制本信息、修改时间等。
• org. Apache.hadoop. *fs.* ****FSDatalnputStream****:文件输入流,用于读取 Hadgp 文件。
• org. Apache.hadoop.****fs. FSData********O********utputStream****:文件输出流,用于写 Hadoop 文件。
• org. Apache. Hadoop. ****conf. Configuration****:访问配置项,默认配置参数在 core-site.xml中,用户可以添加相应的配置参数。
・org. Apache. hadoop. ****fs. Path****:用于表示Hadoop文件系统中的一个文件或者一个目录的路径。
在Java中操作HDFS,首先需要创建一个客户端实例,主要涉及以下类:
・Configuration:该类的对象封装了客户端或者服务器的配置,每个配置选项是一个键值对,通常情况下,Configuration实例会自动加载HDFS的配置文件core-site.xml,从中获取Hadoop集群的配置信息。
・FileSystem:该类的对象是一个文件系统对象,通过该对象的一些方法可以对文件
进行操作,常用方法如表所示。
表 FileSystem常用方法
copyFromLocalFile(Path src,Path dst) | 从本地磁盘复制文件到HDFS |
---|---|
copyToLocalFile(Path src,Path dst) | 从HDFS复制文件到本地磁盘 |
mkdirs(Path f) | 建立子目录 |
rename(Path src,Path dst) | 重命名文件或文件夹 |
delete(Path f) | 删除指定文件 |
学习JAVA API的网址:
http://hadoop.apache.org/docs/stable/api/index.html
二、 HDFS的API操作案例----使用JAVA API操作HDFS(实现增删改)
1. 配置windows下hadoop环境(已经在安装环境中配置完成)
2. 搭建项目环境
打开Eclipse选择File-New-Maven-Project创建Maven工程,选择“Create a simple Project”,点击Next,进入如下界面:创建一个项目名为“HadoopDemo”,包名为“com.njci”的Maven项目。
创建好项目后,会发现有一个pom.xml,它是对项目进行管理的核心配置文件。本文件中引入hadoop-common、hadoop-hdfs、hadoop-client以及单元测试junit的依赖。注意格式。
在pom.xml中添加依赖后,hadoop相关的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>
<groupId>com.njitt</groupId>
<artifactId>HadoopDemo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>HadoopDemo2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId<