1. hadoop的来源?

    hadoop起源于Nutch,Nutch是一个网络搜索引擎,由 Doug Cutting 这个人创建的。Nutch主要用构建一个大型的全网搜索引擎 , 包括网页抓取 、 索引 、查询等功能 , 但随着抓取网页数量的增加 , 遇到了严重的可扩展性问题 , 即不能解决数十亿网页的存储和索引问题 。 之后 , 谷歌发表的两篇论文为该问题提供了可行的解决方案 。由于谷歌仅开源了思想而未开源代码 , Nutch 项目组便根据论
    文完成了一个开源实现 , 即 Nutch 的分布式文件系统 ( NDFS )。另一篇是 2004 年发表的关
    于谷歌分布式计算框架 MapReduce 的论文 。 该论文描述了谷歌内部最重要的分布式计算
    框架 MapReduce 的设计艺术 , 该框架可用于处理海量网页的索引问题 。 同样 , 由于谷歌未
    开源代码 , Nutch 的开发人员完成了一个开源实现 。 由于 NDFS 和 MapReduce 不仅适用于
    搜索领域 , 2006 年年初 , 开发人员便将其移出 Nutch , 成为 Lucene 的一个子项目 ,称为Hadoop 。 大约同一时间 , Doug Cutting 加入雅虎公司 , 且公司同意组织一个专门的团队继
    续发展 Hadoop 。 同年 2 月 , Apache Hadoop 项目正式启动以支持 MapReduce 和 HDFS 的独
    立发展 。 2008 年 1 月 , Hadoop 成为 Apache 顶级项目 , 迎来了它的快速发展期 。

  2. Hadoop包括那些核心东西?

    Hadoop框架中最核心的东西就是HDFS和MapReduce

    HDFS:(Hadoop distributed file system)分布式文件系统。

    MapReduce:是一个并行计算框框架

  3. HDFS的存储原理是什么?

    HDFS是一个分布式文件系统,它将一个文件分成一个或多个块,每个块默认大小是64M,(当然也可以自己调整大小)存储在DataNode节点上。

    一个标准的HDFS集群有3个守护进程组成。

    Namenode:集群中的数目有1个,主要用来存储文件系统的元数据信息。

            元数据中包含的信息有:文件的ownship和permissions;文件包含那些快,以及备份;块保存    在那些datanode上(启动时后,datanode自己会上报)。Namenode其本身是一个jetty服务器,用来进行名称查询的。在启动时候,会首先加载元数据信息至内存中,存储在磁盘文件名为fsp_w_picpath。

             但是block的位置信息不会保存到fsp_w_picpath内。这样设计的好处是即便datanode的IP地址或者主机名发生了改变,也不影响文件系统中元数据的存储。管理员只需拆下硬盘,将它们插入新的机箱,然后启动新机器,这依然不会影响元数据的存储。

    fsp_w_picpath:元数据镜像文件

    Editslog记录HDFS元数据的变化。

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

    SecondNameNode:是NameNode的冷备份;合并fsp_w_picpath和fsedits然后再发给namenode。

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

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

    namenode内存中存储的是=fsp_w_picpath+edits。

    4.NameNode和SecondNode之间的关系?

    客户端进行HDFS文件操作(创建,修改,复制,删除)时,首先会把这个操作记录在日志文件中(EditsLog)中。在日志记录这个操作后,NameNode修改内存中的文件系统的元数据信息。这个操作成功之后,日志都会被同步到文件系统中去。fsp_w_picpath文件(命名空间印象文件)是内存中元数据在硬盘上CheckPoint的结果,不能从硬盘上直接打开修改fsp_w_picpath文件。SecondDataNode的作用就是帮助DataNode将内存中的元数据CheckPoint到硬盘上。

    CHeckPoint的过程如下。

    (1)SecondNameNode通知NameNode生成新的日志文件,以后的日志都会记录在新的日志文件中。

    (2)SecondNameNode用HTTP Get从NameNode节点获得fsp_w_picpath文件及旧的日志文件。

    (3)SecondNameNode将fsp_w_picpath加载到内存中,并执行日志文件中的所有操作,然后生成新的fsp_w_picpath文件。

    (4)  SecondNameNode用HTTP Post将fsp_w_picpath文件传送给NameNode。

    (5)NameNode这时候,就可以使用新的fsp_w_picpath文件和新的日志文件,写入此次CheckPoint的时间。

    SecondNameNode周期性的合并,可以在配置文件中core-site.xml中进行设置。

    fs.checkpoint.period//时间周期    fs.checkpoint.size  //日志文件的大小。

    如果NameNode损坏,这时候就需要人工从NameNode恢复数据,会或多或少丢失一部分数据。

    所以尽量将其SecondNameNode和NameNode分开,放在不同的机器上。