设为首页 加入收藏

TOP

Hadoop分布式文件系统——HDFS的读写
2019-02-08 12:21:59 】 浏览:57
Tags:Hadoop 分布式 文件 系统 HDFS 读写
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ABCD_0000/article/details/50560026

HDFS是运行在通用硬件平台上的可容错分布式文件系统。它优化了大文件的流式读取模式,适用于那些高吞吐并且对延迟性要求相对比较低的场景。它还通过文件“一次写入,多次读取”的简单策略保证了数据的一致性。HDFS亦使用了“块复制”的概念,让数据在集群的节点间进行复制,每个数据块复制的份数由“复制因子”决定。
HDFS包含三个服务:
A、NameNode:保存着集群中所有数据块位置的一个目录。
B、Secondary NameNode:周期性同步NameNode的块索引数据。在同步处理中,Secondary NameNode下载NameNode的image文件和editlogs,并对它们做本地归并,最后再将归并完的image文件发回给NameNode。Secondary NameNode并不是NameNode的热备份,当NameNode故障的时候它并不能工作。
C、DataNode:管理着从NameNode分配过来的数据块。它并不能感知集群中其他DataNode的存在,只和NameNode进行交互。
一、HDFS的读写操作:

public class HdfsWriter extends Configured implements Tool {

    /* (non-Javadoc)
     * @see org.apache.hadoop.util.Tool#run(java.lang.String[])
     */
    @Override
    public int run(String[] arg0) throws Exception {
        String localInputPath = arg0[0];
        Path outputPath = new Path(arg0[1]);
        Configuration conf = getConf();
        FileSystem fs = FileSystem.get(conf);
        OutputStream os = fs.create(outputPath);
        InputStream is = new BufferedInputStream(new FileInputStream(localInputPath));
        IOUtils.copyBytes(is, os, conf);
        return 0;
    }

    public static void main(String[] args) {
        try {
            int returnCode = ToolRunner.run(new HdfsWriter(), args);
            System.exit(returnCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
public class HdfsReader extends Configured implements Tool {

    /* (non-Javadoc)
     * @see org.apache.hadoop.util.Tool#run(java.lang.String[])
     */
    @Override
    public int run(String[] as) throws Exception {
        Path inputPath = new Path(as[0]);
        String localOutputPath = as[1];
        Configuration conf = getConf();
        FileSystem fs = FileSystem.get(conf);
        OutputStream os = new BufferedOutputStream(new FileOutputStream(localOutputPath));
        InputStream is = fs.open(inputPath);
        IOUtils.copyBytes(is, os, conf);
        return 0;
    }

    public static void main(String[] args) throws Exception {
        int returnCode = ToolRunner.run(new HdfsReader(), args);
        System.exit(returnCode);
    }

}

二、读写原理:FileSystem是一个抽象类,代表一个通用文件系统。调用FileSystem.get()方法时,会将Hadoop配置中的fs.default.name参数(形式:hdfs://)作为URI,选择初始化一个正确的文件系统。create()方法返回JAVA I/O的OutputStream对象,open()方法返回JAVA I/O的InputStream对象。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hadoop-->HDFS原理总结 下一篇HDFS的安全模式关闭

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目