• Hadoop入门


    来源:http://www.cnblogs.com/laov/p/3434917.html

      Hadoop核心

           HDFS(Hadoop Distributed File System) :Hadoop分布式文件系统。

        特点:保存多个副本,且提供容错机制,副本丢失或者宕机自动恢复,默认保存3份。

                运行在廉价的机器上

                       适合大数据处理。多大?越大越好。HDFS会默认将文件分割成block,默认64M为一个block。然后将block按键值对存储在HDFS上,并将键值对映射到内存中。如果小文件太多,那内存的负担会很重。

      HDFS也是按照Master和Slave的结构。分为NameNode 、SecondaryNameNode 、DataNode 这几个角色。

      NameNode:是Master节点,大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间。

      SecondaryNameNode:是小弟,辅助大领导。分担NameNode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。  

      DataNode:Slave节点,奴隶,负责存储client发来的数据块;执行数据块的读写操作。

         热备份:b是a的热备份,如果a坏掉,那么b会马上自动运行代替a的工作。

         冷备份:b是a的冷备份,如果a坏掉,那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

         fsimage:元数据镜像文件(文件系统的目录树)

         edits:元数据的操作日志(针对文件系统做的修改记录)

     namenode内存中存储的是:fsimage+sdits

      SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。

    工作原理:

      写操作:

       比如我将要把本地上一百兆的文件A写入HDFS文件系统上,将会发生那些事情呢??

       1.Client将文件按64M分割,分为若干个Block,这里文件被分为量块:Block1为64M,Block2为36M

     2.Client向NameNode发生写数据请求:领导,我想要把两个Block共一百M写入HDFS上去,批准否?

       3.领导收到请求,想了片刻,你有两个Block,我看看手下有几个奴隶(DataNode),好吧。我来分配下:

            Block1:host2,host1,host3

       Block2:host7,host8,host4

         然后把这些信息反馈给client,批准啦!至于领导怎么分配肯定是有规则的,不是凭空决定的,它的规则我们稍后说。

      4.client得到批准以后,就可以安安静静的向奴隶们(DataNode)发数据啦,发生过程是以流式写入的。

         流式写入过程:

            a. 先将64M的Block1按64K划分,我们把每一个64K称为package

            b. client将第一个package发送给host2;(根据领导的信息)

            c. host2接收完后,就会将这个package发送给host1,与此同时,client也不会闲着,向host2第二个package呢;

            d. host1接收到了host2发来的第一个package后,发送给host3,与此同时接收host2发来的第二个package

            以此类推,直到将block1发送完毕。

           e. 当Block1真的全部发送完了后,三个奴隶(host2,host1,host3)向领导(NameNode)报告任务完成了。而且【host2】奴隶2(谁叫我排第一个呢)还要和client沟通,我们这交易结束了哦。

          f. client虽然把Block1发送出去了,还有二胎Block2呢,也许后面还有N多胎呢!!!

          同样的套路,client根据领导的信息,将block2发送给另外的奴隶们(host7,host8,host4)

          直到将所有的Block全部写到HDFS上。

     最后,我们再来看看这些奴隶手上的数据:

      

           MapReduce:

    HDFS的运行原理

  • 相关阅读:
    实现一个微型数据库
    InstallShield 12 制作安装包
    .NET MVC学习笔记(一)
    递归和迭代的差别
    nginx 日志和监控
    c语言中的位移位操作
    Android应用程序绑定服务(bindService)的过程源码分析
    关于js中window.location.href,location.href,parent.location.href,top.location.href的使用方法
    iOS Crash 分析(文二)-崩溃日志组成
    js 字符串转换成数字的三种方法
  • 原文地址:https://www.cnblogs.com/Jims2016/p/6051890.html
Copyright © 2020-2023  润新知