HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。
对分HDFS中的文件操作主要涉及一下几个类:
Configuration类:该类的对象封转了客户端或者服务器的配置。
FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。
FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入输出流。分别通过FileSystem的open方法和create方法获得。
具体如何对文件操作清下下面例子:

1 package com.hdfs;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6
7 import org.apache.hadoop.conf.Configuration;
8 import org.apache.hadoop.fs.FSDataOutputStream;
9 import org.apache.hadoop.fs.FileStatus;
10 import org.apache.hadoop.fs.FileSystem;
11 import org.apache.hadoop.fs.Path;
12 import org.apache.hadoop.io.IOUtils;
13
14 public class HdfsTest {
15
16 //创建新文件
17 public static void createFile(String dst , byte[] contents) throws IOException{
18 Configuration conf = new Configuration();
19 FileSystem fs = FileSystem.get(conf);
20 Path dstPath = new Path(dst); //目标路径
21 //打开一个输出流
22 FSDataOutputStream outputStream = fs.create(dstPath);
23 outputStream.write(contents);
24 outputStream.close();
25 fs.close();
26 System.out.println("文件创建成功!");
27 }
28
29 //上传本地文件
30 public static void uploadFile(String src,String dst) throws IOException{
31 Configuration conf = new Configuration();
32 FileSystem fs = FileSystem.get(conf);
33 Path srcPath = new Path(src); //原路径
34 Path dstPath = new Path(dst); //目标路径
35 //调用文件系统的文件复制函数,前面参数是指是否删除原文件,true为删除,默认为false
36 fs.copyFromLocalFile(false,srcPath, dstPath);
37
38 //打印文件路径
39 System.out.println("Upload to "+conf.get("fs.default.name"));
40 System.out.println("------------list files------------"+"\n");
41 FileStatus [] fileStatus = fs.listStatus(dstPath);
42 for (FileStatus file : fileStatus)
43 {
44 System.out.println(file.getPath());
45 }
46 fs.close();
47 }
48
49 //文件重命名
50 public static void rename(String oldName,String newName) throws IOException{
51 Configuration conf = new Configuration();
52 FileSystem fs = FileSystem.get(conf);
53 Path oldPath = new Path(oldName);
54 Path newPath = new Path(newName);
55 boolean isok = fs.rename(oldPath, newPath);
56 if(isok){
57 System.out.println("rename ok!");
58 }else{
59 System.out.println("rename failure");
60 }
61 fs.close();
62 }
63 //删除文件
64 public static void delete(String filePath) throws IOException{
65 Configuration conf = new Configuration();
66 FileSystem fs = FileSystem.get(conf);
67 Path path = new Path(filePath);
68 boolean isok = fs.deleteOnExit(path);
69 if(isok){
70 System.out.println("delete ok!");
71 }else{
72 System.out.println("delete failure");
73 }
74 fs.close();
75 }
76
77 //创建目录
78 public static void mkdir(String path) throws IOException{
79 Configuration conf = new Configuration();
80 FileSystem fs = FileSystem.get(conf);
81 Path srcPath = new Path(path);
82 boolean isok = fs.mkdirs(srcPath);
83 if(isok){
84 System.out.println("create dir ok!");
85 }else{
86 System.out.println("create dir failure");
87 }
88 fs.close();
89 }
90
91 //读取文件的内容
92 public static void readFile(String filePath) throws IOException{
93 Configuration conf = new Configuration();
94 FileSystem fs = FileSystem.get(conf);
95 Path srcPath = new Path(filePath);
96 InputStream in = null;
97 try {
98 in = fs.open(srcPath);
99 IOUtils.copyBytes(in, System.out, 4096, false); //复制到标准输出流
100 } finally {
101 IOUtils.closeStream(in);
102 }
103 }
104
105
106 public static void main(String[] args) throws IOException {
107 //测试上传文件
108 //uploadFile("D:\\c.txt", "/user/hadoop/test/");
109 //测试创建文件
110 /*byte[] contents = "hello world 世界你好\n".getBytes();
111 createFile("/user/hadoop/test1/d.txt",contents);*/
112 //测试重命名
113 //rename("/user/hadoop/test/d.txt", "/user/hadoop/test/dd.txt");
114 //测试删除文件
115 //delete("test/dd.txt"); //使用相对路径
116 //delete("test1"); //删除目录
117 //测试新建目录
118 //mkdir("test1");
119 //测试读取文件
120 readFile("test1/d.txt");
121 }
122
123 }
HDFS中JAVA API的使用的更多相关文章
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- HDFS的Java API
HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- Hadoop(五):HDFS的JAVA API基本操作
HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...
- Elasticsearch中JAVA API的使用
1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...
- 使用HDFS客户端java api读取hadoop集群上的信息
本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...
- HDFS的java api操作
hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...
- IDEA 创建HDFS项目 JAVA api
1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成 ...
- Sample: Write And Read data from HDFS with java API
HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...
随机推荐
- Hibernate注解----类级别注解以及属性注解详解----图片版本
这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...
- HDU 1257 最少拦截系统【LIS】
题意:类似于套娃娃,问最少需要多少个拦截系统. 思路: 假设已经有m个导弹拦截序列 r1:x11>=x12>=x13>=...>=x1n r1:x21>=x22>= ...
- 第3章 Linux常用命令(6)_关机重启命令
8. 关机重启命令 8.1 关机重启命令 (1)shutdown [选项] 时间 ①选项 -c:取消前一个关机命令 -h:关机 -r:重启 ②应用举例:#shutdown –h now.shu ...
- quartz集群分布式(并发)部署解决方案-Spring
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
- 在IIS中实现JSP
在IIS中实现JSP IIS本身是不可以支持JSP页面的,但是随着JAVA技术的广泛应用,越来越多的网站采用JAVA技术编写程序,我们根据一些资料和自己的实践经验总结了以下两种JAVA应用服务器 ...
- ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程
环境:OS X 10.10.5 + JDK 1.8 步骤: 一.下载ELK的三大组件 Elasticsearch下载地址: https://www.elastic.co/downloads/elast ...
- js(jQuery)获取时间的方法及常用时间类
获取JavaScript 的时间使用内置的Date函数完成 var mydate = new Date();mydate.getYear(); //获取当前年份(2位)mydate.getFullYe ...
- Eclipse JEE 安装JBPM 4.4 GPD
回顾往昔,发现自己好久没写博客了,想想以前自己是多么热衷于写博客分享,虽然分享的都是比较基础的东西,但每每看到访问量不断增加的时候内心还是爽爽的. 时间过的真的很快,离开学校和团队已经一个月了.来到了 ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- 基于SoCkit的opencl实验1-基础例程
基于SoCkit的opencl实验1-基础例程 准备软硬件 Arrow SoCkit Board 4GB or larger microSD Card Quartus II v14.1 SoCEDS ...