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的运行原理

原文地址:https://www.cnblogs.com/Jims2016/p/6051890.html