Hadoop介绍(二) HDFS

HDFS文件系统

HDFS: 分布式文件系统,专门存储超大数据文件,为整个hadoop生态圈提供了基础的存储服务
角色: 主从模式
Namenode(名字节点/主节点):管理存储和检索多个Datanode的实际数据所需的所有元数据,负责存储调度
DataNode(数据节点):真正存储数据的地方
写入数据:通过输出流写入

1、 特点
a. 存储超大文件: 每个磁盘都有默认的数据块大小,这是磁盘对数据进行读写时要求的最小单位,文件系统是要构架于磁盘上的,文件系统也有块的逻辑概念,通常是磁盘块的整数倍,通常文件系统为几千个字节,而磁盘块一般是512字节。HDFS是一张文件系统,自身也有块(block)的概念,其文件块要比普通单一磁盘上文件系统大得多。默认是64mB。HDFS上的块之所以设计的如此之大,其目的是为了最小化寻址开销。HDFS文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在一个磁盘上,因此可以利用集群上任意一个磁盘进行存储,由于具备这种分布式存储的逻辑,所以可以存储超大的文件,通常G、T、P级别

b. 一次写入、多次读取: 一个文件经过创建、写入和关闭之后,就不需要改变,这个假设简化了数据一致性的问题,同时提高数据访问的吞吐量

c. 运行在普通廉价的机器上

2、 不适用场景
a. 不适用于实时查询这种对延迟要求高的场景
b. 大量小文件:对于Hadoop系统,小文件通常定义为远小于HDFS的block size的文件,由于每个文件都会产生各自的metadata元数据,Hadoop通过namenode来存储这些信息,若小文件过多,容易导致namenode存储出现瓶颈
c. 多用户更新: 为了保证并发性,hdfs需要一次写入多次读取,目前不支持多用户写入。多人写入数据的场景,可以考虑采用hbase的方案
d. 结构化数据: hdfs适合存储半结构化和非结构化数据,若有严格的结构化数据存储场景,可以考虑采用hbase的方案
e. 数据量并不大

3、 HDFS体系架构
hdfs是一个主、从(master/slaver)体系架构,由于分布式存储的性质,集群拥有两类节点Namenode和DataNode。Namenode: 系统中通常只有一个,管理存储和检索多个datanode的实际数据所需的所有元数据。datanode:通常有多个,是文件系统中真正存储数据的地方,在namenode统一调度下进行数据块的创建、删除和复制

4、 hdfs数据块复制
为了系统容错,文件系统会对所有数据块进行副本复制多份,hadoop中默认3复本。复本管理策略:运行客户端的节点上放一个副本(若客户端运行在集群之外,会随机选择一个节点),第二个副本会放在与第一个不同且随机另外选择的机架中节点上,第三个副本与第二个副本放在相同机架,随机选择另一个节点。
所有有关块复制的决策统一由namenode负责,namenode会周期性的接受集群中数据节点datanode的心跳和块报告。一个心跳的到达表示这个数节点是正常的,一个块报告包括该数据节点上所有块的列表

5、 hdfs读取和写入
1). 读取: client通过FS的open函数打开文件,DFS用RPC调用namenode节点,得到文件的数据块信息。DFS返回FSDatainputStream给client用来读取数据。client调用stream的read函数开始读取数据。文件读取结束后,调用close函数关闭数据流

2). 写入: client调用create来创建文件,DFS用RPC调用namenode节点,在文件系统的命名空间中创建一个新的文件。DFS返回DFSOuputStream,client用于写数据。
cilent开始写入数据,DFSOutputStream将数据分成块,写入Data queue。Data Queue由data Stream读取,并通知namenode节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里,data stream将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点,第二个数据节点将数据发送给第三个数据节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值