Hadoop HDFS文件系统通过java FileSystem 实现上传下载等

package linlintest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;

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.Path;
import org.apache.hadoop.io.IOUtils;

public class HdfsFileSystem {

     public static void main(String[] args) throws Exception  {
         //String uri="hdfs://LL-167:8020/";   //hdfs 地址
         // String remote="hdfs://LL-167:8020/lin/in1/1.txt"; //hdfs上的路径
         String uri="hdfs://192.168.0.151:8020/";   //hdfs 地址
         String local="C:/Users/Administrator/Desktop/a.txt";  //本地路径
         String remote="hdfs://192.168.0.151:8020/Workspace/houlinlin";
         Configuration conf = new Configuration();

         //cat(conf ,uri,"hdfs://LL-167:8020/lin/in1/1.txt");
         //download(conf ,uri,remote,local);
        //  delete(conf ,uri,"hdfs://192.168.0.173:8020/Workspace/houlinlin");
         // markDir(conf ,uri,"hdfs://192.168.0.151:8020/Workspace/houlinlin/file/apply/2014/8a8380c7459dd8b90145a1fafb500235");

        //  checkDir(uri,"d:/file");
        // getFile(conf ,uri,"","hdfs://192.168.0.151:8020/Workspace/houlinlin/a.txt");
         copyFile(conf,uri,"C:/Users/Administrator/Desktop/8a8380c745d05d370145d06719aa3c89.txt","hdfs://192.168.0.151:8020/Workspace/houlinlin/file/apply/2014/8a8380c7459dd8b90145a1fafb500235");
       //   ls(conf ,"hdfs://fulonghadoop","hdfs://fulonghadoop/");
    }
    /**
     * 上传文件
     * @param conf
     * @param local
     * @param remote
     * @throws IOException
     */
    public static void copyFile(Configuration conf , String uri , String local, String remote) throws IOException {
        FileSystem fs = FileSystem.get(URI.create(uri), conf);
        fs.copyFromLocalFile(new Path(local), new Path(remote));
        System.out.println("copy from: " + local + " to " + remote);
        fs.close();
    }

    /**
     * 获取hdfs上文件流
     * @param conf
     * @param uri
     * @param local
     * @param remote
     * @throws IOException
     */
    public static  void getFileStream(Configuration conf , String uri , String local, String remote) throws IOException{
        FileSystem fs = FileSystem.get(URI.create(uri), conf);
        Path path= new Path(remote);
        FSDataInputStream in = fs.open(path);//获取文件流
        FileOutputStream fos = new FileOutputStream("C:/Users/Administrator/Desktop/b.txt");//输出流
        int ch = 0;
        while((ch=in.read()) != -1){
            fos.write(ch);
        }
        System.out.println("-----");
        in.close();
        fos.close();
    }

    /**
     * 创建文件夹
     * @param conf
     * @param uri
     * @param remoteFile
     * @throws IOException
     */
    public static void markDir(Configuration conf , String uri , String remoteFile ) throws IOException{
        FileSystem fs = FileSystem.get(URI.create(uri), conf);
        Path path = new Path(remoteFile);

        fs.mkdirs(path);
        System.out.println("创建文件夹"+remoteFile);

    }
    /**
     * 查看文件
     * @param conf
     * @param uri
     * @param remoteFile
     * @throws IOException
     */
     public static void cat(Configuration conf , String uri ,String remoteFile) throws IOException {
            Path path = new Path(remoteFile);
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            FSDataInputStream fsdis = null;
            System.out.println("cat: " + remoteFile);
            try {
                fsdis = fs.open(path);
                IOUtils.copyBytes(fsdis, System.out, 4096, false);
            } finally {
                IOUtils.closeStream(fsdis);
                fs.close();
            }
    }
     /**
      * 下载 hdfs上的文件
      * @param conf
      * @param uri
      * @param remote
      * @param local
      * @throws IOException
      */
     public static void download(Configuration conf , String uri ,String remote, String local) throws IOException {
            Path path = new Path(remote);
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            fs.copyToLocalFile(path, new Path(local));
            System.out.println("download: from" + remote + " to " + local);
            fs.close();
    }
     /**
      * 删除文件或者文件夹
      * @param conf
      * @param uri
      * @param filePath
      * @throws IOException
      */
     public static void delete(Configuration conf , String uri,String filePath) throws IOException {
            Path path = new Path(filePath);
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            fs.deleteOnExit(path);
            System.out.println("Delete: " + filePath);
            fs.close();
    }
     /**
      * 查看目录下面的文件
      * @param conf
      * @param uri
      * @param folder
      * @throws IOException
      */
     public static  void ls(Configuration conf , String uri , String folder) throws IOException {
            Path path = new Path(folder);
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            FileStatus[] list = fs.listStatus(path);
            System.out.println("ls: " + folder);
            System.out.println("==========================================================");
            for (FileStatus f : list) {
                System.out.printf("name: %s, folder: %s, size: %d\n", f.getPath(),f.isDirectory() , f.getLen());
            }
            System.out
                    .println("==========================================================");
            fs.close();
    }

        /**
         *
         * @param parentName 绝对路径地址
         * @throws Exception
         */
        public static void checkDir(String uri,String parentName)    throws Exception{
            //D:\file
            Configuration conf = new Configuration();
            File file = new File(parentName);
            boolean flag = true;
            while (flag)    {
                //查出parentName下的所有文件
                File[] fileNames = file.listFiles(new FileFilter());
                if(fileNames != null)    {
                    for (int i = 0; i < fileNames.length; i++) {
                        File f = fileNames[i];
                        //System.out.println("parent directory:"+f.getParent()+",file name:"+f.getName());
                        System.out.println("parent directory:"+f.getParent().replace("\\", "/").substring(2)+",file name:"+f.getName());
                        String remoteFolrd= "hdfs://192.168.0.173:8020/Workspace/houlinlin"+f.getParent().replace("\\", "/").substring(2);
                        markDir(conf ,uri,remoteFolrd);
                         copyFile(conf ,uri,f.getParent()+"\\"+f.getName(),remoteFolrd);
                    }
                }
                //查出parentName下的所有目录
                File[] directories = file.listFiles(new DirectortyFilter());
                if(directories != null)    {
                    for (int i = 0; i < directories.length; i++) {
                        File dir = directories[i];
                        //绝对路径
                        String path =  dir.getAbsolutePath();
                        //递归
                        checkDir(uri,path);
                    }
                }
                flag = false;
            }
        }

}
时间: 2024-11-05 15:51:19

Hadoop HDFS文件系统通过java FileSystem 实现上传下载等的相关文章

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

fastDFS与java整合文件上传下载

准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactI

Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)

Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme://authority/path.对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file.其中scheme和aut

Java实现FTP上传下载功能

Java FTP客户端工具包很多,在此我选用的Apache的FTPClient.这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包,官方文档列举如下: 1.支持网络协议如下: FTP.NNTP. SMTP.POP3.Telnet.TFTP.Finger.Whois.rexec/rcmd/rlogin.Time (rdate) and Daytime.Echo.

java实现ftp上传下载

代码如下 <span style="font-size:18px;">import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream

Java中文件上传下载 --使用Minio

Minio模板类: @RequiredArgsConstructorpublic class MinioTemplate implements InitializingBean { private final String endpoint; private final String accessKey; private final String secretKey; private MinioClient client; /** * 创建bucket * * @param bucketName

JAVA实现WEBSERVICE 上传下载

因公司新项目决定使用webservice与其它项目做交互,于是开始了webservice之旅.    初入webservice的时候第一个接触的工具叫axis2,网上有着大量的简单案例.功能很强大,代码自动生成,能传递各种类型的数据.但是考虑到整合入公司项目的问题,决定去找一个不是自动生成手写的webservice.于是看到了关于JWS相关的文章,但是在使用JWS(java jdk自带)的时候难以实现对复杂参数的传递.于是想将文件读入后将其byte数组转换成String.以String的方式来传

Java 利用FTP上传,下载文件,遍历文件目录

Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK1.7 ftpClient = new FtpClinet() ftpClient = FtpClient.create(ip) ftpclient.login(user,password) ftpclient.login(user,null,password) ftpclient.binary()

JavaWeb实现文件上传下载功能实例解析 (好用)

转: 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上