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. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  2. W3School-CSS 伪类 (Pseudo-classes) 实例

    CSS 伪类 (Pseudo-classes) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) ...

  3. SQL2005/2008 无法连接错误

    SQL2005/2008 .或者是localhost可以访问,但是127.0.0.1或者IP无法访问 打开[SQL Server 配置管理器](如果是MSSQL2005,在运行中输入SQLServer ...

  4. WEB开发中的字符集和编码

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  5. Linux 下编译openjdk

    操作系统ubuntu14.04 openjdk版本 7u4 openjdk7u4可以在https://jdk7.java.net/source.html下载   一.构建编译环境 sudo apt-g ...

  6. 前端构建工具gulp使用

    前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...

  7. 【2016-10-31】【坚持学习】【Day16】【MongoDB】【入门 -概念】

    MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术 ...

  8. Shell(C++实现,CodeBlocks+GCC编译)

    程序效果: 只实现了login .cd .ls .cat 四个命令.而且只能在 Windows 下运行. 代码: //main.cpp 1 #include <iostream> #inc ...

  9. [tem]树状数组

    通过差分可以玩区间: bi=ai-a(i-1) 查询时考虑位置对答案的贡献 推导一下 #include<iostream> #include<cstdio> #include& ...

  10. java多线程系类:JUC原子类:05之AtomicIntegerFieldUpdater原子类

    概要 AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater这3个修改类的成员的原子类型的原理和用法 ...