• HDFS API操作


    package test;
    import org.apache.hadoop.fs.*;
    import org.apache.commons.io.IOUtils;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    
    import org.apache.hadoop.conf.Configuration;
    
    public class Test extends FSDataInputStream {
        private static Configuration conf ;
        static{
            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
        }
        public static void Config(){
            //配置文件
            conf= new Configuration();
            //conf.set("fs.defaultFS","hdfs://hadoop102:8020");//使用默认配置可连接成功
            conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
        }
    
        public static int ReadLine(String path) throws IOException {
            URI uri= URI.create("hdfs://hadoop102:8020/user/atguigu/txt2");
            FileSystem fs = FileSystem.get(uri,conf);
            Path file = new Path(uri);
            FSDataInputStream getIt = fs.open(file);
            BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
    
            String content;// = d.readLine(); //读取文件一行
            if((content=d.readLine())!=null){
                System.out.println(content);
            }
            //  System.out.println(content);
            d.close(); //关闭文件
            fs.close(); //关闭hdfs
            return 0;
        }
    
        public static void PrintFile() throws MalformedURLException, IOException{
            String FilePath="hdfs://hadoop102:8020/user/atguigu/txt2";//读取的为HDFS目录:hadoop dfs -ls /查看HDFS目录
            InputStream in=null;
            in=new URL(FilePath).openStream();
            IOUtils.copy(in,System.out);
    
        }
        public static void lsDir(Configuration conf,String remoteDir){
            URI uri= URI.create("hdfs://hadoop102:8020/user");
            try(FileSystem fs=FileSystem.get(uri,conf)){
                Path dirPath=new Path(uri);
                //递归获取目录下的所有文件
                RemoteIterator<LocatedFileStatus>remoteIterator=fs.listFiles(
                        dirPath,true);
                //输出每个文件的信息
                while(remoteIterator.hasNext()){
                    FileStatus s= remoteIterator.next();
                    System.out.printf("路径:"+s.getPath().toString());
                    System.out.printf("权限:"+s.getPermission().toString());
                    System.out.println("大小:"+s.getLen());
                    //返回的是时间戳,转化为时间日期格式
                    Long timeStamp=s.getModificationTime();
                    SimpleDateFormat format=new SimpleDateFormat("" +
                            "yyyy-MM-dd HH:mm:ss");
                    String date=format.format(timeStamp);
                    System.out.printf("时间:"+date);
                    System.out.println();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
        //创建文件
        public static void createFile() throws IOException {
            URI uri= URI.create("hdfs://hadoop102:8020/user/atguigu/new");
            FileSystem fs = FileSystem.get(uri,conf);
            fs.mkdirs(new Path(uri));
            fs.close();
        }
        //文件上传,注意权限问题
        public static void putFile() throws IOException {
            URI uri= URI.create("hdfs://hadoop102:8020/user/atguigu/");
            FileSystem fs = FileSystem.get(uri,conf);
            fs.copyFromLocalFile(false,false,new Path("F:\file2.txt"),new Path(uri));
            fs.close();
        }
        //文件下载 只写F:\会报错,要具体到文件
        public static void downloadFile() throws IOException {
            URI uri= URI.create("hdfs://hadoop102:8020/user/atguigu/txt2/");
            FileSystem fs = FileSystem.get(uri,conf);
            fs.copyToLocalFile(false,new Path(uri),new Path("F:\txt2.txt"),true);
            fs.close();
        }
        //文件删除
        public static void deleteFile() throws IOException {
            URI uri= URI.create("hdfs://hadoop102:8020/user/atguigu/file2.txt/");
            FileSystem fs = FileSystem.get(uri,conf);
            fs.delete(new Path(uri),false);
            fs.close();
        }
        public static void main(String[] arg) throws IOException{
            Test.Config();//配置conf
    //        Test.ReadLine("/user/hadoop/txt2");
    //        Test.PrintFile();//读取HDFS下的文件
    //        //递归读取目录下的所有文件信息
    //        lsDir(conf,"/");
    //        putFile();
    //        downloadFile();
    //        deleteFile();
            createFile();
        }
        public Test(InputStream in) {
            super(in);
        }
    }
  • 相关阅读:
    由ORACLE:ORA-28001: the password has expired(密码过期)引起ODI资料库连接失败
    由ODI初始化资料档案库(RUC)引起修改ORACLE字符集(ZHS16GBK-AL32UTF8)
    如何面对被抛弃的System.Data.OracleClient
    CS231n 2016 通关 第二章-KNN 作业分析
    CS231n 2016 通关 第二章-KNN
    CS231n 2016 通关 第一章-内容介绍
    加特征加正则
    ML 徒手系列说明
    caffe 入门实例2 如何写一个模型
    caffe 入门实例3 fine-turning
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15309406.html
Copyright © 2020-2023  润新知