hadoop: hdfs API示例

利用hdfs的api,可以实现向hdfs的文件、目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图:

为了方便操作,将常用的文件读写操作封装了一个工具类:

  1 package yjmyzz;
  2
  3 import org.apache.hadoop.conf.Configuration;
  4 import org.apache.hadoop.fs.FSDataOutputStream;
  5 import org.apache.hadoop.fs.FileSystem;
  6 import org.apache.hadoop.fs.Path;
  7 import org.apache.hadoop.io.IOUtils;
  8
  9 import java.io.ByteArrayOutputStream;
 10 import java.io.IOException;
 11 import java.io.InputStream;
 12 import java.io.OutputStream;
 13
 14 /**
 15  * Created by jimmy on 15/5/20.
 16  */
 17 public class HDFSUtil {
 18
 19
 20     private HDFSUtil() {
 21
 22     }
 23
 24     /**
 25      * 判断路径是否存在
 26      *
 27      * @param conf
 28      * @param path
 29      * @return
 30      * @throws IOException
 31      */
 32     public static boolean exits(Configuration conf, String path) throws IOException {
 33         FileSystem fs = FileSystem.get(conf);
 34         return fs.exists(new Path(path));
 35     }
 36
 37     /**
 38      * 创建文件
 39      *
 40      * @param conf
 41      * @param filePath
 42      * @param contents
 43      * @throws IOException
 44      */
 45     public static void createFile(Configuration conf, String filePath, byte[] contents) throws IOException {
 46         FileSystem fs = FileSystem.get(conf);
 47         Path path = new Path(filePath);
 48         FSDataOutputStream outputStream = fs.create(path);
 49         outputStream.write(contents);
 50         outputStream.close();
 51         fs.close();
 52     }
 53
 54     /**
 55      * 创建文件
 56      *
 57      * @param conf
 58      * @param filePath
 59      * @param fileContent
 60      * @throws IOException
 61      */
 62     public static void createFile(Configuration conf, String filePath, String fileContent) throws IOException {
 63         createFile(conf, filePath, fileContent.getBytes());
 64     }
 65
 66     /**
 67      * @param conf
 68      * @param localFilePath
 69      * @param remoteFilePath
 70      * @throws IOException
 71      */
 72     public static void copyFromLocalFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
 73         FileSystem fs = FileSystem.get(conf);
 74         Path localPath = new Path(localFilePath);
 75         Path remotePath = new Path(remoteFilePath);
 76         fs.copyFromLocalFile(true, true, localPath, remotePath);
 77         fs.close();
 78     }
 79
 80     /**
 81      * 删除目录或文件
 82      *
 83      * @param conf
 84      * @param remoteFilePath
 85      * @param recursive
 86      * @return
 87      * @throws IOException
 88      */
 89     public static boolean deleteFile(Configuration conf, String remoteFilePath, boolean recursive) throws IOException {
 90         FileSystem fs = FileSystem.get(conf);
 91         boolean result = fs.delete(new Path(remoteFilePath), recursive);
 92         fs.close();
 93         return result;
 94     }
 95
 96     /**
 97      * 删除目录或文件(如果有子目录,则级联删除)
 98      *
 99      * @param conf
100      * @param remoteFilePath
101      * @return
102      * @throws IOException
103      */
104     public static boolean deleteFile(Configuration conf, String remoteFilePath) throws IOException {
105         return deleteFile(conf, remoteFilePath, true);
106     }
107
108     /**
109      * 文件重命名
110      *
111      * @param conf
112      * @param oldFileName
113      * @param newFileName
114      * @return
115      * @throws IOException
116      */
117     public static boolean renameFile(Configuration conf, String oldFileName, String newFileName) throws IOException {
118         FileSystem fs = FileSystem.get(conf);
119         Path oldPath = new Path(oldFileName);
120         Path newPath = new Path(newFileName);
121         boolean result = fs.rename(oldPath, newPath);
122         fs.close();
123         return result;
124     }
125
126     /**
127      * 创建目录
128      *
129      * @param conf
130      * @param dirName
131      * @return
132      * @throws IOException
133      */
134     public static boolean createDirectory(Configuration conf, String dirName) throws IOException {
135         FileSystem fs = FileSystem.get(conf);
136         Path dir = new Path(dirName);
137         boolean result = fs.mkdirs(dir);
138         fs.close();
139         return result;
140     }
141
142     /**
143      * 读取文件内容
144      *
145      * @param conf
146      * @param filePath
147      * @return
148      * @throws IOException
149      */
150     public static String readFile(Configuration conf, String filePath) throws IOException {
151         String fileContent = null;
152         FileSystem fs = FileSystem.get(conf);
153         Path path = new Path(filePath);
154         InputStream inputStream = null;
155         ByteArrayOutputStream outputStream = null;
156         try {
157             inputStream = fs.open(path);
158             outputStream = new ByteArrayOutputStream(inputStream.available());
159             IOUtils.copyBytes(inputStream, outputStream, conf);
160             fileContent = outputStream.toString();
161         } finally {
162             IOUtils.closeStream(inputStream);
163             IOUtils.closeStream(outputStream);
164             fs.close();
165         }
166         return fileContent;
167     }
168 }

简单的测试了一下:

 1     @Test
 2     public void testHDFSUtil() throws IOException {
 3         Configuration conf = new Configuration();
 4         String newDir = "/test";
 5         //检测路径是否存在 测试
 6         if (HDFSUtil.exits(conf, newDir)) {
 7             System.out.println(newDir + " 已存在!");
 8         } else {
 9             //创建目录测试
10             boolean result = HDFSUtil.createDirectory(conf, newDir);
11             if (result) {
12                 System.out.println(newDir + " 创建成功!");
13             } else {
14                 System.out.println(newDir + " 创建失败!");
15             }
16         }
17         String fileContent = "Hi,hadoop. I love you";
18         String newFileName = newDir + "/myfile.txt";
19         //创建文件测试
20         HDFSUtil.createFile(conf, newFileName, fileContent);
21         //读取文件内容 测试
22         System.out.println(HDFSUtil.readFile(conf, newFileName));
23         //删除文件测试
24         //System.out.println(HDFSUtil.deleteFile(conf, newDir));
25     }

注:测试时,不要忘记了在resources目录下放置core-site.xml文件,不然IDE环境下,代码不知道去连哪里的HDFS

时间: 2025-01-18 13:43:51

hadoop: hdfs API示例的相关文章

hadoop hdfs API操作

hadoop的hdfs API的基本操作 简单的介绍 hadoop为我们提供了hdfs非常方便的shell命令(类似于Linux文件操作的命令),再者.hadoop还为我们提供hdfsAPI,使我们开发人员可以对hfds进行一些操作.如:copy文件(从本地到hdfs,从hdfs到本地).删除文件或者目录.读取文件的内容.看文件的相关信息.列出文件的所有子目录,在文件后面追加内容.(注意:hdfs不支持文件中某一行的修改,只允许追加内容到文件的后面). 首先我初始化hdfs,最后将hdfs关闭:

hadoop的API对HDFS上的文件访问

这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,大家参考使用吧 复制代码 代码如下:import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.*; import java.io.File;import ja

Hadoop HDFS Java API

[toc] Hadoop HDFS Java API 主要是Java操作HDFS的一些常用代码,下面直接给出代码: package com.uplooking.bigdata.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.io

Hadoop HDFS编程 API入门系列之HDFS_HA(五)

不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs3; import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URI; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSyst

Hadoop HDFS编程 API入门系列之简单综合版本1(四)

不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import java.net.URISyntaxException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.BlockLocation;import org.apache.hadoop.fs.FileStatus

HDFS API的Helloworld

1.源码 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; import java.io.InputStream; import java.net.URL; /**  * Example 3.1  */ public class URLCat {     static {         URL.setURLStreamHandlerFactory(new FsU

Hadoop HDFS 基础使用

目录 1.HDFS 前言 ................................................................................................................................... 1 2.HDFS 相关概念和特性 ........................................................................................

【转】Hadoop HDFS分布式环境搭建

原文地址  http://blog.sina.com.cn/s/blog_7060fb5a0101cson.html Hadoop HDFS分布式环境搭建 最近选择给大家介绍Hadoop HDFS系统,因此研究了一下如何在Linux 下配置一个HDFS Clust.小记一下,以备将来进一步研究和记忆. HDFS简介 全称 Hadoop Distributed File System, Hadoop分布式文件系统. 根据Google的GFS论文,由Doug Cutting使用JAVA开发的开源项目

HDFS API基本操作

对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作: package HdfsAPI; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; i