设为首页 加入收藏

TOP

Hadoop分布式文件系统——HDFS的读写
2019-02-08 12:21:59 】 浏览:36
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 
 
			
ljs-title">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的安全模式关闭

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }