Fork me on GitHub

Hadoop HDFS(一)

微信公众号:码农小胡

大吼一声,我胡汉三又回来了,最近太忙,终于可以学习自己的东西了,开始更新中,都是眼泪啊。

Hadoop HDFS(一)

由于时间关系,经常忙着工作,很少写一些文章了,现在重新开始,记录一下自己在学习中所遇到的问题,这次学习Hadoop和其他的文章不一样,减去繁琐的教程,直接记录自己学习的东西,为什么不从搭建环境开始写呢,网上一堆,太多了,所以,自己百度一下全部可以搞定,这里直接从hdfs开始。

HDFS的概念

首先,hdfs是一个文件系统,用来存储文件,通过统一的命名空间—目录树来定位文件
其次,它是分布式的,由多个服务器联合起来,实现功能。

重要特性:

(1)HDFS中的文件在物理上是分块存储的,块的大小是可以通过配置参数来规定,默认的是128M,老版本的是64M。
(2)HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。
(3)目录结构及文件分块信息的管理由namenode节点承担
namenode是HDFS集群主节点,负责维护整个HDFS文件系统的目录树,以及每一个路径所对应的block块信息(包括block的id,以及所在的datanode服务器)
(4)文件的各个block的存储管理由datanode节点承担
dateanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多啊个副本,并可以通过参数设置。
(5)需要注意的是HDFS是设计成适应一词写入,多次读取的场景,且不支持文件的修改
(注意:适合做数据分析,不能做网盘,不便修改,延迟大,网络开销大,成本高,还是使用百度网盘吧)

HDFS工作机制

1、概述

(1)HDFS两个角色:namenode,datanode
(2)Namenode负责管理文件系统元数据
(3)Datanode负责管理用户文件数据块
(4)文件按照固定大小切成若干块后分布式存储在若干datanode上
(5)每一额文件块可以有多个副本,放在不用的datanode上
(6)Datanode会定期向Namenode汇报自身保存文件block信息,而namenode则会负责爆出文件的副本数量
(7)HDFS内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

2、HDFS写数据流程

1、namenode通信请求上传文件,namenode检查目标文件是否存在,父目录是否存在。
2、namenode返回是否可以上传。
3、client请求第一个block传输到哪个datanode服务器上
4、namenode返回三个服务器datanade。
5、client请求3台datanode中的一台上传数据(其实是一个RPC调用,建立pipeline),A收到请求会调用B,B调用C将pipline建立完成,返回客户端一个响应,告诉客户端以及准备好.
6、client开始往A上传第一额block,以pcaket为短文,A收到一个packet就会传输给B,B传给C,A每传一个packet会放入一个应答队列等待应答
7、当一个block传输完成之后,client再次请求namenode上传第二个block
(注:上传数据时,datanode选择策略:
1、第一给副本先考虑client 端最近的(同机架)2、第二个副本考虑跨机架挑选,增加副本可靠性,3、第三个副本就在第一个副本同机架另外选一台datanode存放
如何知道哪个机器在哪个机架上,可配置机架感知)

你想输入的替代文字

3、HDFS读数据流程

1、跟namenode通信查询元数据,找到文件所在大datanode服务器。
2、挑选一台datanode服务器,请求建立scoket流。
3、datanode发送数据,以packet 为单位做校验
4、客户端以packet为单位接受,先在本地缓存,然后写入目标文件
你想输入的替代文字