Hadoop概述
Hadoop名字的由来:
Hadoop这个名字并不是什么具有实际意义的单词,而是Hadoop项目作者的孩子给一个棕黄 色大象玩具的命名
Hadoop介绍:
- 在学习一门框架时,我们要善用官方文档,例如可以去官网查询官方对这个框架的准确定义,Hadoop官网对Hadoop的定义如下:
What Is Apache Hadoop?
The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.
The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.
翻译如下:
代码语言:javascript复制什么是Hadoop?
Apache的Hadoop项目是可靠的、可扩展的开发开源软件,是能够实现分布式计算的开源框架。
Apache Hadoop软件库是一个框架,Hadoop允许使用简单的编程模型在计算机集群中对大型数据集进行分布式处理。它被设计成从单个服务器扩展到数千台机器,每个机器都提供本地计算和存储。而不是依靠硬件来提供高可用性,由于框架本身的目的是检测和处理应用层的故障,因此在一组计算机上提供高可用性服务,每一台计算机都容易出现故障。
总结来说Hadoop就是:
- Apache基金会的一个开源的项目
- 它能够实现分布式存储 分布式计算平台
Hadoop官网地址如下:
http://hadoop.apache.org/
Hadoop能做什么:
- 搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务
- 搜索引擎,从海量的数据中筛选出用户所需要的数据
- 日志分析,是目前大数据技术最主流的应用场景,因为数据挖掘、分析大部分都是基于日志的
- 商业智能,我们都知道数据是人工智能的燃料,通过海量的数据能够训练出比较好的机器学习模型
- 数据挖掘,从海量的数据中挖掘出有价值的数据,为公司提供效益,实现数据变现,就像是挖矿一样
Hadoop框架包含了以下这些模块:
- Hadoop Common:这是一个通用的模块,是包含着其他Hadoop模块的一个通用模块
- Hadoop Distributed File System (HDFS):这是一个分布式文件系统,该模块提供一个对应用程序数据的高通量访问的分布式文件系统,简称HDFS
- Hadoop YARN:这是一个用于作业调度与集群资源管理的框架
- Hadoop MapReduce:基于YARN的大数据量并行处理系统,也就是实现分布式计算的框架
Hadoop核心组件之HDFS
HDFS是Hadoop核心组件之一,它用于实现分布式的文件系统。HDFS源自于Google的GFS论文,论文发表于2003年10月。由于GFS并没有开源,只是发表了论文,所以才发展出了HDFS,HDFS是GFS的克隆版。
HDFS特点:
- 扩展性,可以直接水平扩展,机器不够用了,直接增加机器即可
- 容错性,以多副本的方式存储在多个节点上
- 海量数据存储
- 将文件切分成指定大小的数据块并以多副本的存储在多个机器上,默认的数据块大小是128M
- 数据切分、多副本、容错等操作对用户是透明的,用户无需关注底层的数据切分
示意图:
上图中的Block Replication一栏表示的是数据块副本存储的格式信息,Datanodes则是示意数据节点中存储的一个个数据块。
我们以 /users/sameerp/data/part-0, r:2, {1,3},...
为例来简单说明一下这几个字段表示什么意思:
- /users/sameerp/data/part-0 表示的是文件名
- r:2 表示每个数据块有多少个副本,这里的数字为2,就表示每个数据块都有2个副本
- {1,3} 表示数据块的编号
结合起来就是 /users/sameerp/data/part-0 这个文件有两个数据块,编号分别是 1 和 3 ,而这两个数据块各自都有 2 个副本。我们从上图中的Datanodes一栏示意的数据节点里,也可以看到1和3都分别有两份,存储在了不同的数据节点上。
Hadoop核心组件之YARN
YARN是Hadoop核心组件之一,它用于实现资源管理、调度系统。YARN是Yet Another Resource Negotiator的首字母缩写,意为 “另一种资源协调者” 。YARN负责整个集群资源的管理和调度,例如有一个作业上来,那么要给这个作业分配多少cpu以及内存就是由YARN来完成。
YARN特点:
- 扩展性,如果机器资源不够用,则可以以增加机器的方式来提升资源的分配率
- 容错性,作业在执行过程当中,如果出现问题,YARN就会对这个作业进行一定次数的重设
- 多框架资源统一调度,这是Hadoop2.x才有的特性,也是非常重要的特性
示意图:
从上图中可以看到,YARN可以统一调度多种不同的框架,这样不管对运维人员还是开发人员来说,都减轻了不少负担。
Hadoop核心组件之MapReduce
MapReduce是Hadoop核心组件之一,它用于实现分布式并行计算。Hadoop中的MapReduce源自于Google的MapReduce论文,论文发表于2004年12月。MapReduce其实就是Google MapReduce的克隆版,是Google MapReduce的开源实现。
MapReduce特点:
- 扩展性,如果机器的计算能力不够用,则可以以增加机器的方式来提升集群的计算能力
- 容错性,当某个计算节点的机器挂掉,会把任务分配给其他节点的机器完成
- 海量数据离线处理
下图简单展示了MapReduce的计算流程:
上图是一个统计词频的计算流程,在Input环节中,我们把文本进行输入。然后在Splitting环节按照空格分割每个单词,接着在Mapping环节中把相同的单词都映射到同一个节点上,到了Shuffling环节就会对数据进行洗牌,最后到Reducing环节进行数据的整合,并将最终的结果写入到一个文件中。
Hadoop优势
Hadoop优势1——高可靠性:
- 数据存储:数据块多副本
- 数据计算:重新调度作业计算
Hadoop优势2——高扩展性:
- 存储 / 计算资源不够时,可以横向的线性扩展机器
- 一个集群可以包含数以千记的节点
Hadoop优势3——其他:
- 可以存储在廉价机器上,降低成本
- 非常成熟的生态圈
Hadoop发展史
- 2002年10月,Doug Cutting和Mike Cafarella创建了开源网页爬虫项目Nutch。
- 2003年10月,Google发表Google File System论文。
- 2004年7月,Doug Cutting和Mike Cafarella在Nutch中实现了类似GFS的功能,即后来HDFS的前身。
- 2004年10月,Google发表了MapReduce论文。
- 2005年2月,Mike Cafarella在Nutch中实现了MapReduce的最初版本。
- 2005年12月,开源搜索项目Nutch移植到新框架,使用MapReduce和NDFS(Nutch Distributed File System )来运行,在20个节点稳定运行。
- 2006年1月,Doug Cutting加入雅虎,Yahoo!提供一个专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。
- 2006年2月,Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。
- 2006年2月,Yahoo!的网格计算团队采用Hadoop。
- 2006年3月,Yahoo!建设了第一个Hadoop集群用于开发。
- 2006年4月,第一个Apache Hadoop发布。
- 2006年4月,在188个节点上(每个节点10GB)运行排序测试集需要47.9个小时。
- 2006年5月,Yahoo!建立了一个300个节点的Hadoop研究集群。
- 2006年5月,在500个节点上运行排序测试集需要42个小时(硬件配置比4月的更好)。
- 2006年11月,研究集群增加到600个节点。
- 2006年11月,Google发表了Bigtable论文,这最终激发了HBase的创建。
- 2006年12月,排序测试集在20个节点上运行1.8个小时,100个节点上运行3.3小时,500个节点上运行5.2小时,900个节点上运行7.8个小时。
- 2007年1月,研究集群增加到900个节点。
- 2007年4月,研究集群增加到两个1000个节点的集群。
- 2007年10月,第一个Hadoop用户组会议召开,社区贡献开始急剧上升。
- 2007年,百度开始使用Hadoop做离线处理。
- 2007年,中国移动开始在“大云”研究中使用Hadoop技术。
- 2008年,淘宝开始投入研究基于Hadoop的系统——云梯,并将其用于处理电子商务相关数据。
- 2008年1月,Hadoop成为Apache顶级项目。
- 2008年2月,Yahoo!运行了世界上最大的Hadoop应用,宣布其搜索引擎产品部署在一个拥有1万个内核的Hadoop集群上。
- 2008年4月,在900个节点上运行1TB排序测试集仅需209秒,成为世界最快。
- 2008年6月,Hadoop的第一个SQL框架——Hive成为了Hadoop的子项目。
- 2008年7月,Hadoop打破1TB数据排序基准测试记录。Yahoo!的一个Hadoop集群用209秒完成1TB数据的排序 ,比上一年的纪录保持者保持的297秒快了将近90秒。
- 2008年8月,第一个Hadoop商业化公司Cloudera成立。
- 2008年10月,研究集群每天装载10TB的数据。
- 2008年11月,Apache Pig的最初版本发布。
- 2009年3月,17个集群总共24000台机器。
- 2009 年3月,Cloudera推出世界上首个Hadoop发行版——CDH(Cloudera's Distribution including Apache Hadoop)平台,完全由开放源码软件组成。
- 2009年4月,赢得每分钟排序,59秒内排序500GB(在1400个节点上)和173分钟内排序100TB数据(在3400个节点上)。
- 2009年5月,Yahoo的团队使用Hadoop对1 TB的数据进行排序只花了62秒时间。
- 2009年6月,Cloudera的工程师Tom White编写的《Hadoop权威指南》初版出版,后被誉为Hadoop圣经。
- 2009年7月 ,Hadoop Core项目更名为Hadoop Common;
- 2009年7月 ,MapReduce 和 Hadoop Distributed File System (HDFS) 成为Hadoop项目的独立子项目。
- 2009年7月 ,Avro 和 Chukwa 成为Hadoop新的子项目。
- 2009年8月,Hadoop创始人Doug Cutting加入Cloudera担任首席架构师。
- 2009年10月,首届Hadoop World大会在纽约召开。
- 2010年5月 ,Avro脱离Hadoop项目,成为Apache顶级项目。
- 2010年5月 ,HBase脱离Hadoop项目,成为Apache顶级项目。
- 2010年5月,IBM提供了基于Hadoop 的大数据分析软件——InfoSphere BigInsights,包括基础版和企业版。
- 2010年9月,Hive( Facebook) 脱离Hadoop,成为Apache顶级项目。
- 2010年9月,Pig脱离Hadoop,成为Apache顶级项目。
- 2010年-2011年,扩大的Hadoop社区忙于建立大量的新组件(Crunch,Sqoop,Flume,Oozie等)来扩展Hadoop的使用场景和可用性。
- 2011年1月,ZooKeeper 脱离Hadoop,成为Apache顶级项目。
- 2011年3月,Apache Hadoop获得Media Guardian Innovation Awards 。
- 2011年3月, Platform Computing 宣布在它的Symphony软件中支持Hadoop MapReduce API。
- 2011年5月,Mapr Technologies公司推出分布式文件系统和MapReduce引擎——MapR Distribution for Apache Hadoop。
- 2011年5月,HCatalog 1.0发布。该项目由Hortonworks 在2010年3月份提出,HCatalog主要用于解决数据存储、元数据的问题,主要解决HDFS的瓶颈,它提供了一个地方来存储数据的状态信息,这使得 数据清理和归档工具可以很容易的进行处理。
- 2011年4月,SGI(Silicon Graphics International)基于SGI Rackable和CloudRack服务器产品线提供Hadoop优化的解决方案。
- 2011年5月,EMC为客户推出一种新的基于开源Hadoop解决方案的数据中心设备——GreenPlum HD,以助其满足客户日益增长的数据分析需求并加快利用开源数据分析软件。Greenplum是EMC在2010年7月收购的一家开源数据仓库公司。
- 2011年5月,在收购了Engenio之后, NetApp推出与Hadoop应用结合的产品E5400存储系统。
- 2011年6月,Calxeda公司发起了“开拓者行动”,一个由10家软件公司组成的团队将为基于Calxeda即将推出的ARM系统上芯片设计的服务器提供支持。并为Hadoop提供低功耗服务器技术。
- 2011年6月,数据集成供应商Informatica发布了其旗舰产品,产品设计初衷是处理当今事务和社会媒体所产生的海量数据,同时支持Hadoop。
- 2011年7月,Yahoo!和硅谷风险投资公司 Benchmark Capital创建了Hortonworks 公司,旨在让Hadoop更加可靠,并让企业用户更容易安装、管理和使用Hadoop。
- 2011年8月,Cloudera公布了一项有益于合作伙伴生态系统的计划——创建一个生态系统,以便硬件供应商、软件供应商以及系统集成商可以一起探索如何使用Hadoop更好的洞察数据。
- 2011年8月,Dell与Cloudera联合推出Hadoop解决方案——Cloudera Enterprise。Cloudera Enterprise基于Dell PowerEdge C2100机架服务器以及Dell PowerConnect 6248以太网交换机。
- 2012年3月,企业必须的重要功能HDFS NameNode HA被加入Hadoop主版本。
- 2012年8月,另外一个重要的企业适用功能YARN成为Hadoop子项目。
- 2012年10月,第一个Hadoop原生MPP查询引擎Impala加入到了Hadoop生态圈。
- 2014年2月,Spark逐渐代替MapReduce成为Hadoop的缺省执行引擎,并成为Apache基金会顶级项目。
- 2015年2月,Hortonworks和Pivotal抱团提出“Open Data Platform”的倡议,受到传统企业如Microsoft、IBM等企业支持,但其它两大Hadoop厂商Cloudera和MapR拒绝参与。
- 2015年10月,Cloudera公布继HBase以后的第一个Hadoop原生存储替代方案——Kudu。
- 2015年12月,Cloudera发起的Impala和Kudu项目加入Apache孵化器。
关于Hadoop发展史可以参考这篇文章,记录得比较详细:
- Hadoop十年解读与发展预测
Hadoop生态系统
狭义的Hadoop与广义的Hadoop:
- 狭义的Hadoop:是一个适合大数据分布式存储(HDFS)、分布式计算(MapReduce)和资源调度(YARN)的平台,也就是Hadoop框架
- 广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,Hadoop框架是其中最重要最基础的一个部分。生态系统中的每一子系统只解决某一个特定的问题域(甚至可能很窄),不搞统一型的一个全能系统,而是小而精的多个小系统。工作岗位招聘上写的Hadoop一般都是指广义的Hadoop,也就是Hadoop生态系统。
Hadoop生态系统示意图:
Hadoop生态系统的特点:
- 开源以及社区活跃
- 囊括了大数据数理的方方面面
- 成熟的生态圈
Hadoop常用发行版及选型
Hadoop就像Linux一样,也有多个发行版,常用发行版有以下几种:
- 原生态的Apache Hadoop
- CDH:Cloudera Distributed Hadoop
- HDP:Hortonworks Data Platform
原生态的Apache Hadoop框架在生产环境中不建议使用,因为Apache社区里的Hadoop生态系统的框架只是解决了单个框架的问题,如果想要将不同的框架,例如Hive、Hbase等框架综合起来使用的话,总是会产生jar包的冲突问题,而且这些冲突问题通常都是无法解决的。所以在学习的时候可以使用Apache Hadoop,但是生产环境中就不太建议使用了。
CDH以及HDP都是基于Apache Hadoop社区版衍生出来的,这两个发行版虽然是商业版的,但是不属于收费版本,除非需要提供技术服务,才需要收取一定的服务费用,并且它们也都是开源的。在国内绝大多数公司都会选择使用CDH版本,所以在这里也主要介绍CDH,选择CDH的主要理由如下:
- CDH对Hadoop版本的划分非常清晰,只有两个系列的版本(现在已经更新到CDH5.20了,基于hadoop2.x),分别是cdh4和cdh5,分别对应第一代Hadoop(Hadoop 1.0)和第二代Hadoop(Hadoop 2.0),相比而言,Apache版本则混乱得多;
- CDH文档清晰且丰富,很多采用Apache版本的用户都会阅读cdh提供的文档,包括安装文档、升级文档等。
而且CDH提供了一个CM组件,让我们在安装它的时候只需要在浏览器上的页面中,点击各种下一步就可以完成安装,比起Apache Hadoop的安装要方便很多,而且很多操作都可以在图形界面上完成,例如集群的搭建以及节点切换等。CDH与Spark的合作是非常好的,所以在CDH中对Spark的支持比较好。最主要的是一般情况下使用同一版本的CDH,就不会发生jar冲突的情况。
CDH的下载地址如下:
http://archive.cloudera.com/cdh5/cdh/5/
注:选择版本的时候尽量保持一致,例如hive选择了cdh5.7.0的话,那么其他框架也要选择cdh5.7.0,不然有可能会发生jar包的冲突。