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. 流式数据访问,一次写入(现支 ...
随机推荐
- 不好的MySQL过程编写习惯
刚才为了测试一个东西,写了个存储过程: delimiter $$ drop procedure if exists sp_test$$ create procedure sp_test() begin ...
- charles 抓取eclipse中的请求
charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...
- OpenStack 通用设计思路 - 每天5分钟玩转 OpenStack(25)
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...
- Linux下java进程CPU占用率高分析方法
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...
- 测试环境搭建心得 vs2008+SQL2008 PHP+APACHE+mysql Team Foundation Server2013
大四即将结束,大学的最后一个假期,找到一份实习工作,担任测试工程师.在过年前的最后一周入职,干了一周的活儿.主要工作就是搭建测试环境. VMware 主要熟悉VMware软件,装系统基本都没什么问题. ...
- 洛谷P1415 拆分数列[序列DP 状态 打印]
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- 第1章 重构,第一个案例(3):运用多态取代switch
3. 运用多态取代与价格相关的条件逻辑 3.1 switch和“常客积分”代码的再次搬迁 (1)switch:最好不要在另一个对象的属性上运用switch语句 switch(getMovie().ge ...
- hbase-site.xml中HBASE_CLASSPATH 的设置
http://www.dataguru.cn/thread-95064-1-1.html
- AI方向
普通程序员如何转向AI方向 眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 ...