1.4 大数据
进入21世纪,随着互联网行业的爆发,海量的用户点击带来动辄几十亿甚至上百亿次的页面访问,开启了全球数据量急剧增长的新时代。2001年,Gartner分析员Doug Laney在3D Data Management:Controlling Data Volume, Velocity, and Variety一文中指出,数据增长有3个方向的挑战和机遇,分别是数据规模、传输速度和多样性。在此基础上,IBM进一步总结了如下4个方面的特征,得到业界的广泛认可。
(1)数量(Volume):数据量巨大,能够到达数百TB甚至PB级。
(2)速度(Velocity):数据的处理速度快,时效性强,很多场景要求实时更新。
(3)价值(Value):追求高质量、有价值的数据。
(4)多样性(Variety):数据类型繁多,不仅包括传统的格式化数据,还包括半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如电子邮件、文档、PDF、图片、音频和视频等)。
处理满足这些特征的数据的系统就是我们常说的大数据系统。处理大数据就像淘金和挖矿,不断剔除无用的数据,挖掘有价值的信息。如果大数据系统不能给企业带来价值,不能给用户带来更好的体验,这个系统就是无用的。但大数据在21世纪初却遇到很大的技术挑战。
(1)传统关系型数据库技术很难处理TB级以上的数据,需要新型的调度方式以实现高效分析。
(2)传统的关系型数据库都是库、表、字段结构,没有考虑其他类型。而大数据具有数据多样化的特征,不适合全部存储在关系型数据库内。
(3)数据产生的价值会随着时间的推移而降低,传统数据库难以实现数据的实时分析和实时展示。
2003年、2004年、2006年,Google先后发表了3篇论文,即Google File System、MapReduce:Simplified Data Processing on Large Clusters和Bigtable:A Distributed Storage System for Structured Data,分别提出GFS、MapReduce和BigTable,即分布式存储、分布式调度及分布式计算模型。这3篇论文奠定了随后大数据技术发展的基础。在此基础上,逐渐衍生出Hadoop开源大数据生态,成为应对以上诸多挑战的方案。Hadoop的历史最早要追溯到2004年,当时全球第一个全文文本搜索开源函数库创始人Doug Cutting正在开发能够处理数十亿网页搜索的分布式系统Nutch,他发现GFS和MapReduce正是自己所需要的理论基础,于是使用Java在Nutch中进行了实现。2006年,Doug Cutting将Nutch中的分布式文件系统HDFS和MapReduce合并成一个新的项目——Hadoop,并贡献给Apache开源基金会。作为Apache最重要的项目,Hadoop自推出以来就受到全球学术界和工业界的普遍关注,并得到广泛的推广和应用。随着企业与个人开发者不断做出贡献,越来越多的工具进入Hadoop大数据技术栈,以不可阻拦的磅礴气势引领了大数据时代。如今,伴随物联网和新兴互联网应用的崛起,更多的研发资源投入其中,大数据技术进入蓬勃发展的阶段,各类以SQL查询为表达方式的计算引擎如雨后春笋般出现,整体开始从“能用”转向“好用”。这些计算引擎针对不同的场景进行优化,采用用户熟悉的SQL语言,大大降低了大数据技术的使用成本,各种数据库时代的方法论开始回归。图1-2所示为当前Hadoop的主要技术生态。
图1-2 当前Hadoop的主要技术生态
(1)HDFS。HDFS是基于Google DFS实现的具有高容错、高吞吐量和高可用特性的分布式文件系统。HDFS非常适合存储大规模数据集,提供高吞吐量的数据访问,并且可以部署在廉价的机器上。它放宽了对POSIX的要求,允许以流的形式访问文件系统中的数据。
(2)MapReduce。MapReduce是基于Google MapReduce实现的分布式计算框架,能够对保存于HDFS上的数据进行分布式迭代处理和分析,适用于离线数据处理场景,内部处理流程主要划分为map和reduce两个阶段。
(3)HBase。HBase是基于Google BigTable实现的具有高可靠性和高性能、面向列、可伸缩的NoSQL分布式数据库,主要用于海量结构化和半结构化数据存储。
(4)Spark。Spark是一个快速、通用、可扩展、可容错的大数据计算引擎。目前其生态体系主要包括用于批数据处理的SparkRDD和SparkSQL、用于流数据处理的Spark Streaming和Structured Streaming、用于机器学习的Spark MLlib、用于图计算的Graphx及用于统计分析的SparkR,支持Java、Scala、Python、R等多种编程语言。
(5)Hive。Hive是基于Hadoop的数据仓库,可以将结构化的数据文件映射为数据库表,提供类似于SQL的HQL语言查询功能。Hive支持多种计算引擎,如Spark、MapReduce;支持多种存储格式,如TextFile、SequenceFile、RCFile、ORC和Parquet;支持多种压缩格式,如gzip、snappy和bzip2等。
(6)Pig。Pig是基于Hadoop的大规模数据分析平台,使用Pig Latin脚本语言描述数据流。Pig Latin的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算,为复杂的海量数据并行计算提供简单的操作和编程接口。
(7)Mahout。Mahout提供了可扩展的机器学习领域经典算法的实现,包括聚类、分类、推荐过滤等。
(8)Yarn。Yarn是一个通用资源调度平台,负责为运算程序分配资源和调度,它为集群在利用率、资源统一管理和数据共享等方面带来了巨大帮助。
(9)Oozie。Oozie是用于Hadoop平台的工作流调度引擎,可以根据时间频率或数据触发条件重复执行Oozie任务。
(10)Ambari。Ambari是基于Web的安装部署工具,支持多个Hadoop生态组件,包括对HDFS、MapReduce、Hive、Pig、HBase等的管理和监控。
(11)Zookeeper。Zookeeper为分布式应用程序提供协调服务,如主从协调、服务器节点动态上下线、统一配置管理和分布式共享锁等。作为Hadoop家族的分布式协作服务,几乎处处可以看到Zookeeper的身影。例如,Hadoop通过Zookeeper来克服单点故障,HBase通过Zookeeper选举集群主节点及保存元数据等。
(12)Flume。Flume是一个高可用、高可靠、分布式的海量日志采集、聚合和传输系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume也提供对数据进行处理并将其传输至各类数据接收方的能力。
(13)Sqoop。Sqoop是一个分布式数据迁移工具,可以将关系型数据库中的数据导入HDFS,也能将HDFS中的数据导入关系型数据库。