zoukankan      html  css  js  c++  java
  • hadoop 操作 hdfs

     package com.picc.test;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.net.URL;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
    import org.apache.hadoop.fs.Path;
    
    public class UrlCat {
       static{
           URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
       }
       public static void main(String[] args) {
           InputStream in =null;
            try {//new FileInputStream("/home/liucheng/file/student.txt");
                in=  new URL("hdfs://localhost:9000/user/liucheng/input/student.txt").openStream();
            }  catch (IOException e) {
                e.printStackTrace();
            }
            BufferedReader read = new BufferedReader(new InputStreamReader(in));
            String line=null;
            try {
                while((line=read.readLine())!=null){
                    System.out.println("result:"+line.trim());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                read.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        run("hdfs://localhost:9000/user/liucheng/input/student.txt");
       }
       public static void run(String hdfs){
           Configuration conf = new Configuration();
           InputStream in =null;
            try {
              FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
              in = fs.open(new Path(hdfs));
              BufferedReader read = new BufferedReader(new InputStreamReader(in));
                String line=null;
                try {
                    while((line=read.readLine())!=null){
                        System.out.println("result:"+line.trim());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
       }
    }
    
    

    示例是读取hdfs 的Input 文件夹下的student.txt 文件。示例。
    java 操作 hdfs 
     package com.picc.test;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.net.URL;
    import java.util.Arrays;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.FileUtil;
    import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
    import org.apache.hadoop.fs.Path;
    
    public class UrlCat {
       static{
           URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
       }
       
       public static void main(String[] args) {
        
         run("hdfs://localhost:9000/user/liucheng/input/file01.txt");
        //doubleCat("hdfs://localhost:9000/user/liucheng/input/student.txt");
        //   statusTest("hdfs://localhost:9000/user/liucheng/input");
       }
       public static void run(String hdfs){
           Configuration conf = new Configuration();
           InputStream in =null;
            try {
              FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
              in = fs.open(new Path(hdfs));
              BufferedReader read = new BufferedReader(new InputStreamReader(in));
                String line=null;
                try {
                    while((line=read.readLine())!=null){
                        System.out.println("result:"+line.trim());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
       }
       //FSDataInputStream extents DataInputStream extents InputStream
       /**
        *  其实doubleCat 和 getInputStreamtoText 方法需要放到一起
        *  在有异常时,把位置保存到一个properties文件中
        * @param hdfs
        */
       public static void doubleCat(String hdfs){
           Configuration conf = new Configuration();
           FSDataInputStream fsdis =null;
           try {
            FileSystem fs = FileSystem.get(URI.create(hdfs),conf);
            fsdis= fs.open(new Path(hdfs));
            long rs = fsdis.skip(1000);//跳过1000个位置
            fsdis.seek(rs);//查找rs的位子
            String result = getInputStreamtoText(fsdis);
            System.out.println("result:"+result);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(fsdis!=null){
                try {
                    fsdis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
       }
       /**
        * inputStream to Text
        * @param in
        * @return
        */
       public static String getInputStreamtoText(InputStream in ){
           BufferedReader read = new BufferedReader(new InputStreamReader(in));
            String line=null;
            StringBuffer result=new StringBuffer();
            try {
                while((line=read.readLine())!=null){
                //    System.out.println("result:"+line.trim());
                    String lineSeparator =System.getProperty("line.separator");
                    result.append(line).append(lineSeparator);
                    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result.toString();
       }
       public static void statusTest(String url){
           Configuration conf = new Configuration();
         try {
            FileSystem fs =   FileSystem.get(URI.create(url), conf);
            Path [] paths = new Path[url.length()];
            for(int i=0;i<paths.length;i++){
    //            paths[i]=new Path[String.url];
                FileStatus [] filestatus = fs.listStatus(paths[i]);
                Path [] listedPaths = FileUtil.stat2Paths(filestatus);
                for(Path p:listedPaths){
                    System.out.println(p);
                }
            }
             // /tmp/hadoop-liucheng/dfs/name/current/edits
        //    bin/mysqld
        } catch (IOException e) {
            e.printStackTrace();
        }
       }
       
    }
    
    
    



  • 相关阅读:
    Linux Shell 用法
    gdb调试用法
    grep 用法总结
    Cmake用法
    Win64/Linux 上PyMouse安装
    两道拓扑排序的问题
    hiho一下第76周《Suzhou Adventure》
    这类问题需要利用二进制的特殊性
    这种题应该诸位处理
    两道人数多,课程少,query多的题
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218275.html
Copyright © 2011-2022 走看看