现在的我们,生活在数据大爆炸的年代。国际数据公司已经预测在2020年,全球的数据总量将达到44ZB,经过单位换算后,至少在440亿TB以上,也就是说,全球每人一块1TB的硬盘都存储不下。
一些数据集的大小更远远超过了1TB,也就是说,数据的存储是一个要解决的问题。同时,硬盘技术也面临一个技术瓶颈,就是硬盘的传输速度(读数据的速度)的提升远远低于硬盘容量的提升。我们看下面这个表格:
年份 |
硬盘大小 |
传输速率 |
所需时间 |
---|---|---|---|
1990 |
1370MB |
4.4MB/s |
5分钟 |
2010 |
1TB主流 |
100MB/s |
3小时 |
可以看到,容量提升了将近1000倍,而传输速度才提升了20倍,读完一个硬盘的所需要的时间相对来说,更长更久了(已经违反了数据价值的即时性)。读数据都花了这么长时间,更不用说写数据了。
对于如何提高读取数据的效率,我们已经想到解决的方法了,那就是将一个数据集存储到多个硬盘里,然后并行读取。比如1T的数据,我们平均100份存储到100个1TB硬盘上,同时读取,那么读取完整个数据集的时间用不上两分钟。至于硬盘剩下的99%的容量,我们可以用来存储其他的数据集,这样就不会产生浪费。解决读取效率问题的同时,我们也解决了大数据的存储问题。
但是,我们同时对多个硬盘进行读/写操作时,又有了新的问题需要解决:
1、硬件故障问题。一旦使用多个硬件,相对来说,个别硬件产生故障的几率就高,为了避免数据丢失,最常见的做法就是复制(replication):文件系统保存数据的多个复本,一旦发生故障,就可以使用另外的复本。
2、读取数据的正确性问题。大数据时代的一个分析任务,就需要结合大部分数据来共同完成分析,因此从一个硬盘上读取的数据要与从其他99个硬盘上读取的数据结合起来使用。那么,在读取过程中,如何保证数据的正确性,就是一个很大的挑战。
有人会想,既然使用了多个硬盘,为什么不用配有多个硬盘的关系型数据库来进行数据的存储和分析呢?其实,这个主要取决于硬盘发展的一个技术限制,那就是需要寻址操作。我们从关系型数据库中读取数据包含着大量的寻址操作,那么寻址所产生的时间开销必然会大大的增加,再加上读取数据的时间,就更加漫长了。还有一个原因,关系型数据库不适合存储半结构化和非结构化的数据,而这个时代,半结构化和非结构化的数据占90%,而结构化数据只占10%。
针对于上述几个问题,Hadoop为我们提供了一个可靠的且可扩展的存储和分析平台,此外,由于Hadoop运行在商用硬件上且是开源的,因此Hadoop的使用成本是比较低了,在用户的承受范围内。
Hadoop是Apache基金会旗下的一个开源的分布式计算平台,是基于Java语言开发的,有很好的跨平台特性,并且可以部署在廉价的计算机集群中。用户无需了解分布式底层细节,就可以开发分布式程序,充分利用集群的威力进行高速运算和存储。
最初,Hadoop的核心技术是HDFS和MapReduce。
HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的简称,它具有较高的读写速度,很好的容错性和可伸缩性,为海量的数据提供了分布式存储,其冗余数据存储的方式很好的保证了数据的安全性。
MapReduce是一种用于并行处理大数据集的软件框架(编程模型)。用户可在无需了解底层细节的情况下,编写MapReduce程序进行分析和处理分布式文件系统上的数据,MapReduce保证了分析和处理数据的高效性。
因其在分布式环境下提供了高效的,海量的数据的优秀处理能力,Hadoop被公认为大数据行业中的标准开源软件。几乎所有主流的厂商如谷歌,雅虎,微软,淘宝等等这样的大公司都是围绕Hadoop进行提供开发工具,开源软件,商业化工具或技术服务的。
在Hadoop2.0以后,又引入了另一个核心技术:YARN(Yet Another Resource Negotiator)。它是一个任务调度和集群资源管理系统,主要有两类长期运行的守护线程来提供自己的核心服务:一类是用于管理集群上资源使用的资源管理器(Resouce Manager),另一类是运行在集群中各个节点上且能够启动和监控容器(container)的节点管理器(Node Manager)。
发展到现在的Hadoop3.x可以概括成以下五个模块:
Hadoop Common:由原来的Hadoop core更名而来。以前的版本中core包含HDFS、MapReduce及其其他公共部分。后来HDFS和MapReuce被分离出来作为独立的子项目,剩下的公共部分更名为Common。主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。
Hadoop HDFS:Hadoop的核心技术之一,分布式文件系统
Hadoop YARN:Hadoop2.0以后新增的一个核心技术,资源管理系统
Hadoop MapReduce:Hadoop的核心技术之一,编程模型,用于大规模数据集的并行计算。
Hadoop Ozone:HDFS的一个扩展方向,对象存储技术。
关于Hadoop这个名字的由来,该项目的创建者Doug Cutting是这样解释的:“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。”
Hadoop的发音是 [hædu:p]。
Hadoop由知名项目Apache Lucene的创始人道格·卡丁(doug Cutting)创建。
- 它起源于Apache Nutch 项目(一个网页爬取工具和搜索引擎系统,后来遇到大数据量的网页存储问题)。
- 2003年,谷歌发表的一篇论文(描述的是“谷歌分布式文件系统”,简称GFS)给了Apache Nutch项目的开发者灵感。
- 2004年,Nutch的开发者开始着手 NDFS(Nutch的分布式文件系统)。
- 2004年 ,谷歌又发表了一篇介绍MapReduce系统的论文。
- 2005年,Nutch项目实现了一个MapReduce系统
- 2006年,开发人员将NDFS和MapReduce移出Nutch项目形成一个子项目,命名Hadoop
- 2008年,Hadoop已称为Apache的顶级项目。
- 2008年4月,Hadoop打破世界记录,成为最快排序1TB数据的系统,排序时间为209秒
- 2009年,Hadoop把1TB数据的排序时间缩短到62秒。
- 从此名声大噪,现在很多公司都在使用,如雅虎,last.fm,FaceBook,《纽约时报》等等
目前Hadoop的版本发展,hadoop1.x > hadoop2.x > hadoop3.x
Hadoop因为是基于Java语言开发的,因此最理想的运行平台就是Linux系统了。它也支持多种编程语言,如C++,PHP等等。
也可以总结出以下优点:
- 高可靠型。Hadoop按位存储和处理数据的能力值得人们信赖。
- 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快,可以处理PB级数据。
- 高可扩展性。Hadoop的设计目标是可以高效的稳定的运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点。
- 高容错性。采用冗余数据存储方式,自动保存数据的多个复本,并且能够自动将失败的任务进行重新分配
- 成本低。Hadoop采用廉价的计算机集群,成本比较低,普通用户也可以使用自己的电脑来搭建Hadoop环境
下图为hadoop的生态系统:
我来介绍一下Hadoop生态系统中的一些软件:
用于供应,管理和监控Apache Hadoop集群的基于Web的工具。Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。Ambari还提供了一个用于查看集群健康状况的仪表板,例如热图以及可视化查看MapReduce,Pig和Hive应用程序的功能以及用于诊断其性能特征的功能,以方便用户使用。
数据序列化系统。可以将数据结构或者对象转换成便于存储和传输的格式,其设计目标是用于支持数据密集型应用,适合大规模数据的存储与交换。Avro提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC和简单动态语言集成等功能。
可扩展的多主数据库,没有单点故障。是一套开源分布式NoSQL数据库系统。
于管理大型分布式系统的数据收集系统(2000+以上的节点, 系统每天产生的监控数据量在T级别)。它构建在Hadoop的HDFS和MapReduce基础之上,继承了Hadoop的可伸缩性和鲁棒性。Chukwa包含一个强大和灵活的工具集,提供了数据的生成、收集、排序、去重、分析和展示等一系列功能,是Hadoop使用者、集群运营人员和管理人员的必备工具。
是一个可扩展的分布式数据库,支持大型表格的结构化数据存储。 HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
数据仓库基础架构,提供数据汇总和临时查询,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类SQL语言:Hive QL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务。
Apache旗下的一个开源项目,可扩展的机器学习和数据挖掘库
用于并行计算的高级数据流语言和执行框架。它简化了使用Hadoop进行数据分析的要求,提供了一个高层次的、面向领域的抽象语言:Pig Latin。
Hadoop数据的快速和通用计算引擎。 Spark提供了一个简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL,机器学习,流处理和图计算。
一个基于Hadoop YARN的通用数据流编程框架,它提供了一个强大而灵活的引擎,可执行任意DAG任务来处理批处理和交互式用例的数据Hado™生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)正在采用Tez,以替代Hadoop™MapReduce作为底层执行引擎。
一个面向分布式应用程序的高性能协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具,通常用于进行离线分析。它定义了一种数据流语言—Pig Latin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。
Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。这些数据包括网站的pv、用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。
--------------------------------------如有疑问,敬请留言-----------------------------------------