Hadoop HDFS编程 API入门系列之HdfsUtil版本2(七)

简介:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码

复制代码
  1 import org.junit.Before;
  2 import org.junit.Test;
  3 
  4 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs1;
  5 
  6 import java.io.FileInputStream;
  7 import java.io.FileNotFoundException;
  8 import java.io.FileOutputStream;
  9 import java.io.IOException;
 10 import java.net.URI;
 11 
 12 import org.apache.commons.io.IOUtils;
 13 import org.apache.hadoop.conf.Configuration;
 14 import org.apache.hadoop.fs.FSDataInputStream;
 15 import org.apache.hadoop.fs.FSDataOutputStream;
 16 import org.apache.hadoop.fs.FileStatus;
 17 import org.apache.hadoop.fs.FileSystem;
 18 import org.apache.hadoop.fs.LocatedFileStatus;
 19 import org.apache.hadoop.fs.Path;
 20 import org.apache.hadoop.fs.RemoteIterator;
 21 import org.junit.Before;
 22 import org.junit.Test;
 23 
 24 public class HdfsUtil {
 25     
 26     FileSystem fs = null;
 27 
 28     
 29     @Before//@Before是在所拦截单元测试方法执行之前执行一段逻辑,读艾特Before
 30     public void init() throws Exception{
 31         
 32         //读取classpath下的xxx-site.xml 配置文件,并解析其内容,封装到conf对象中
 33         Configuration conf = new Configuration();
 34         
 35         //也可以在代码中对conf中的配置信息进行手动设置,会覆盖掉配置文件中的读取的值
 36         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
 37         
 38         //根据配置信息,去获取一个具体文件系统的客户端操作实例对象
 39         fs = FileSystem.get(new URI("hdfs://HadoopMaster:9000/"),conf,"hadoop");
 40         
 41         
 42     }
 43     
 44     
 45     
 46     /**
 47      * 上传文件,比较底层的写法
 48      * 
 49      * @throws Exception
 50      */
 51     @Test//@Test是测试方法提示符,一般与@Before组合使用
 52     public void upload() throws Exception {
 53 
 54         Configuration conf = new Configuration();
 55         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
 56         
 57         FileSystem fs = FileSystem.get(conf);
 58         
 59         Path dst = new Path("hdfs://HadoopMaster:9000/aa/qingshu.txt");
 60         
 61         FSDataOutputStream os = fs.create(dst);
 62         
 63         FileInputStream is = new FileInputStream("c:/qingshu.txt");
 64         
 65         IOUtils.copy(is, os);
 66         
 67 
 68     }
 69 
 70     /**
 71      * 上传文件,封装好的写法
 72      * @throws Exception
 73      * @throws IOException
 74      */
 75     @Test//@Test是测试方法提示符,一般与@Before组合使用
 76     public void upload2() throws Exception, IOException{
 77         
 78         fs.copyFromLocalFile(new Path("c:/qingshu.txt"), new Path("hdfs://HadoopMaster:9000/aaa/bbb/ccc/qingshu2.txt"));
 79         
 80     }
 81     
 82     
 83     /**
 84      * 下载文件
 85      * @throws Exception 
 86      * @throws IllegalArgumentException 
 87      */
 88     @Test//@Test是测试方法提示符,一般与@Before组合使用
 89     public void download() throws Exception {
 90         
 91         fs.copyToLocalFile(new Path("hdfs://HadoopMaster:9000/aa/qingshu2.txt"), new Path("c:/qingshu2.txt"));
 92 
 93     }
 94 
 95     /**
 96      * 查看文件信息
 97      * @throws IOException 
 98      * @throws IllegalArgumentException 
 99      * @throws FileNotFoundException 
100      * 
101      */
102     @Test//@Test是测试方法提示符,一般与@Before组合使用
103     public void listFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
104 
105         // listFiles列出的是文件信息,而且提供递归遍历
106         RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
107         
108         while(files.hasNext()){
109             
110             LocatedFileStatus file = files.next();
111             Path filePath = file.getPath();
112             String fileName = filePath.getName();
113             System.out.println(fileName);
114             
115         }
116         
117         System.out.println("---------------------------------");
118         
119         //listStatus 可以列出文件和文件夹的信息,但是不提供自带的递归遍历
120         FileStatus[] listStatus = fs.listStatus(new Path("/"));
121         for(FileStatus status: listStatus){
122             
123             String name = status.getPath().getName();
124             System.out.println(name + (status.isDirectory()?" is dir":" is file"));
125             
126         }
127         
128     }
129 
130     /**
131      * 创建文件夹
132      * @throws Exception 
133      * @throws IllegalArgumentException 
134      */
135     @Test//@Test是测试方法提示符,一般与@Before组合使用
136     public void mkdir() throws IllegalArgumentException, Exception {
137 
138         fs.mkdirs(new Path("/aaa/bbb/ccc"));
139         
140         
141     }
142 
143     /**
144      * 删除文件或文件夹
145      * @throws IOException 
146      * @throws IllegalArgumentException 
147      */
148     @Test//@Test是测试方法提示符,一般与@Before组合使用
149     public void rm() throws IllegalArgumentException, IOException {
150 
151         fs.delete(new Path("/aa"), true);
152         
153     }
154 
155     
156     public static void main(String[] args) throws Exception {
157 
158         Configuration conf = new Configuration();
159         conf.set("fs.defaultFS", "hdfs://HadoopMaster:9000/");
160         
161         FileSystem fs = FileSystem.get(conf);
162         
163         FSDataInputStream is = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz"));
164         
165         FileOutputStream os = new FileOutputStream("c:/jdk7.tgz");
166         
167         IOUtils.copy(is, os);
168     }
169     
170     
171     
172 }
复制代码

 

 

 

 

 

 

 

 

 

 

复制代码
 1 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs1;
 2 
 3 import java.io.IOException;
 4 import java.net.URI;
 5 
 6 
 7 import org.apache.hadoop.conf.Configuration;
 8 import org.apache.hadoop.fs.FileSystem;
 9 import org.apache.hadoop.fs.Path;
10 
11 public class HdfsUtilHA {
12     public static void main(String[] args) throws Exception{
13         Configuration conf = new Configuration();
14         FileSystem fs = FileSystem.get(new URI("hdfs://HadoopMaster/9000"), conf, "hadoop");
15         fs.copyFromLocalFile(new Path("C:/test.txt"), new Path("hdfs://HadoopMaster/9000"));
16     }
17 }
复制代码

 


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6175628.html,如需转载请自行联系原作者

相关文章
|
2月前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
81 7
|
4月前
|
前端开发 JavaScript 安全
入门Vue+.NET 8 Web Api记录(一)
入门Vue+.NET 8 Web Api记录(一)
169 4
|
4月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
131 0
|
2月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
3月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
2月前
|
IDE API 定位技术
Python--API编程:IP地址翻译成实际的物理地址
Python--API编程:IP地址翻译成实际的物理地址
65 0
|
4月前
|
JavaScript API 开发者
RESTful API 设计的传奇征程:突破常规,拥抱最佳实践,铸就编程巅峰!
【8月更文挑战第7天】希望通过以上的探讨,能让您对 RESTful API 设计有更深入的理解和认识。
55 5
|
4月前
|
开发者
告别繁琐代码,JSF标签库带你走进高效开发的新时代!
【8月更文挑战第31天】JSF(JavaServer Faces)标准标签库为页面开发提供了大量组件标签,如`&lt;h:inputText&gt;`、`&lt;h:dataTable&gt;`等,简化代码、提升效率并确保稳定性。本文通过示例展示如何使用这些标签实现常见功能,如创建登录表单和展示数据列表,帮助开发者更高效地进行Web应用开发。
49 0
|
4月前
|
前端开发 API 开发者
【React状态管理新思路】Context API入门:从零开始摆脱props钻孔的优雅之道,全面解析与实战案例分享!
【8月更文挑战第31天】React 的 Context API 有效解决了多级组件间状态传递的 &quot;props 钻孔&quot; 问题,使代码更简洁、易维护。本文通过电子商务网站登录状态管理案例,详细介绍了 Context API 的使用方法,包括创建、提供及消费 Context,以及处理多个 Context 的场景,适合各水平开发者学习与应用,提高开发效率和代码质量。
47 0
|
4月前
|
JSON API 数据库
神秘编程力量来袭!Rails 究竟隐藏着怎样的魔力,能构建出强大的 RESTful API?快来一探究竟!
【8月更文挑战第31天】《构建 RESTful API:使用 Rails 进行服务端开发》介绍了如何利用 Ruby on Rails 框架高效构建可扩展的 RESTful API。Rails 采用“约定优于配置”,简化开发流程,通过示例展示了路由定义、控制器设计及模型层交互等内容,帮助开发者快速搭建稳定可靠的服务端。无论小型项目还是大型应用,Rails 均能提供强大支持,提升开发效率。
34 0