HDFS的java客户端编写
2017-09-28 16:17
537 查看
pom.xml
测试类HDFSUtil
<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.alixx</groupId> <artifactId>hdfsz</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>hdfsz</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <!-- hadoop 分布式文件系统类库 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.3</version> </dependency> <!-- hadoop 公共类库 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.3</version> </dependency> </dependencies> </project>
测试类HDFSUtil
package com.bonc.hdfsz; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.commons.compress.utils.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.junit.Before; import org.junit.Test; public class HdfsUtil { /* FileSystem是文件系统的抽象,HDFS是分布式文件系统对FileSystem的实现,如此即可解耦合。 不论底层文件系统的具体实现是什么样的,文件系统FileSystem统一提供了访问接口。 */ FileSystem fs = null; @Before public void init() throws IOException, InterruptedException, URISyntaxException{ //访问HDFS文件系统两种方式 Configuration conf = new Configuration(); /* 方式1:设置默认文件系统、设置run Configuration的参数 -DHADOOP_USER_NAME=dream361 默认读取classpath下的xxx.site.xml配置文件,并解析其内容,封装到conf对象中。 conf.set("fs.defaultFS", "hdfs://master:9000/"); */ fs = FileSystem.get(conf); /* 方式2:在此方法的参数中设置默认文件系统、用户名 根据配置信息,去获取一个具体文件系统的客户端操作实例对象 */ fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "dream361"); } // 上传方式1:更底层的 @Test public void upload1() throws IOException{ Path dst = new Path("hdfs://master:9000/c.txt"); FSDataOutputStream os = fs.create(dst); FileInputStream in = new FileInputStream("D:/c.txt"); IOUtils.copy(in, os); } // 上传方式2: 封装好的 @Test public void upload2() throws IllegalArgumentException, IOException{ fs.copyFromLocalFile(new Path("D:/c2.txt"), new Path("hdfs://master:9000/c3.txt")); } // 下载文件 @Test public void download() throws Exception, IOException{ fs.copyToLocalFile(new Path(""), new Path("")); } //迭代列出文件 @Test public void listFiles1() throws FileNotFoundException, IllegalArgumentException, IOException{ //listFiles列出的是文件信息,而且提供递归遍历 ,第二个参数为false则不提供递归 RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true); while(files.hasNext()){ LocatedFileStatus file = files.next(); Path filePath = file.getPath(); String fileName = filePath.getName(); System.out.println(fileName); } } //迭代列出目录及文件 @Test public void listFiles2() throws FileNotFoundException, IllegalArgumentException, IOException{ //listStatus可以列出文件和目录信息,但是不提供自带的递归遍历 FileStatus[] listStatus = fs.listStatus(new Path("/")); for(FileStatus status:listStatus){ String name = status.getPath().getName(); //判断是目录还是文件,然后打印name+和判断结果 System.out.println(name+(status.isDirectory()?" is dir":" is file")); } } //创建目录 @Test public void mkdir() throws IllegalArgumentException, IOException{ fs.mkdirs(new Path("/aa/bb/cc")); } //删除文件或目录 @Test public void rmFile() throws IllegalArgumentException, IOException{ fs.delete(new Path("/aa"),true); } //移动文件 @Test public void mvFile() throws IllegalArgumentException, IOException{ fs.rename(new Path("/aa/a.txt"), new Path("/bb/b.txt")); } //在程序入口测试 public static void main(String[] args) throws IOException { //配置文件信息 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path src = new Path("hdfs://master:9000/jdk.tar.gz"); FSDataInputStream in = fs.open(src); FileOutputStream os = new FileOutputStream("D:/jdk.tar.gz"); IOUtils.copy(in, os); } }
相关文章推荐
- 使用JAVA客户端对HDFS进行代码编写(五)
- 【Hadoop】HDFS的java客户端编写
- 一脸懵逼学习hadoop之HDFS的java客户端编写
- HDFS的JAVA客户端编写(JAVA代码实现对HDFS的操作)
- HDFS的java客户端编写
- HDFS的java客户端编写
- hdfs shell命令及java客户端编写
- Hadoop3-HDFS的java客户端编写
- HDFS的JAVA客户端编写
- Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本
- hadoop系列二:HDFS文件系统的命令及JAVA客户端API
- https+xml服务端/客户端java后台编写及soapUI https测试
- HBase学习笔记1 - 如何编写高性能的客户端Java代码
- java实现网上在线支付--04_编写易宝支付的客户端加密工具类
- Java数据接口编写简单例子,Java Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据
- Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程
- https+xml服务端/客户端java后台编写及soapUI https测试
- HDFS Java 客户端开发(开发环境:Windows)
- CXF在项目中的真实运用--WS访问客户端编写[java、.net]
- HDFS java客户端使用