1.什么是Hadoop
管理网络中跨多台计算机存储的文件系统称为分布式文件系统
面临的挑战:使文件系统能容忍节点故障且不丢失任何数据
不适合的特点:低时间延迟的数据访问&大量的小文件&多用户写入,任意修改文件
2. HDFS的概念
元数据
hdfs的目录结构及每一个文件的块信息(块的ID,块的副本数量,块的存放位置)
由namenode负责
数据块
默认为64MB,最小化寻址开销
#分块的好处:
1. 一个文件的大小可以大于网络中任意一个磁盘的容量
2. 使用块抽象而非整个文件作为存储单元,大大简化了存储子系统的设计。
3. 适用于数据备份,提供数据容错能力和可用性。将每个块复制到少数几个独立的机器上,默认为3个。
namenode和datanode
管理者-工作者模式运行
namenode:
管理文件系统的命名空间,(永久)命名空间镜像文件和编辑日志文件
(不永久,系统启动时由数据节点重建)记录每个文件中各个块所在的数据节点信息
datanode:
存储并检索数据块,定期向namenode发送它们所存储的块的列表。
如何对namenode进行容错:
1. 备份那些组成文件系统元数据持久状态的文件。将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)。
2. 辅助namenode,定期通过编辑日志合并命名空间镜像,防止编辑日志过大。
#节点全部失效,怎么办?
一般把NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行。
3.namenode元数据管理机制示意图
内存中有一份完整的元数据(内存meta data)
磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)
用于衔接内存meta data和持久化元数据镜像fsimage之间的操作日志(edits文件)注:当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存meta data中
每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage(只有第一次需要下载)下载到本地,并加载到内存进行merge(这个过程称为checkpoint)。
4.向HDFS写入数据时的流程
写入期间如果发生故障,则执行:
(1)关闭管线,确认把队列中的任何数据包都添加回数据队列的最前端,以确保故障节点下游的节点不会漏掉数据包。
(2)为存储在另一正常节点的当前数据块指定一个新的标识,并将该标识传送给namenode,以便故障节点在恢复后可以删除存储的部分数据包。
(3)从管线中删除故障节点,并把余下的数据块写入管线中的两个正常的节点。namenode注意到复本量不足时,会在另一个节点上创建一个新的复本。
5.从HDFS读取数据时的流程
6.网络拓补和Hadoop
如何计算两个节点间的距离?
同一节点中的进程<同一机架上的不同节点<同一数据中心中不同机架上的节点<不同数据中心中的节点
7.复本的布局
可靠性、写入带宽和读取带宽
默认的策略:
在运行客户端的节点/随机选一个节点 作为第一个
和第一个不同的机架中的节点 作为第二个
和第二个相同的机架,不同节点 作为第三个
一旦选定后,会根据网络拓补创建一个管线。
稳定性:两个机架
写入带宽:写入操作只需要遍历一个交换机
读取性能:可以从两个机架中进行选择读取
集群中块的均匀分布:客户端只在本地机架写入一个块
8.数据完整性
检测数据是否损坏的常见措施:
在数据第一次引入系统时计算校验和,并在数据通过一个不可靠通道进行传输时再次计算校验和,如果不匹配,则说明有损坏,但不能修复数据,常用的错误检测码为CRC-32.
HDFS的数据完整性
对写入和读取的数据分别计算与验证校验和
数据校验的几种场景:
(1)客户端向datanode发送数据,最后一个datanode收到数据后,验证数据的验证和与客户端的是否一致。
(2)客户端从datanode读取数据时,也会验证校验和,并记录在datanode上。(这些对检测损坏的磁盘很有价值)
(3)datanode会在后台线程中运行一个datablockscanner,从而定期验证存储在这个datanode上的所有数据块。
HDFS常见面试题:
1. HDFS 中的 block 默认保存3份
2. HDFS 默认 BlockSize 是 64MB(2.7.2版本,本地模式)128MB(2.7.2版本,分布式模式)
3. Client 端上传文件的时候下列哪项正确:
- Client端将文件切分为Block,依次上传
- Client只上传数据到一台DataNode,然后由NameNode负责Block复制工作
4.DataNode负责 HDFS 数据存储
5.关于SecondaryNameNode 哪项是正确的?(C)
A.它是NameNode的热备
B.它对内存没有要求
C.他的目的使帮助NameNode合并编辑日志,减少NameNode 启动时间
6.下列哪个程序通常与 NameNode 在一个节点启动?(D)
A.SecondaryNameNode
B.DataNode
C.TaskTracker
D.JobTracker
*****
hadoop的集群是基于master/slave模式,namenode和jobtracker属于master,datanode和tasktracker属于slave,master只有一个,而slave有多个。
SecondaryNameNode内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和 NameNode 运行在不同的机器上。
JobTracker对应于NameNode,TaskTracker对应于DataNode。
DataNode和NameNode是针对数据存放来而言的。JobTracker和TaskTracker是对于MapReduce执行而言的。
mapreduce中几个主要概念,mapreduce 整体上可以分为这么几条执行线索:
jobclient,JobTracker与TaskTracker。
1)JobClient会在用户端通过JobClient类将已经配置参数打包成jar文件的应用存储到hdfs,并把路径提交到Jobtracker,然后由JobTracker创建每一个Task(即 MapTask 和 ReduceTask)并将它们分发到各个TaskTracker服务中去执行。
2)JobTracker是一master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务。task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker 部署在单独的机器上。
3)TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。TaskTracker 都需要运行在HDFS的DataNode上。
*****
7.文件大小默认为 64M,改为 128M 有啥影响?
增加文件块大小,需要增加磁盘的传输速率。
8.HDFS的存储机制(读取和写入)
9.secondarynamenode工作机制
1)第一阶段:namenode启动
(1)第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求
(3)namenode记录操作日志,更新滚动日志。
(4)namenode在内存中对数据进行增删改查
2)第二阶段:Secondary NameNode工作
(1)SecondaryNameNode询问namenode是否需要checkpoint。直接带回namenode是否检查结果。
(2)SecondaryNameNode请求执行checkpoint。
(3)namenode滚动正在写的edits日志
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
(5)SecondaryNameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint
(7)拷贝fsimage.chkpoint到namenode
(8)namenode将fsimage.chkpoint重新命名成fsimage
10. NameNode与SecondaryNameNode 的区别与联系?
1)机制流程同上;
2)区别
(1)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
(2)SecondaryNameNode主要用于定期合并命名空间镜像和命名空间镜像的编辑日志。
3)联系:
(1)SecondaryNameNode中保存了一份和namenode一致的镜像文件(fsimage)和编辑日志(edits)。
(2)在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
11. namenode内存包含哪些,具体如何分配
NameNode整个内存结构大致可以分成四大部分:Namespace、BlocksMap、NetworkTopology及其它。
1)Namespace:维护整个文件系统的目录树结构及目录树上的状态变化;
2)BlockManager:维护整个文件系统中与数据块相关的信息及数据块的状态变化;
3)NetworkTopology:维护机架拓扑及DataNode信息,机架感知的基础;
4)其它:
LeaseManager:读写的互斥同步就是靠Lease实现,支持HDFS的Write-Once-Read-Many的核心数据结构;
CacheManager:Hadoop 2.3.0引入的集中式缓存新特性,支持集中式缓存的管理,实现memory-locality提升读性能;
SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用于数据备份、回滚,以防止因用户误操作导致集群出现数据问题;
DelegationTokenSecretManager:管理HDFS的安全访问;
另外还有临时数据信息、统计信息metrics等等。
NameNode常驻内存主要被Namespace和BlockManager使用,二者使用占比分别接近50%。其它部分内存开销较小且相对固定,与Namespace和BlockManager相比基本可以忽略。