Hadoop教程(四)HDFS文件系统JavaAPI接口
HDFS是存取数据的分布式文件系统,HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具。另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件。
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
JDK安装位置:D:\software\Java\jdk1.8
Eclipse安装位置:D:\software\Eclipse\eclipse_jee
Maven安装位置:D:\software\Maven
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文件:
打开Eclipse,创建Maven项目,依次点击File-->New-->Maven Project ,请选中Createa simple project(skip archetype selection),之后点击Next:
填写Group id和artifact id, Version默认,Packaging默认为jar,Name,Description选填,其他的不填,之后点击Finish:
找到Package视图:Window -> Show View-> Other,搜索Package Explorer:
编写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>
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); } }
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); } }
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); } }
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); } }
——厚积薄发(yuanxw)