Hadoop之HDFS简介

86 篇文章 1 订阅
21 篇文章 0 订阅

本文从HDFS是什么开始介绍,包括了HDFS架构、HDFS的读写、各个组件的作用、具体操作以及优缺点。给出了HDFS在分布式存储上的具体方案,可以使读者快速、清晰的理解HDFS系统。

Hadoop之HDFS简介

 

主要内容

  1. HDFS是什么?是干什么用的?
  2. HDFS的架构是怎么样的?
  3. HDFS的怎样进行读写?副本怎样放置?
  4. HDFS各个组件的作用?
  5. HDFS的文件操作命令有哪些?
  6. HDFS的优缺点是什么?

引言

有这样一个需求:

由于公司某业务mysql服务器过保,为防止数据丢失,需要备份mysql数据库,这些库目前已经只读,每个库约1.5T,大概有130个库,共需要200T左右的空间,并且希望数据不易丢失,恢复数据速度快。

部分解决方案:

1)单机存储

Hadoop之HDFS简介

 

有如下问题:

  1. 磁盘损坏或机器down机则无法下载;
  2. 单块磁盘的读写io会很高;
  3. 单块磁盘不能完整存储3个完整的库(存储大文件),只能存储2个,空间部分浪费
  4. 平时如果不用做数据恢复,机器cpu、内存等利用率低

2)分布式存储

可选用分布式存储,如HDFS、CEPH、S3等等。

HDFS是什么?是干什么用的?

HDFS(Hadoop Distributed File System)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

首先来看看Hadoop架构,HDFS为Hadoop其他组件提供存储支持。

Hadoop之HDFS简介

 

直观对比Linux文件系统和HDFS文件系统(执行ls命令)。

Linux:

#ls -l
-rw-r--r-- 1 root root 20 Jul 29 14:31 ms-server-download-zzzc_88888.idx
-rw-r--r-- 1 root root 8 Jul 29 14:31 ms-server-download-zzzc_88888.dat

HDFS:

#hadoop fs -ls /tmp/
-rw-r--r-- 2 xitong supergroup 181335139 2019-07-17 23:00 /tmp/java.tar.gz
-rw-r--r-- 2 xitong supergroup 181335139 2019-07-17 23:00 /tmp/jdk.tar.gz

可以看出HDFS和Linux文件系统很类似,都是有权限、文件所属用户、用户所在的组、文件名称等,但是也有不同:HDFS中的第2列表示副本数

HDFS的架构是怎么样的?

HDFS架构如下:

Hadoop之HDFS简介

 

  1. Client:客户端。
  2. NameNode:master,它是一个主管、管理者,存储元数据,存储元数据格式会在后面介绍。
  3. DataNode:slave,NameNode 下达命令,DataNode 执行操作并存储实际数据。
  4. SecondaryNameNode:和NameNode不是主备关系。当NameNode挂掉的时候,它并不能马上替换NameNode提供服务。主要作用会在后面介绍。

HDFS怎样进行读写

写文件

Hadoop之HDFS简介

 

  1. 客户端调用create方法,创建一个新的文件;NameNode会做各种校验,比如文件是否已经存在,客户端是否有权限等。
  2. 如果校验通过,客户端开始写数据到DN(DataNode),文件会按照block大小进行切块,默认128M(可配置),DataNode构成pipeline管道,client端向输出流对象中写数据,传输的时候是以比block更小的packet为单位进行传输,packet又可拆分为多个chunk,每个chunk都携带校验信息。
  3. 每个DataNode写完一个块后,才会返回确认信息,并不是每个packet写成功就返回一次确认。
  4. 写完数据,关闭文件

读文件

Hadoop之HDFS简介

 

  1. 客户端调用open方法,打开一个文件
  2. 获取block的location,即block所在的DN,NN(NameNode)会根据拓扑结构返回距离客户端最近的DN。
  3. 客户端直接访问DN读取block数据并计算校验和,整个数据流不经过NN。
  4. 读取完一个block会读取下一个block。
  5. 所有block读取完成,关闭文件

副本放置

Hadoop之HDFS简介

 

以经典的3副本为例(黄色方框表示客户端,绿色表示要写的block),Hadoop早期版本采用左边的放置策略,后期版本采用右边的放置策略放置副本。

图左:

  • 副本1:同机架的不同节点。
  • 副本2:同机架的另一个节点。
  • 副本3:不同机架的另一个节点。
  • 如果还有其他副本:随机。

图右:

  • 副本1:同Client的节点。
  • 副本2:不同机架的节点。
  • 副本3:同第2副本相同机架的不同节点。
  • 如果还有其他副本:随机。

两种策略的故障域都为机架,新版相对于旧版本,当本客户端再次读取新写的数据时,直接从本地读取,这样延迟最小,读取速度最快。

HDFS各个组件的作用?

先大致看下启动流程:

Hadoop之HDFS简介

 

  1. 启动NameNode,读取FsImage元数据镜像文件,加载到内存中;读取EditLog日志文件,加载到内存中,使当前内存中元数据信息与上次关闭系统时保持一致
  2. 启动DataNode,向NameNode注册,并向NameNode发送BlockReport。
  3. 退出安全模式后,Client可以对HDFS进行目录创建、文件上传等操作,改动的目录结构会记录在EditLog中,NameNode的内存中的目录结构也会改变。

NameNode

  1. 管理 HDFS 的命名空间。
  2. 管理数据块(Block)映射信息。
  3. 配置副本策略。
  4. 处理客户端读写请求。

Fsimage是一个二进制文件,格式如下:

Hadoop之HDFS简介

 

FsImage文件第1行为image head,里面包含image的版本、文件和目录的个数等;第2行为一个目录格式(如果是目录,就是这种格式),包含了目录的路径、副本数、权限等,目录的blocksize都为0;第3行为一个文件格式(如果是文件,则在FsImage存储的格式),文件和目录格式包含的字段差不多,多了block信息;通过加载此文件和EditLog日志文件来构建整个文件系统的目录结构。

通过观察FsImage文件,里面并没有block和DN的对应关系,它是如何查到块所对应的DN的呢?

block和DN的对应关系并没有实际持久化,而是通过DN向NN(NameNode)汇报,此过程为BlockReport。通过blockReport构建BlocksMap的结构如下:

Hadoop之HDFS简介

 

在blockInfo中保存了block所在的DN信息

SecondaryNameNode

和NameNode并非主备关系,而是辅助NN进行合并FsImage和EditLog并起到备份作用。

Hadoop之HDFS简介

 

HDFS文件操作命令有哪些?

和Linux操作文件类似,只列出常见几个,和Linux命令的功能也是类似的,如:cp即拷贝,rm即删除等等

#hadoop fs [cat|chgrp|chmod|chown|count|cp|df|get|ls|put|mv|rm|mkdir|tail]

在HDFS中,提供了fsck命令,用于检查HDFS上文件和目录的健康状态、获取文件的block块信息和位置信息等。

#hdfs fsck [move|delete|files|blocks|locations|racks|blockId]

HDFS的优缺点是什么?

最后根据以上内容总结HDFS优缺点如下:

优点:

  1. 支持海量数据的存储。
  2. 检测和快速应对硬件故障。
  3. 流式数据访问。
  4. 简化的一致性模型。
  5. 高容错性。
  6. 商用硬件。

缺点:

  1. 不能做到低延迟数据访问。
  2. 不适合大量的小文件存储。
  3. 不支持修改文件(HDFS2.x开始支持给文件追加内容)。
  4. 不支持用户的并行写。

hadoop2.x新特性 引入了NameNode Federation,解决了横向内存扩展;引入了Namenode HA,解决了namenode单点故障。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值