Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据;另外一篇论文是“Mapreduce:Simplified Data Processing on Large Clusters”,介绍如何对分布式大规模数据进行处理。Doug Cutting在这两篇论文的启发下,基于OSS(Open Source software)的思想实现了这两篇论文中的原理,从而Hadoop诞生了。html
Hadoop是一种开源的适合大数据的分布式存储和处理的平台。做为一种大规模分布式数据处理平台,Hadoop已成为许多程序员的一项重要技能。node
如下内容有博友王路情整理。程序员
大数据时代已经到来,给咱们的生活、工做、思惟方式都带来变革。如何寻求大数据后面的价值,既是机遇又是挑战。不论是金融数据、仍是电商数据、又仍是社交数据、游戏数据… … 这些数据的规模、结构、增加的速度都给传统数据存储和处理技术带来巨大的考验。幸运的是,Hadoop的诞生和所构建成的生态系统给大数据的存储、处理和分析带来了曙光。数据库
不论是国外的著名公司Google、Yahoo!、微软、亚马逊、 EBay、FaceBook、Twitter、LinkedIn等和初创公司Cloudera、Hortonworks等,又仍是国内的著名公司中国移动、阿里巴巴、华为、腾讯、百度、网易、京东商城等,都在使用Hadoop及相关技术解决大规模化数据问题,以知足公司需求和创造商业价值。安全
例如:Yahoo! 的垃圾邮件识别和过滤、用户特征建模系统;Amazon.com(亚马逊)的协同过滤推荐系统;Facebook的Web日志分析;Twitter、LinkedIn的人脉寻找系统;淘宝商品推荐系统、淘宝搜索中的自定义筛选功能……这些应用都使用到Hadoop及其相关技术。app
“Hadoop能作什么?” ,归纳以下:框架
1)搜索引擎:这也正是Doug Cutting设计Hadoop的初衷,为了针对大规模的网页快速创建索引;分布式
2)大数据存储:利用Hadoop的分布式存储能力,例如数据备份、数据仓库等;oop
3)大数据处理:利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等;post
4)科学研究:Hadoop是一种分布式的开源框架,对于分布式系统有很大程度地参考价值。
Hadoop有三种不一样的模式操做,分别为单机模式、伪分布模式和全分布模式。每种模式的详细介绍以及单机模式的安装请阅读我以前的博客:[Hadoop] 在Ubuntu系统上一步步搭建Hadoop(单机模式),伪分布式模式和全分布式模式的相关操做请见王路情的博客。
Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Hadoop的核心模块之一,它主要解决Hadoop的大数据存储问题,其思想来源与Google的文件系统GFS。HDFS的主要特色:
HDFS中的两个重要角色:
[Namenode]
1)管理文件系统的命名空间。
2)记录 每一个文件数据快在各个Datanode上的位置和副本信息。
3)协调客户端对文件的访问。
4)记录命名空间内的改动或者空间本省属性的改动。
5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的做用。
[Datanode]
1)负责所在物理节点的存储管理。
2)一次写入,屡次读取(不修改)。
3)文件由数据库组成,通常状况下,数据块的大小为64MB。
4)数据尽可能散步到各个节点。
从社会学的角度来看,Datanode是HDFS的工做者,发挥按着Namenode的命令干活,而且把干活的进展和问题反馈到Namenode的做用。
客户端如何访问HDFS中一个文件呢?具体流程以下:
1)首先从Namenode得到组成这个文件的数据块位置列表。
2)接下来根据位置列表知道存储数据块的Datanode。
3)最后访问Datanode获取数据。
注意:Namenode并不参与数据实际传输。
数据存储系统,数据存储的可靠性相当重要。HDFS是如何保证其可靠性呢?它主要采用以下机理:
1)冗余副本策略,即全部数据都有副本,副本的数目能够在hdfs-site.xml中设置相应的复制因子。
2)机架策略,即HDFS的“机架感知”,通常在本机架存放一个副本,在其它机架再存放别的副本,这样能够防止机架失效时丢失数据,也能够提供带宽利用率。
3)心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,如果Datanode失效形成副本数量降低,而且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行从新复制。
4)安全模式,Namenode启动时会先通过一个“安全模式”阶段。
5)校验和,客户端获取数据经过检查校验和,发现数据块是否损坏,从而肯定是否要读取副本。
6)回收站,删除文件,会先到回收站/trash,其里面文件能够快速回复。
7)元数据保护,映像文件和事务日志是Namenode的核心数据,能够配置为拥有多个副本。
8)快照,支持存储某个时间点的映像,须要时可使数据重返这个时间点的状态。
如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。
NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
SecondaryNameNode:是一个小弟,分担大哥namenode的工做量;是NameNode的冷备份;合并fsimage和fsedits而后再发给namenode。
DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操做。
热备份:b是a的热备份,若是a坏掉。那么b立刻运行代替a的工做。
冷备份:b是a的冷备份,若是a坏掉。那么b不能立刻代替a工做。可是b上存储a的一些信息,减小a坏掉以后的损失。
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操做日志(针对文件系统作的修改操做记录)
namenode内存中存储的是=fsimage+edits。
SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,而后再发送给namenode。减小namenode的工做量。
有关HDFS详细的写操做和读操做请见:老魏的博客。
有关HDFS的优缺点介绍请见:虾皮工做室。
有一个关于HDFS工做原理的漫画版本,请见这里:HDFS漫画详解。
上部分提到Hadoop存储大数据的核心模块HDFS,这一部分介绍Hadoop处理大数据部分的核心模块MapReduce。
Apache Foundation对MapReduce的介绍:“Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.”
由此可知,Hadoop核心之MapReduce是一个软件框架,基于该框架可以容易地编写应用程序,这些应用程序可以运行在由上千个商用机器组成的大集群上,并以一种可靠的,具备容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。所以,对于MapReduce,能够简洁地认为,它是一个软件框架,海量数据是它的“菜”,它在大规模集群上以一种可靠且容错的方式并行地“烹饪这道菜”。
MapReduce主要是用于解决Hadoop大数据处理的。所谓大数据处理,即以价值为导向,对大数据加工、挖掘和优化等各类处理。
MapReduce擅长处理大数据,它为何具备这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务能够并行计算,彼此间几乎没有依赖关系。Reducer负责对map阶段的结果进行汇总。至于须要多少个Reducer,用户能够根据具体问题,经过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。
MapReduce的工做机制如图所示:
MapReduce的整个工做过程如上图所示,它包含以下4个独立的实体:
1)客户端,用来提交MapReduce做业。
2)jobtracker,用来协调做业的运行。
3)tasktracker,用来处理做业划分后的任务。
4)HDFS,用来在其它实体间共享做业文件。
MapReduce整个工做过程有序地包含以下工做环节:
1)做业的提交
2)做业的初始化
3)任务的分配
4)任务的执行
5)进程和状态的更新
6)做业的完成
有关MapReduce的详细工做细节,请见:《Hadoop权威指南(第二版)》第六章MapReduce工做机制。
[2] MapReduce:Simplified Data Processing on Large Clusters
[3] Hadoop in Action
[4] 王路情博客
[5] 《Hadoop权威指南(第二版)》