《架构师训练营》-第十二周-大数据

HDFS

RAID技术

参考百度百科:磁盘阵列
参考知乎:RAID有哪几种?有什么区别?

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。

磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。常用的标准RAID方案有以下:

  • RAID 0:将多块磁盘组成一块更大的磁盘。例如:使用了三块80GB的磁盘组建成RAID 0模式,那么磁盘容量就会是240GB。
  • RAID 1:称为磁盘镜像。将所有磁盘平均分成两份,一份使用,一份备份。
  • RAID 10:RAID 0和RAID 1的组合。
  • RAID 5:分布式奇偶校验的独立磁盘结构。奇偶校验码存在于所有磁盘,兼顾安全与性能。
  • RAID 6:带两种分布存储的奇偶校验码独立磁盘结构。安全性高于RAID 5,性能低于RAID 5,适用于对安全性要求极高业务。

《架构师训练营》-第十二周-大数据_第1张图片

元素

NameNode

NameNode是一个中心服务器,负责管理文件系统的namespace以及客户端对文件的访问。全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和快状态报告。接收到心跳信号意味着该DataNode节点工作正常,快状态报告包含了该DataNode上所有数据块的列表。

NameNode负责文件元数据的操作,跟文件内容相关的数据不经过NameNode,而是直接请求对应的DataNode,有效避免NameNode成为系统的瓶颈。

DataNode

一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据。DataNode启动后,向NameNode注册,通过后,定期执行以下活动:

  • 周期性(1小时)向NameNode上报所有的块信息;
  • 周期性(3秒一次)轮询,心跳返回结果带有NameNode给该DataNode的命令,例如:复制数据到另一台机器,或者删除数据;如果超过10分钟没有收到某个DataNode的心跳,则认为不可用。

DataNode集群允许运行中添加或移除一些机器。

Block

HDFS中的文件在物理上是分块存储的,即分成Block;Block在Hadoop不同版本大小不同:

  • Hadoop1.x:64M
  • Hadoop2.x:128M

HDFS块从64M升级后改为128M的原因

Packet

Packet是Client端向DataNode,或者DataNode的PipeLine之间传输数据的基本单位,默认64kB。

这个参数为参考值,是指真正在进行数据传输时,会以它为基准进行调整,调整的原因是一个packet有特定的结构,调整的目标是这个packet的大小刚好包含结构中的所有成员,同时也保证写到DataNode后当前block的大小不超过设定值

Chunk

Chunk是最小的Hadoop中最小的单位,是Client向DataNode或DataNode的PipeLne之间进行数据校验的基本单位,默认512Byte。

写文件

《架构师训练营》-第十二周-大数据_第2张图片

  1. Client向NameNode发起写入文件请求
  2. NameNode检查文件是否存在,用户是否有权限,如果都符合条件则创建一条记录,否则抛出异常
  3. Client将文件分成多个Packet,通过队列来管理这些Packet,向NameNode申请Blocks,获取DataNode列表
  4. Client将Packet以流的方式写入第一个DataNode
  5. DataNode通过pipeline传递给其余的DataNode,当最后一个成功之后,返回“ack packet”
  6. Client接收到“ack packet”,从队列中删除该Packet

读文件

《架构师训练营》-第十二周-大数据_第3张图片

  1. Client向NameNode请求访问数据
  2. NameNode会返回全部或部分的Block列表,每个Block都会返回拷贝的DataNode
  3. Client会选择最近的DataNode来获取Block
  4. 当Client读取当前的Block数据后,会关闭与当前DataNode连接,为下一个Block寻找最佳的DataNode;每读取完一个Block都会进行checksum校验,如果校验失败则会通知NameNode,然后从下一个拥有该Block的DataNode继续读
  5. 当读完这批Block列表,且文件读取还没有结束,则会向NameNode获取下一批Block列表

MapReduce

MapReduce分为Map和Reduce两个动作。

Map

Reduce

你可能感兴趣的:(《架构师训练营》-第十二周-大数据)