Hadoop-常用操作

使用URL的方式读取一个文件内容,需要设置一个handler工厂,这个工厂只能设置一次 
  1. static {  
  2.     URL.setURLStreamHandlerFactory( new FsUrlStreamHandlerFactory() );  
  3. }  
  4.   
  5. public void test1() throws IOException {  
  6.     URL u = new URL("hdfs://IP:8020/test");  
  7.     InputStream is = u.openStream();  
  8.     BufferedReader br = new BufferedReader(new InputStreamReader(is));  
  9.     String line = null;  
  10.       
  11.     while( (line=br.readLine()) != null ) {  
  12.         System.out.println(line);  
  13.     }  
  14.     br.close();  
  15. }  



使用hadoop的FileSystem读取文件 
  1. public void test2() throws IOException {  
  2.     String url = "hdfs://IP:8020/test-data/hello.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     InputStream is = null;  
  6.     is = fs.open(new Path(url));  
  7.     IOUtils.copyBytes(is, System.out, 4096false);   
  8. }  


将一个本地文件拷贝到hadoop文件系统中 
  1. public void test3() throws IOException {  
  2.     String src = "C:\\test.txt";  
  3.     String dest = "hdfs://IP:8020/test-data/hello.txt";  
  4.     InputStream is = new BufferedInputStream(new FileInputStream(src));  
  5.     Configuration config = new Configuration();  
  6.     FileSystem fs = FileSystem.get(URI.create(dest), config);  
  7.     OutputStream os = fs.create(new Path(dest), new Progressable() {  
  8.         @Override  
  9.         public void progress() {  
  10.             System.out.print(".");  
  11.         }  
  12.     });  
  13.     IOUtils.copyBytes(is, os, 4096true);  
  14.     System.out.println("ok~");  
  15. }  


列出文件属性 
  1. public void test4() throws IOException {  
  2.     String url = "hdfs:/IP:8020/test-data/hello.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     FileStatus status = fs.getFileStatus(new Path(url));  
  6.     System.out.println("AccessTime : "+status.getAccessTime());  
  7.     System.out.println("BlockSize : "+status.getBlockSize());  
  8.     System.out.println("group : "+status.getGroup());  
  9.     System.out.println("len : "+status.getLen());  
  10.     System.out.println("ModificationTime : "+status.getModificationTime());  
  11.     System.out.println("owner : "+status.getOwner());  
  12.     System.out.println("is dir ? : "+status.isDir());  
  13.     System.out.println("path : "+status.getPath());  
  14.     System.out.println("permission : "+status.getPermission());  
  15.     System.out.println("replication : "+status.getReplication());  
  16. }  



通过路径过滤器查找文件 
  1.     public void test5() throws IOException {  
  2.         String url = "hdfs://IP:8020/test-data/*";  
  3.         Configuration config = new Configuration();  
  4.         FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.           
  6.         FileStatus[] status = fs.globStatus( new Path(url), new RegexPathFilter("^.*hello.*$") );  
  7.         for(FileStatus s:status) {  
  8.             System.out.println(s.getPath().toString());  
  9.         }  
  10.         System.out.println("filter execute ok");  
  11.     }  
  12. //路径正则过滤器类  
  13.     public class RegexPathFilter implements PathFilter {  
  14.         private final String regex;  
  15.           
  16.         public RegexPathFilter(String regex) {  
  17.             this.regex = regex;  
  18.         }  
  19.           
  20.         @Override  
  21.         public boolean accept(Path path) {  
  22.             return path.toString().matches(regex);  
  23.         }  
  24.     }  


删除,支持递归删除 
  1. public void delete() throws IOException {  
  2.     String url = "hdfs://IP:8020/test-data/xxx.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     fs.delete(new Path(url), false);  
  6.     System.out.println("delete ok");  
  7. }  


重命名 
  1. public void test5_rename() throws IOException {  
  2.     String url = "hdfs://IP:8020/test-data/xx.txt";  
  3.     String url2 = "hdfs://IP:8020/test-data/modify-xx.txt";  
  4.     Configuration config = new Configuration();  
  5.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  6.     boolean isok = fs.rename(new Path(url), new Path(url2));  
  7.     System.out.println("complete : "+isok);  
  8. }  



检查文件是否存在 
  1. public void exist() throws IOException {  
  2.     String url = "hdfs:/IP:8020/test-data/modify-xx.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     boolean isExist = fs.exists( new Path(url));  
  6.     System.out.println("exist ? "+isExist);  
  7. }  



查找某个文件在HDFS中的位置 
  1. public void test5_location() throws IOException {  
  2.     String url = "hdfs://IP:8020/test-data/hello.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     FileStatus status = fs.getFileStatus(new Path(url));          
  6.     BlockLocation[] bls = fs.getFileBlockLocations(status, 0, status.getLen());  
  7.     for(int i=0;i<bls.length;i++) {  
  8.         String[] hosts = bls[i].getHosts();  
  9.         System.out.println("block :"+i+"\tlocation : "+hosts[i]);  
  10.     }  
  11. }  


获取HDFS集群上所有节点的名称 
  1. public void test5_allnode() throws IOException {  
  2.     String url2 = "hdfs://IP:8020/test-data/modify-xx.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url2),config);  
  5.     DistributedFileSystem hdfs = (DistributedFileSystem)fs;  
  6.     DatanodeInfo[] status = hdfs.getDataNodeStats();  
  7.     for(DatanodeInfo d:status) {  
  8.         System.out.println(d.getHostName());  
  9.     }  



创建本地和远端的checksum 
  1. public void localCreateChecksum() throws IOException {  
  2.     String url = "file:///C:/zzzz/abc.txt";  
  3.     Configuration config = new Configuration();  
  4.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  5.     ChecksumFileSystem cfs = new LocalFileSystem(fs);  
  6.     FSDataOutputStream fsdos = cfs.create(new Path(url));  
  7.     fsdos.write("hehe".getBytes());  
  8.     fsdos.flush();  
  9.     fsdos.close();  
  10. }  
  11.   
  12.   
  13. public void distributeCreateChecksum() throws IOException {  
  14.     String url = "hdfs://IP:8020/test/abc.txt";  
  15.     Configuration config = new Configuration();  
  16.     FileSystem fs = FileSystem.get(URI.create(url),config);  
  17.     ChecksumFileSystem cfs = new LocalFileSystem(fs);  
  18.     FSDataOutputStream fsdos = cfs.create(new Path(url));  
  19.     fsdos.write("hehe~".getBytes());  
  20.     fsdos.flush();  
  21.     fsdos.close();  
  22. }  



压缩和解压缩,压缩池 
  1. public void compress() throws IOException {  
  2.     FileInputStream fis = new FileInputStream("C:\\zzzz\\xx.txt");  
  3.     GzipCodec gc = new GzipCodec();  
  4.     String url = "hdfs://IP:8020/test/compress.txt";  
  5.     Configuration config = new Configuration();  
  6.     FileSystem fs = FileSystem.get(URI.create(url), config);   
  7.     OutputStream fdos = fs.create(new Path(url));  
  8.     byte[] buf = new byte[10240];  
  9.     int len = fis.read(buf);  
  10.     System.out.println("content:");  
  11.     System.out.println( new String(buf,0,len) );  
  12.     CompressionOutputStream cos = gc.createOutputStream(fdos);  
  13.     cos.write(buf,0,len);  
  14.     cos.flush();  
  15.     cos.close();  
  16. }  
  17.   
  18. public void decompress() throws IOException {  
  19.     String url = "hdfs://IP:8020/test/compress.gz";  
  20.     Configuration config = new Configuration();  
  21.     FileSystem fs = FileSystem.get(URI.create(url), config);   
  22.     GzipCodec gc = new GzipCodec();  
  23.     FSDataInputStream fdis = fs.open(new Path(url));  
  24.     CompressionInputStream cis = gc.createInputStream(fdis);  
  25.     IOUtils.copy(cis, System.out);  
  26. }  
  27.   
  28. public void comprssPool() throws IOException {  
  29.     FileInputStream fis = new FileInputStream("C:\\zzzz\\abc.txt");  
  30.     GzipCodec gc = new GzipCodec();  
  31.     FileOutputStream fdos = new FileOutputStream("C:/zzzz/pool.txt");     
  32.     Compressor compressor = CodecPool.getCompressor(gc);  
  33.     CompressionOutputStream cos = gc.createOutputStream(fdos, compressor);  
  34.     IOUtils.copy(fis, cos);  
  35.     CodecPool.returnCompressor(compressor);  
  36.       
  37. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值