一.  前提和设计目标

1.  硬件错误是常态,因此需要冗余,这是深入到HDFS骨头里面去了

  HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据。我们面对的现实是构成系统的组件数目是巨大的,而且任一组件都有可能失效,这意味着总是有一部分HDFS的组件是不工作的。因此错误检测和快速、自动的恢复是HDFS最核心的架构目标

2.  流式数据访问

即:数据批量读取而非随机读写(OLTP),Hadoop擅长的是数据分析而不是事物处理

3.  大规模数据集

  HDFS上的一个典型文件大小一般都在G字节至T字节。因此,HDFS被调节以支持大文件存储。它应该能提供整体上高的数据传输带宽,能在一个集群里扩展到数百个节点。一个单一的HDFS实例应该能支撑数以千万计的文件。

4.  简单的一致性模型

  为了降低系统复杂度,HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。

5.  数据就近

  一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比之将数据移动到应用所在显然更好。HDFS为应用提供了将它们自己移动到数据附近的接口。

二.  HDFS体系架构

  HDFF 体系架构主要分为以下几个部分

NameNode

DataNode

SecondaryNameNode

事物日志

映像文件

如图:

1.  NameNode

  1. 名称节点(元数据节)点用来管理文件系统的命名空间,

    • 其将所有的文件和文件夹的元数据保存在一个文件系统树中,这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)
  2. 记录每个文件数据块在个个DataNode上的位置和副本信息,协调客户端对文件的访问 协调客户端对文件的访问 ,

    • 这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的
  3. 协调客户端对文件的访问

  4. 记录命名空间内的改动或者空间本身属性的改动

  5. NameNode使用事物日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等

NameNode 的存储结构如下:

  

VERSION文件是java properties文件,保存了HDFS的版本号。

root@VM_160_34_centos:~> cat /usr/local/hadoop-2.2./dfs/name/current/VERSION
#Mon Sep :: CST
namespaceID=
clusterID=CID-d5e5b442-3fe0-49e0-b25e-f41f5f241153
cTime=
storageType=NAME_NODE
blockpoolID=BP--10.207.160.34-
layoutVersion=-
  1. layoutVersion是一个负整数,保存了HDFS的持续化在硬盘上的数据结构的格式版本号。

  2. namespaceID是文件系统的唯一标识符,是在文件系统初次格式化时生成的。

  3. cTime此处为0

  4. storageType表示此文件夹中保存的是元数据节点的数据结构。

  

2.  DataNode

  1. 负责所在物理节点的存储管理

  2. 一次写入,多次读取(不修改)

  3. 文件由数据块组成(典型的块大小为64M)

  4. 数据块尽量散布到各个节点

  5. 周期性的向元数据节点回报其存储的数据块信息.

secondaryNameNode

辅助名称节点(又称 从元数据节点)并不是元数据节点出现问题时候的备用节点,它和元数据节点负责不同的事情。

其主要功能就是

  1. 周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。这点在下面会相信叙述。

  2. 合并过后的命名空间镜像文件也在从元数据节点保存了一份,以防元数据节点失败的时候,可以恢复。

读取数据流程

客户端要访问HDFS中的一个文件,

首先冲NameNode获取组成这个文件的数据块的位置列表,

根据列表知道存储数据块的DataNode

访问DataNode 获取数据

NameNode 并不参与数据实际传输.

如下图

HDFS入门详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  3. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  4. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  5. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  6. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  7. hadoop hdfs uri详解

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  9. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

随机推荐

  1. bootstrap的滚动监听

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  2. Spring3+hibernate4框架整合

    花了俩天时间复习了一下Spring和jhibernate架构知识,在学习过程中受益颇多.知识用起来才能活起来,长时间不去触碰他就会变得很陌生. Spring 提供了统一的数据访问架构,可以支持JDBC ...

  3. 关于Java的this关键字

    java中的this随处可见,用法也多,现在整理有几点: 1. this是指当前对象自己. 当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用.如下面这个例子中: public ...

  4. 安全接口 interface --显示实现接口

    前言:当我们定义接口的成员的时候不需要写访问控制符,因为它是默认public的,也只能是public.当一个类要实现这个接口的时候,自然要公开其成员.一直以来我都这么做. interface Inte ...

  5. css笔记——移动端

    苹果手机 /*按钮样式:*/input[type=button], input[type=submit], input[type=file], button { cursor: pointer; -w ...

  6. 第一节 Hibernate 基本配置

    1 新建maven工程 1)打开eclipse,依次点击File---->New---->Maven Project. 2)选择org.apache.maven.archetypes ma ...

  7. 详解null

    前言 在java中初始化的时候经常用到null,也经常会碰到空指针异常(NullPointerException),由于碰到的频率比较高,我认为有必要进行一下了解,揭开它的神秘面纱. 一.null是代 ...

  8. 关键字 extern

    定义:extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中.编译器会到其他模块中寻找其定义. extern int f(); extern int i; extern关键字   作为 ...

  9. 算法 replace,replace_copy,back_inserter

    replace (list.begin(), list.end(), , ); // replace any elements with value of 0 by 42 replace算法对输入序列 ...

  10. 普通树(有根树)C++

    对于普通树实现的细节包括 1 树结点的结构体 2 初始化及删除树结点(关注内存泄露) 3 递归先序遍历 4 通过关键值的查询操作,返回关键值的结点 5 凹入表实现 6 广义表实现 7 非递归先序遍历, ...