hadoop之HDFS与MapReduce

  • Hadoop历史

        雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了咱们运行本身的搜索引擎所需的所有工具。包括全文搜索和Web爬虫。编程

        随后在2003年Google发表了一篇技术学术论文谷歌文件系统(GFS)。GFS也就是google File System,google公司为了存储海量搜索数据而设计的专用文件系统。数组

        2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。服务器

        2004年Google又发表了一篇技术学术论文MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行分析运算。分布式

        2005年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能。工具

        2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。oop

        不得不说Google和Yahoo对Hadoop的贡献功不可没。大数据

 

  • Hadoop核心

        Hadoop的核心就是HDFS和MapReduce,而二者只是理论基础,不是具体可以使用的高级应用,Hadoop旗下有不少经典子项目,好比HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。要想了解Hadoop,就必须知道HDFS和MapReduce是什么。搜索引擎

HDFSgoogle

HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。spa

 

HDFS的设计特色是:

一、大数据文件,很是适合上T级别的大文件或者一堆大数据文件的存储,若是文件只有几个G甚至更小就没啥意思了。

二、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不一样计算器上,它的意义在于读取文件时能够同时从多个主机取不一样区块的文件,多主机读取比单主机读取效率要高得多得都。

三、流式数据访问,一次写入屡次读写,这种模式跟传统文件不一样,它不支持动态改变文件内容,而是要求让文件一次写入就不作变化,要变化也只能在文件末添加内容。

四、廉价硬件,HDFS能够应用在普通PC机上,这种机制可以让给一些公司用几十台廉价的计算机就能够撑起一个大数据集群。

五、硬件故障,HDFS认为全部计算机均可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,若是其中一台主机失效,能够迅速找另外一块副本取文件。

 

HDFS的关键元素:

Block:将一个文件进行分块,一般是64M。

NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由惟一一台主机专门保存,固然这台主机若是出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----若是主NameNode失效,启动备用主机运行NameNode。

DataNode:分布在廉价的计算机上,用于存储Block块文件。


 

 

  • MapReduce

通俗说MapReduce是一套从海量·源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析咱们须要的内容就是MapReduce作的事了。

 

下面以一个计算海量数据最大值为例:一个银行有上亿储户,银行但愿找到存储金额最高的金额是多少,按照传统的计算方式,咱们会这样:

Java代码   收藏代码
  1. Long moneys[] ...  
  2. Long max = 0L;  
  3. for(int i=0;i<moneys.length;i++){  
  4.   if(moneys[i]>max){  
  5.     max = moneys[i];  
  6.   }  
  7. }  

 

 若是计算的数组长度少的话,这样实现是不会有问题的,仍是面对海量数据的时候就会有问题。

MapReduce会这样作:首先数字是分布存储在不一样块中的,以某几个块为一个Map,计算出Map中最大的值,而后将每一个Map中的最大值作Reduce操做,Reduce再取最大值给用户。


        MapReduce的基本原理就是:将大的数据分析分红小块逐个分析,最后再将提取出来的数据汇总分析,最终得到咱们想要的内容。固然怎么分块分析,怎么作Reduce操做很是复杂,Hadoop已经提供了数据分析的实现,咱们只须要编写简单的需求命令便可达成咱们想要的数据。

 

 

  • 总结

        总的来讲Hadoop适合应用于大数据存储和大数据分析的应用,适合于服务器几千台到几万台的集群运行,支持PB级的存储容量。

        Hadoop典型应用有:搜索、日志处理、推荐系统、数据分析、视频图像分析、数据保存等。

        但要知道,Hadoop的使用范围远小于SQL或Python之类的脚本语言,因此不要盲目使用Hadoop

相关文章
相关标签/搜索