zoukankan      html  css  js  c++  java
  • 【原创】一个复制本地文件到Hadoop文件系统的实例

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    import org.apache.hadoop.util.Progressable;
    
    public class FileCopyWithProcess {
    
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            String localSrc = args[0];
            String dst = args[1];
            InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
            Configuration conf = new Configuration();
            FileSystem fs  =  FileSystem.get(URI.create(dst),conf);
            try {
                OutputStream out = fs.create(new Path(dst),new Progressable() {
                    @Override
                    public void progress() {
                        // TODO Auto-generated method stub
                        System.out.println(".");
                    }
                });
            IOUtils.copyBytes(in, out, 4096, true);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    上面的程序需要注意的地方是下面这行:

    FileSystem fs  =  FileSystem.get(URI.create(dst),conf);
    

    FileSystem是一个通用的文件系统API,要操作指定的文件系统,必须取得其默认工厂实例。

    默认的有几种取得FileSystem静态工厂实例方式,上面是其中一种,其中通过URI来确定要使用的文件系统类型,另外一种是FileSystem.get(conf),此时是使用默认的本地文件系统。

    所以如果要使用HDFS,则要调用第一种,并且在dst中将地址路径写成: hdfs://地址:端口号/路径的形式。

    实例化Progressable并重载progress方法,这里打印"."来描述进度。

    最后利用IOUtils工具包来将本地文件copy到制定的目标地址的文件上去。

  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/gslyyq/p/4101280.html
Copyright © 2011-2022 走看看