一、基本概念
1、HDFS介绍
HDFS是Hadoop Distribute File System(分布式文件系统)的简称。是Hadoop核心组件之一,作为最底层的分布式存储服务而存在。
解决问题:大数据存储。是横跨在多台计算机上的存储系统。分布式文件系统为存储和处理超大规模数据提供所需的扩展能力。
传统存储模式到HDFS的历程:
1)传统存储,上传/下载耗时;
2)传统存储遇到存储瓶颈时,纵向扩展加磁盘加内存,但始终有上限;
3)继而进行横向扩展,增加服务器。对文件分割成更小的块,每个块放到不同的服务器进行分布式存储(datanode)。这解决了上传的问题,但是读取文件成本变高。所以需要一个记录文件切割及保存在哪里的相关信息(namenode);
4)且如果其中一个宕机挂掉了,那么就无法读取。为了解决单点故障,可以把文件进行备份存储(snn)。
datanode,存放数据的
namenode,记录数据的位置
snn,数据备份
整个集群加起来就是HDFS
2、HDFS设计目标
1、硬件故障时常态。故障的检测和自动快速恢复;
2、HDFS被设计成时候批量处理,而不是用户交互式的。注重数据访问的高吞吐量;
3、支持大文件,GB到TB级别;
4、write-one-red-many,一次写入多次读取;
5、移动计算的代价比移动数据的代价低;
6、在异构的硬件和软件平台上的可移植性。
二、HDFS重要特性
首先它是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件。其次它是分布式的,有很多服务器联合起来实现其功能,集群中的服务器有各自的角色,
1、master/slave架构(主从架构)
一般HDFS集群是有一个namenode和一定数量的DataNode组成,NameNode是集群主节点,DataNode是集群从节点。2种角色各司其事,协调完成分布式文件存储服务。
2、分块存储
HDFS的文件在物理上是分块存储的。块的大小通过配置参数来决定。默认是128M(Hadoop2.x版本)。
3、名字空间(NameSpace)
HDFS支持传统的层次型文件组织结构。NameNode负责维护文件系统的名字空间。任何文件系统名字空间或属性的修改都将被namenode记录下来。HDFS会给客户端提供一个统一抽象目录树,客户端通过路径来访问文件,例如:hdfs://namede:port/dir-a/dir-b/dir-c/file.data。
4、Namenode元数据管理
元数据:目录机构及文件分块位置信息叫元数据。namenode负责维护整个HDFS文件系统的目录树结构,以及每个文件对于的block快信息(block的id,所做的DataNode服务器)
5、DataNode数据存储
文件的各个block具体存储管理有DataNode节点承担。每个block都可以在多个DataNode上。DataNode需要定时想namenode汇报自己持有的block信息。存储多个副本(副本数量也可以通过参数设置dfs.replication,默认是3)。注意:常说的副本个数一般要连同自己本身
6、副本机制
为了容错,文件的所有block都会有副本。每个文件的block大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数据。副本系统可以在文件创建的时候指定,也可以在之后改变。
7、一次写入,多次读出
HDF不支持文件的修改。正因为如此,HDFS适合用来做大数据分析的底层存储服务,并不适用来做网盘等。因为修改不方便,延迟大,网络开销大,成本太高。
三、HDFS基本操作
1、Shell命令行客户端
hadoop fs <args>
文件系统shell包括与Hadoop已经Hadoop支持的其他系统(如本地FS,HFTP FS,S3 FS等)直接交互的各类类似shell的命令。
四、HDFS基本原理
1、NameNode
1)是HDFS的核心
2)又称为Master
3)NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪给整个集群中的文件
4)NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。
5)namenode知道HDFS中任何给定的文件的块列表及其位置。使用此信息namenode知道如何从块中构建文件。(如果不知道,那么存储服务就是失败的)
6)为了提高响应效率。元数据保存在内存当中,对元数据做定时备份。NameNode并不会持久化存储每个文件中各个块所在的DataNode位置(不会保存在日志当中,也不会保存在镜像当中,只会在内存元素中有),这些信息会在系统启动时草赶时间节点重建。
7)NameNode对于HDFS至关重要,当NameNode关闭时,HDFS/Hadoop集群无法访问。
8)NameNode是Hadoop集群中的单点故障。单独故障:它如果出了问题,其他不可以用。
9)NameNode所在集群通常会配置大量内存(RAM)

2、DataNode
1)DataNode负责将实际数据存储在HDFS中。
2)DataNode也称为slave。
3)DataNode和NameNode
4)DataNode启动时,它将腹部自己到namenode,并汇报自己负责持有的块列表。
5)当某个DataNode关闭时,不加影响数据或集群可用性。DataNode将安排其他DataNode管理的块进行副本复制。
6)DataNode所在机器通常配置大量硬盘空间。因为实际数据存储在DataNode中。
7)DataNode会定金(dfs.heartbeat.interval配置项配置,默认3s)想namenode发送心跳,如果namenode长时间没收到心跳,namenode就会认为该DataNode失效。
8)block汇报持有块,汇报时间间隔取参数dfs,blockreport.intervaIMsec,默认6小时
五、HDFS工作机制
NameNode(1个)负责整个文件系统元数据;DataNode(可能多个)负责管理具体文件数据块存储;Secondary NameNode(理解为秘书)协助NameNode进行元数据备份。
HDFS的内容部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行。

六、HDFS数据流程


七、案例:Shell定时采集数据至HDFS
一般日志文件生成的逻辑有业务系统决定,比如每小时滚动一次,或者一定大小滚动一次,避免单个日志文件多大不方便操作。
比如滚动后的文件命名为access.log.x,其中x为数字。正在进行写的日志文件叫access.log。这样的话,如果日志文件后缀有数字的,就满足上传条件,就把这些文件移动到准备上传的工作区间目录(比如叫toupoad)。工作区间有文件夹之后,可以试用Hadoop put命名将文件上传。

网友评论