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,如需转载请自行联系原作者

相关文章
|
1月前
|
Java API
掌握Java 8 Stream API的艺术:详解流式编程(三)
掌握Java 8 Stream API的艺术:详解流式编程
16 2
|
1月前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS中的块是什么?
【4月更文挑战第9天】【Hadoop】HDFS中的块是什么?
|
1月前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS仅支持独占写入?
【4月更文挑战第9天】【Hadoop】HDFS仅支持独占写入?
|
1月前
|
存储 分布式计算 Hadoop
【Hadoop】区分HDFS块和输入拆分
【4月更文挑战第9天】【Hadoop】区分HDFS块和输入拆分
|
1月前
|
存储 分布式计算 Hadoop
Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 01】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)
43 3
|
1月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
77 2
|
2天前
|
存储 分布式计算 运维
Hadoop的HDFS问题
【5月更文挑战第5天】Hadoop的HDFS问题
10 3
|
17天前
|
存储 SQL Java
Java8 Stream API 详解:流式编程进行数据处理
Java8 Stream API 详解:流式编程进行数据处理
|
28天前
|
分布式计算 Hadoop 测试技术
Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
【4月更文挑战第5天】Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
46 8
|
28天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
54 9