1、Hadoop是Google的集群系统的开源实现,
–Google集群系统:GFS、mapreduce、bigtable
–hadoop主要由HDFS、MapReduce、HBase组成
目的:解决nutch的海量数据爬取和存储的需要
2、HDFS优点:
- 高容错性
数据自动保存多个副本
副本丢失后,自动恢复 - 适合批处理
移动计算而非数据
数据位置暴露给计算框架 - 适合大数据处理
GB、TB、甚至PB级别的数据
百万规模以上的文件数量
10K+ 节点 - 可构建在廉价机器上
通过多副本提高可靠性
提供了容错和恢复功能
3、HDFS缺点: - -低延迟数据访问
比如毫秒级
低延迟与高吞吐率 - -小文件存取
占用NameDode大量内存
寻道时间超过读取时间 - -并发写入,文件随机修改
一个文件只能有一个写者
仅支持append
4、HDFS数据存储单元(block) - -文件被切分成固定大小的数据块
默认数据块大小为64MB
若文件大小不到64MB,则单独存储成一个block - -一个文件存储方式
按大小被切分成若干个block,存储在不同节点上
默认情况下每个block都有三个副本
-block大小和副本数通过client端上传文件时设置,文件上传成功后副本数可以更改,block size不可更改
5、NameNode(NN) - -NameNode主要功能:接收客户端的读写服务
- -NameNode保存metadate信息包括:(metadate时元数据:除文件内容后的所有数据)
文件owership和permissions
文件包括哪些块
Block保存在哪几个DataNode(由DataNode启动时上报) - -NameNode的metadate信息在启动后会加载到内存中
metadate存储到磁盘文件名为“fsimage”
Block的位置信息不会保存到fsimage
edits记录对metadate的操作日志
6、SecondaryNameNode(SNN) - -它不是NN的备份(但可以做备份),它的主要工作时帮助NN合并editslog,减少NN启动时间。
- -SNN执行合并时机
根据配置文件的时间间隔fs.checkpoint.period 默认3600秒
根据配置文件设置editslog大小fs.checkpoint.size 规定edits文件的最大值,默认时64MB
7、DataNode (DN) - -存储数据(Block)
- -启动DN线程的时候会向NN汇报block信息
- -通过NN发送心跳保持与其联系(默认3秒),如果NN十分钟没有收到DN的心跳,则认为已经lost,并copy其上的block到其他的DN上
- -Block的副本防止策略
-第一个副本:放置在上传文件的DN中;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点上。
-第二个副本:放置在于第一个副本不同的机架节点上。
-第三个副本:与第二个副本相同机架的节点上
-更多副本:随即节点
8、HDFS文件权限 - -与Linux文件权限类似
r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容 - -如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan
- -HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。
9、安全模式 - -namenode启动的时候,首先将镜像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
- -一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不许需要SNN)和一个空的edits
- -此刻NN运行在安全模式。即NN的文件系统对于客户端来说只是只读的。(显示目录、文件内容等等。写、删除、重命名都会失败)。
- -在此阶段NN收集各个DN的报告,当数据块达到最小副本数以上时,会被认为是“安全”的,在一定比例(可设定)的数据块被确定为“安全”后,再过若干时间,安全模式结束
- -当检测副本数不足的数据块时,该块会被复制直到最小副本,系统中数据块的位置不是由NN维护的,而是以块列表的形式存储在DN中。
10、Hadoop2.x由HDFS、MapReduce和Yarn三个分支构成 - -HDFS:NN Federation、HA
- -MapReduce:运行在YARN上的MR
- -YARN:资源管理系统
11、HDFS解决的问题 - -单点故障
HDFS HA:通过主备NameNode解决
如果主NameNode发生故障,则切换到备NameNoe上 - -内存问题
HDFS Federation(联邦)
水平扩展,支持多个NameNode
每个NameNode分管一部分目录
所有NameNode共享所有DataNode存储资源 - -对HDFS使用者透明
12、HDFS HA - -单点故障
主NN对外提供服务,备NN同步主NN元数据,以待切换
所有DN同时向两个NN汇报数据块信息 - -两种切换选择
手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场所
自动切换:基于Zookeeper - -基于Zookeeper自动切换方案
Zookeeper Failover Controller:监控NN健康状态,并向Zookeeper注册NN
NN挂掉后,ZKFC为NN竞争锁,获得ZKFC锁的NN变为active
13、HDFS Federation - -通过多个NN/namespace把元数据的存储和管理分散到多个节点中,使到NN/namespace可以通过增加机器来进行水平扩展
- -能把单点NN的负载分散到多个节点中,在HDFS数据规模较大的时候不会降低HDFS的性能。可以通过多个namespace来隔离不同类型的应用,把不同类型应用的HDFS元数据的存储和管理分到不同的NN中
14、YARN - -Hadoop 2.0 新引入的资源管理系统,直接从MRV1演化而来的
核心思想:将MRV1中JobTracker的资源管理和任务调度两个功能分开,分别由Resource Manger和Application Master进程实现
ResourceManger:负责整个集群的资源管理和调度
Application Master:负载应用程序相关的事务,比如任务调度、任务监控和容错等 - -YARN的引入,使得多个计算框架可运行在一个集群中
每个应用程序对应一个ApplicationMaster
目前多个计算框架可以运用在YARN上,比如Map’reduce、spark、storm等
15、MapReduce on YARN - -Map Reduce on YARN:MRV2
- -将MapReduce作业直接运行在YARN上,而不是由Job’Tracker和TaskTracker构建的MRV1系统中
- -基本功能模块
YARN:负责资源管理和调度
MRaAppMaster:负责任务切分、任务调度、任务监控容错等
MapTask/ReduceTask:任务驱动引擎,与MRV1一致 - -每个Map Reduce作业对应一个MRAppMaster
MRAppMaster 任务调度
YARN将资源分配给MRAAppMaster
MRAppMaster进一步将资源发配给内部的任务 - -MRAppMaster容错
失败后,由YARN重新启动
任务失败后,MRAppMaster重新申请资源