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的使用的更多相关文章

  1. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  2. HDFS的Java API

    HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...

  3. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  4. Hadoop(五):HDFS的JAVA API基本操作

    HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...

  5. Elasticsearch中JAVA API的使用

    1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...

  6. 使用HDFS客户端java api读取hadoop集群上的信息

    本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupI ...

  7. HDFS的java api操作

    hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...

  8. IDEA 创建HDFS项目 JAVA api

    1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成 ...

  9. Sample: Write And Read data from HDFS with java API

    HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...

随机推荐

  1. 从零自学Hadoop(03):Linux准备上

    阅读目录 序 检查列表 常用Linux命令 搭建环境 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sou ...

  2. 利用varnish做Discuz论坛的缓存服务器

    实验背景:公司有一台BBS服务器,用的是LNMP的架构搭建的.正好手头有一台空闲的虚拟机,于是想着给BBS前端加一台缓存服务器.于是选定了varnish,搜了很多教程,跌跌撞撞的完成了配置.这其中很多 ...

  3. Kibana+Logstash+Elasticsearch 日志查询系统

    搭建该平台的目的就是为了运维.研发很方便的进行日志的查询.Kibana一个免费的web壳:Logstash集成各种收集日志插件,还是一个比较优秀的正则切割日志工具:Elasticsearch一个开源的 ...

  4. 【读书笔记《Bootstrap 实战》】5.电子商务网站

    构建了公司网站之后,接下来就可以考虑设计一个在线商店了. 此次的设计以上一章的设计为基础, 只是添加了一个包含如下元素的新页面: □ 包含商品小图.标题和说明的产品网格: □ 位于左侧的变懒,用于按类 ...

  5. Microsoft-Office-Professional-Plus-2007

    Microsoft-Office-Professional-Plus-2007password:(也有自带的)DP37G-8BBDM-9Y4BW-WT2K8-2WRMJ P64QH-V3F2K-RXY ...

  6. SQL编程

    变量: 变量是一块内存空间的表示, 数组是一连串空间 如何定义一个变量 第一套变量定义  整型 Declare @num int Set @num=10 Print @num 第二套变量定义   字符 ...

  7. Session跟SessionFactory的线程安全与非安全

    SessionFactory负责创建session,SessionFactory是线程安全的,多个并发线程可以同时访问一个 SessionFactory 并从中获取Session实例. (Sessio ...

  8. 十连测Day1 题解

    A. 奥义商店 有一个商店,n个物品,每个物品有一个价格和一种颜色. 有m个操作,操作有两种,一种是修改一个位置的价格,另一种是购买,每次购买指定一个公差d和一个位置k,找到包含这个位置k公差为d的同 ...

  9. php结合redis实现高并发下的抢购、秒杀功能

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...

  10. VS 常用高效 快捷键

    强迫智能感知:Ctrl+J.智能感知是Visual Studio最大的亮点之一,选择Visual Studio恐怕不会没有这个原因. 2 撤销:Ctrl+Z.除非你是天才,那么这个快捷键也是最常用的. ...