Hadoop的思想之源:Google

     面对的数据和计算难题

            大量的网页怎么存储

            搜索算法
     带给我们的关键技术和思想,三篇论文
            GFS--------------->HDFS
            Map-Reduce-->MapReduce
            Bigtable--------->HBase

     Hadoop作者Doug cutting,名字来源于Doug Cutting儿子的玩具大象

提升处理速度方法:
        并行(分布式运行):提升速度的关键、分而治之
        计算向数据移动: 计算与数据在一起,移动计算较快

Hadoop 1.x 简介
    分布式存储系统 HDFS (Hadoop Distributed File System )
            分布式存储系统
            提供了高可靠性、高扩展性和高吞吐率的数据存储服务
    分布式计算框架 MapReduce
            分布式计算框架
            具有易于编程、高容错性和高扩展性等优点

数据模型
        文件被线性切割成块(Block):偏移量 offset ( byte )
          默认数据块大小为64MB (hadoop1.x , hadoop2.x默认128M),可配置
            若文件大小不到64MB ,则单独存成一个block。
            按大小被切分成若干个block ,存储到不同节点上
            默认情况下每个block都有三个副本
        文件的每个Block块大小一致,文件与文件可以不一致
        Block可以设置副本数,副本分散在不同集群节点中( 1、备份,2、来更好支持计算向数据移动 
            文件上传时可以设置Block大小和副本数
            已上传的文件 Block副本数可以调整,Block Size不可变更
            副本数不要超过节点数量
        只支持一次写入多次读取,同一时刻只有一个写入者,可以append追加数据


架构模型
    文件:
            元数据MetaData
                    (主)NameNode 节点保存文件元数据:单节点
                      HdfsClient 与 NameNode 交互元数据信息
            数据本身
                    (从)DataNode 节点保存文件 Block 数据:多节点
                      HdfsClient 与 DataNode 交互文件Block数据
                           从NameNode获取 block 块位置
                           DataNode 与 NameNode 保持心跳,提交 Block 列表给 NameNode

NameNode(NN)
        主要功能
                接受客户端的读写服务
                收集DataNode汇报的Block列表信息
                保存metadate信息包括:
                        文件 owership 和 permissions
                        文件大小,时间
                        Block列表:Block偏移量、位置信息
                                Block保存在哪个DataNode:由DataNode启动时上报( 位置信息是个变量,有可能因为机器损坏而变化 )
        基于内存存储 :不会和磁盘发生交换
                只存在内存中,由内存大小决定存储大小
                持久化:SNN
        NameNode的metadate信息在启动后会加载到内存
         metadata 存储到磁盘文件名为”fsimage”,以保证数据不会丢失( metadata 数据丢失则定位不到文件)
          Block 的位置信息不会保存到 fsimage
          edits 记录未持久化时对 内存metadata 的操作日志

 SecondaryNameNode(SNN)(Hadoop 2.x 由HA代替)
        主要工作:帮助NN合并edits log,减少NN启动时间。
                它不是NN的备份(但可以做备份)
                利用SecondaryNameNode可以 定期将NameNode中的内存数据定期的保存到硬盘中
                同时 又减小NameNode的持久化存储的运算压力并有一定备份的作用
        SNN执行合并时机:
                根据配置文件设置的时间间隔 fs.checkpoint.period  默认3600秒
                根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
    

DataNode(DN)
        主要工作:
                本地磁盘目录存储数据(Block),文件形式
                同时存储Block的元数据信息文件(记录block块的校验和等信息,保证数据的完整性)
                启动DN线程的时候会向NN汇报block信息:
            通过向NN发送心跳保持与其联系(3秒一次),
                如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并把其上的block 从备份的节点copy到新的DN
        Block的副本放置策略
                第一个副本:放置在上传文件的DN,如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
                第二个副本:放置在于第一个副本不同的 机架的节点上。
                第三个副本:与第二个副本相同机架的节 点。
                更多    副本:随机节点

HDFS优点:
        高容错性
                数据自动保存多个副本
                副本丢失后,自动恢复
        适合批处理
                移动计算而非数据
                数据位置暴露给计算框架
        适合大数据处理 
                GB 、TB 、甚至PB 级数据
                百万规模以上的文件数量
                10K+ 节点
        可构建在廉价机器上
                通过多副本提高可靠性,就不需要“高价的硬件上冗余”的服务器
                提供了容错和恢复机制
HDFS缺点:
        高延迟数据访问
                比如不支持毫秒级
               高吞吐率高但是读取或写入时间慢
        小文件存取
                占用NameNode 大量内存
                寻道时间超过读取时间
        并发写入、文件随机修改
                一个文件只能有一个写者
                仅支持append

HDFS写流程

                   
       1、Client:
        切分文件Block
        按Block 线性 和NN获取DN列表(副本数)
        验证DN列表后以更小的单位流式传输数据
        各节点,两两通信确定可用
        2、Block传输结束后:
        DN向NN汇报Block信息
        DN向Client汇报完成
        3、Client向NN汇报完成
        4、获取下一个Block存放的DN列表
        5、 。。。。。。
        6、最终Client汇报完成
        7、NN会在写流程更新文件状态
       ClientNode上传block块文件时,在datanode间是以 pipeline管道方式 传递:
                    既并不是一次性上传一个block块,之后再求这个datanode传递这个block给其他节点
                    而是传输的单位更小,datanode1边从客户端读文件,边给datanode2复制,
                    这样就能提高上传速度
HDFS读流程
        Client:
                和NN获取一部分Block副本位置列表
                线性 和DN获取Block,最终合并为一个文件
                在Block副本列表中按距离择优选取

 HDFS文件权限
        与Linux文件权限类似:
                r: read; w:write; x:execute,
                权限x对于文件忽略,对于文件夹表示是否允许访问其内容
       如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个 文件在HDFS中owner就是zhangsan。
         HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。HDFS 相信,你告诉我你是谁,我就认为你是谁。

安全模式
        1、 namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
        2、一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
             此刻namenode运行在安全模式。即namenode的文件系统对于客户端来说是只读的。
                (只可以显示目录,显示文件内容等。写、删除、重命名都会失败)。
        3、在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
                系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中,由datanode上报。
        4、当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,
           

添加新评论