Hadoop核心——HDFS

1、HDFS简介

在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统 。

HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统.
HDFS and Mapreduce

  • Doug Cutting 在做 Lucene 的时候, 需要编写一个爬虫服务, 这个爬虫写的并不顺利, 遇到了一些问题, 诸如: 如何存储大规模的数据, 如何保证集群的可伸缩性, 如何动态容错等
  • 2013年的时候, Google 发布了三篇论文, 被称作为三驾马车, 其中有一篇叫做 GFS, 是描述了 Google 内部的一个叫做 GFS 的分布式大规模文件系统, 具有强大的可伸缩性和容错性
  • Doug Cutting 后来根据 GFS 的论文, 创造了一个新的文件系统, 叫做 HDFS

2、HDFS优劣势

优势:

  • 存储大文件,高吞吐量
  • 一次写入,多次读取
  • 硬件要求低,节约成本

劣势:

  • 不适用低延时数据访问
  • 不使用存储大量小文件

3、HDFS基本架构

HDFS是一个主从(Master/Slave)体系结构

3.1、组件简介

HDFS由四部分组成

  • Client
    • 文件切分,文件上传HDFS时,根据文件配置将文件切分成设置大小的Block块,再进行存储
    • 与NameNode交互,获取文件存储位置信息
    • 与DataNode交互,发送读取或这写入数据请求
    • 提供一些基本命令管理HDFS
  • NameNode
    • 管理HDFS的名称空间,为存储数据分配唯一地址
    • 管理数据块(Block)映射信息,存储元数据信息
    • 配置副本策略
    • 处理客户端读写请求
  • DataNode
    • 存储数据块,存储源数据信息
    • 执行客户端读/写操作
  • Secondary NameNode
    • 辅助NameNode,分担其工作量
    • 定期合并fsimage和fsedits文件,并发送给NameNode进行替换
    • 在紧急情况下,可以辅助恢复NameNode

4、HDFS的副本机制、机架感知和安全模式

4.1、副本机制

在hdfs中所有文件都是以block块的方式存放在DataNode中

  • 当文件大小大于集群中的任意一个磁盘,此时将文件切分成block,分开存储
  • 使用块作文文件存储的逻辑单位可以简化存储子系统
  • 块适用于数据备份,提供高数据容错能力

在hadoop1.x版本中block块默认大小64M,hadoop2.x中文件block块大小默认是128M,默认副本数量为3,block块的大小可以通过配置设置

4.2、机架感知

HDFS分布式文件系统的内部有一个副本存放策略,以默认副本数=3为例:

  • 第一个副本块存本机
  • 第二个副本块存跟本机同机架的一个服务器节点上
  • 第三个副本块存不同机架的一个服务器节点上

4.3、安全模式

安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时
候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。
假设我们设置的副本数(即参数dfs.replication)是3,那么在datanode上就应该有3个副本存
在,假设只存在2个副本,那么比例就是2/3=0.666。hdfs默认的副本率0.999。我们的副本率
0.666明显小于0.999,因此系统会自动的复制副本到其他dataNode,使得副本率不小于0.999。
如果系统中有5个副本,超过我们设定的3个副本,那么系统也会删除多于的2个副本。
在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在,当
整个系统达到安全标准时,HDFS自动离开安全模式。

5、HDFS的元数据辅助管理

NameNode的所有元数据信息都保存在了fsimage与edits文件中,元数据信息保存目录配置在hdfs-site.xml

<property>
    <name>dfs.namenode.name.dir</name>    
    <value>
        file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas,          	        		file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2
    </value>
</property>
<property>
     <name>dfs.namenode.edits.dir</name>
     <value>file:///export/servers/hadoop-2.7.5/hadoopDatas/nn/edits</value
</property>

5.1、fsimage和edits介绍

  • edits
    • edits文件存放了客户端最近一段时间的操作日志
    • 客户端对HDFS进行写文件时会首先记录在edits文件中
    • edits修改式元数据也会更新
  • fsimage
    • Name中关于元数据的镜像,一般称为检查点,fsimage存放一份比较完整的元数据信息
    • 由于fsimage是NameNode的完整镜像,如果每次加载都到内存生成树状拓扑结构,这样的操作非常消耗内存和cpu,所以优先将对NameNode的操作都放在edits文件中
    • fsimage内容包含了NameNode管理下的所有DataNode文件及文件block及block所在的DataNode的元数据信息
    • 随着edits内容增加,需要在一定时间和fsimage进行合并
  • fsimageedits文件查看命令
    • fsimage
    cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
    hdfs oiv -i fsimage_0000000000000000864 -p XML -o hello.xml
    
    • edits
    cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
    hdfs oev -i  edits_0000000000000000865-0000000000000000866 -p XML -o myedit.xml 
    

5.2 SecondaryNameNode辅助管理元数据文件

  • 配置SecondaryNameNode
    • SeconfaryNameNode在conf/masters中指定
    • 在masters指定的机器上修改相应配置文件hdfs-site.xmlcore-site.xml文件
      • hdfs-site.xml
      	<property>
      	  <name>dfs.http.address</name>
      	  <value>host:50070</value>
      	</property>
      
      • core-site.xml
      <!-- 多久记录一次 HDFS 镜像, 默认 1小时 -->
      <property>
        <name>fs.checkpoint.period</name>
        <value>3600</value>
      </property>
      <!-- 一次记录多大, 默认 64M -->
      <property>
        <name>fs.checkpoint.size</name>
        <value>67108864</value>
      </property>
      
  • 原理分析
    • 1.SecondaryNameNode通知NameNode切换editlog
    • 2.SecondaryNameNode从NameNode中获得fsimage和editlog(通过http方式)
    • 3.SecondaryNameNode将fsimage载入内存,然后开始合并editlog,合并之后成为新的fsimage
    • 4.SecondaryNameNode将新的fsimage发送回NameNode
    • 5.NameNode用新的fsimage替换旧的fsimage,同时把edits.new文件变成edits
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值