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重新申请资源