美文网首页
HDFS的相关操作

HDFS的相关操作

作者: Lokvahkoor | 来源:发表于2017-07-18 08:27 被阅读9次

    [本文为草稿,代码中很多地方都还没有仔细研究,等明天会补上更多的注释]

    这节课的关键就在于课程中提供的3段代码,要会用,会读,更要会改。

    hadoop fs -[command] 执行HDFS命令

    FilesySystemCat.java 代码分析:

    //这段程序用于读取hdfs上的text文件,并把文件中的内容输出到终端上
    import java.io.InputStream;
    
    import java.net.URI;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.*;
    import org.apache.hadoop.io.IOUtils;
    
    public class FileSystemCat {
        public static void main(String[] args) throws Exception {
                String uri = args[0]; //uri 文件路径
                Configuration conf = new Configuration();
            FileSystem fs = FileSystem.get(URI.create(uri),conf); //配置文件读取对象
            InputStream in = null;
        try{
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out, 4096, false); //open后的操作:取字符流输出到System.out
            } finally {
            IOUtils.closeStream(in);
            }
        }
    }
    

    localFile2HDFS 代码分析:

    //这段代码用于读入一个本地的TXT文件并将其第101-120字节的内容写入HDFS成为一个新文件
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    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 LocalFile2Hdfs {
        public static void main(String[] args) throws Exception {
    
            // 获取读取源文件和目标文件位置参数
            String local = args[0];
            String uri = args[1];
    
            FileInputStream in = null;
            OutputStream out = null;
            Configuration conf = new Configuration();
            try {
                // 获取读入文件数据
                in = new FileInputStream(new File(local));
    
                // 获取目标文件信息
                FileSystem fs = FileSystem.get(URI.create(uri), conf);
                out = fs.create(new Path(uri), new Progressable() {
                    @Override
                    public void progress() {
                        System.out.println("*");
                    }
                });
    
                // 跳过前100个字符
                in.skip(100);
                byte[] buffer = new byte[20];
    
                // 从101的位置读取20个字符到buffer中
                int bytesRead = in.read(buffer);
                if (bytesRead >= 0) {
                    out.write(buffer, 0, bytesRead);
                }
            } finally {
                IOUtils.closeStream(in);
                IOUtils.closeStream(out);
            }        
        }
    }
    

    HDFS2LocalFile 代码分析:

    //这段代码用于读入一个在hdfs上的txt文件,并将其第101-120字节的内容写入本地文件系统成为一个新文件
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    
    public class Hdfs2LocalFile {
        public static void main(String[] args) throws Exception {
    
            String uri = args[0];
            String local = args[1];
    
            FSDataInputStream in = null;
            OutputStream out = null;
            Configuration conf = new Configuration();
            try {
                FileSystem fs = FileSystem.get(URI.create(uri), conf);
                in = fs.open(new Path(uri));
                out = new FileOutputStream(local);
    
                byte[] buffer = new byte[20];
                in.skip(100);
                int bytesRead = in.read(buffer);
                if (bytesRead >= 0) {
                    out.write(buffer, 0, bytesRead);
                }
            } finally {
                IOUtils.closeStream(in);
                IOUtils.closeStream(out);
            }    
        }
    }
    

    相关文章

      网友评论

          本文标题:HDFS的相关操作

          本文链接:https://www.haomeiwen.com/subject/nksckxtx.html