• 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 }
  • 相关阅读:
    原创 | 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
    vavr:让你像写Scala一样写Java
    Java黑科技之源:JVMTI完全解读
    JVM 源码解读之 CMS 何时会进行 Full GC
    MySQL 如何优化大分页查询?
    025:为什么需要将Logger对象声明为private static final类型的
    酷家乐一面二面
    趋势科技面试
    生活就是好好经历,无问西东----三月份总结
    30号快手笔试(三道ac两道半)————-历史上最大的网络失误orz
  • 原文地址:https://www.cnblogs.com/zlslch/p/6175628.html
Copyright © 2020-2023  润新知