第一章 大数据概述

三次信息化浪潮

信息化浪潮 发生时间 标志 解决的问题 代表企业
第一次浪潮 1980年前后 个人计算机 信息处理 Intel、苹果
第二次浪潮 1995年前后 互联网 信息传输 雅虎、谷歌、阿里巴巴
第三次浪潮 2010年前后 物联网、云计算和大数据 信息爆炸 亚马逊、谷歌、阿里云

信息科技为大数据时代提供技术支撑

信息科技需要解决信息存储信息传输、信息处理三个核心问题。
因为数据量过大,所以尽可能使信息的处理靠近信息存储的位置,增加效率

“4v”

  • 数据量大(Volume)
  • 数据种类多(Variety)
  • 数据处理速度快(Velocity)
  • 数据价值密度低(Value)

    大数据对思维方式的影响

  1. 全样而非抽样
  2. 效率而非精确
  3. 相关而非因果

    大数据计算模式

    | 计算模式 | 解决问题 | 代表产品 | | —- | —- | —- | | 批处理计算 | 大规模数据的批量处理 | MapReduce、Spark | | 流计算 | 流数据的实时计算 | Storm、Flume、DStream等 | | 图计算 | 针对大规模图结构数据的处理 | | | 查询分析计算 | 大规模数据的存储管理和查询分析 | Pig、Hive |

云计算的关键技术

  • 虚拟化:讲一台计算机虚拟为多台逻辑计算机,虚拟化的资源可以是硬件(服务器、磁盘和网络),也可以是软件。
  • 分布式存储
  • 分布式计算
  • 多租户:大量用户能够共享同一堆栈的软硬件资源

Laas(infrastructure-as-a-Service);基础架构服务;建了一个房子(cpu,存放资源磁盘,网络,带宽),用户在里面做什么不管
Paas(Platform-as-a-Service);平台服务;用户在房子装修,地板,墙(建好平台)
Saas(Software-as-a-Service);提供给住户一些服务(邮件,视频,娱乐,互联网服务)

第二章 大数据处理架构Hadoop


Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,因此安装了Java虚拟机的环境即可运行Hadoop,所以其具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce。HDFS是针对谷歌文件系统(Google File System,GFS)的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。MapReduce是针对谷歌MapReduce的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce来整合分布式文件系统上的数据,可以保证分析和处理数据的高效性。借助于Hadoop,程序员可以轻松地编写分布式并行程序,并将其运行于廉价计算机集群上,完成海量数据的存储与计算。

大家看了这么一大段话,肯定很枯燥,别担心,下面来一些有趣的科技界的故事。

Hadoop的前世今生

在很久很久以前~~~~

谈到大数据,就不得不提一嘴全球最大的搜索引擎公司:Google

“Google来源于”“Googol”一词。“Googol”指的是10的100次幂(方),代表互联网上的海量资源。公司创建之初,肖恩·安德森在搜索该名字是否已经被注册时,将“Googol”误打成了“Google”。Google搜索引擎主要的搜索服务,包括网页、图片、音乐、视频、地图、新闻、问答,另外尖端科技还有谷歌火星、谷歌月球、谷歌自动驾驶汽车、智能家居、生物科技、生命科学、元宇宙等。
作为一个程序员,必须得承认,Google的伟大是目前国内多家互联网公司无法比拟的,至少在学术研究方面。Google可以说是在分布式系统方面的领军企业。Google在2004年提出MapReduce框架,颠覆了整个计算机界,以至于后来的风靡一时、目前在国内使用的Hadoop系统,也是以此为基础发展而来。在接下来几年的时间,Google陆续发表了各种先进的操作系统,引领着整个世界的分布式系统发展,能够达到处理每秒PB级的数据。
数据不会说谎,这家1998年才成立的高科技公司,用了十几年,做出了几十年的成绩。伟大需要用时间去评判,需要影响力的积累,Google现在可能不能被称之为伟大。但是我们有理由相信,如果Google一直坚持不作恶的原则,未来一定会在人类科技及生活的发展历史上画下浓墨重彩的一笔。
image.png

无独有偶,一位名叫Doug Cutting的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库(姑且理解为软件的功能组件),命名为Lucene。

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础,建立起完整的全文检索引擎。Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。
image.png

左为Doug Cutting,右为Lucene的LOGO
Lucene是用JAVA写成的,目标是为各种中小型应用软件加入全文检索功能。因为好用而且开源(代码公开),非常受程序员们的欢迎。早期的时候,这个项目被发布在Doug Cutting的个人网站和SourceForge(一个开源软件网站)。后来,2001年底,Lucene成为Apache软件基金会jakarta项目的一个子项目。
image.png
Apache软件基金会的LOGO,搞IT的应该都认识

Apache软件基金会是专门为支持开源软件项目而办的一个非盈利性组织。它作为一个群体(或者社区)交流技术、维护软件的媒介,把代码重写与维护的工作有效组织起来。这些开发者们逐渐地把他们这个群体称为“Apache组织”,把这个经过不断修正并改善的服务器软件命名为Apache服务器。

这个命名是根据北美当地的一支印第安部落而来,这支部落以高超的军事素养和超人的忍耐力著称,19世纪后半期对侵占他们领土的入侵者进行了反抗。为了对这支印第安部落表示敬仰之意,取该部落名称(Apache)作为服务器名。但一提到这个命名,这里还有一段广为流传的故事。因为这个服务器是在NCSA HTTPd服务器的基础之上,通过众人努力,不断地修正、打补丁(Patchy)的产物,被戏称为“A Patchy Server”(一个补丁服务器)。在这里,因为“A Patchy”与“Apache”是谐音,故最后正式命名为“Apache Server”。

2004年,Doug Cutting再接再励,在Lucene的基础上,和Apache开源伙伴Mike Cafarella合作,开发了一款可以代替当时的主流搜索的开源搜索引擎,命名为Nutch。
Nutch是一个建立在Lucene核心之上的网页搜索应用程序,可以开箱即用。它在Lucene的基础上加了网络爬虫和一些网页相关的功能,目的就是从一个简单的站内检索推广到全球网络的搜索上,就像Google一样。Nutch在业界的影响力比Lucene更大。
image.png

相对于那些商用的搜索引擎,Nutch作为开放源代码的搜索引擎,会更加透明,更值得大家信赖。所有主流的搜索引擎都采用私有的排序算法,而不会解释为什么一个网页会排在一个特定的位置。除此之外,有的搜索引擎依照网站所付的费用,而不是根据它们本身的价值进行排序。与它们不同,Nutch没有什么需要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。(比如百度搜索,有时候前几条全是广告QAQ哈哈哈哈)
大批网站采用了Nutch平台,大大降低了技术门槛,使低成本的普通计算机取代高价的Web服务器成为可能。甚至有一段时间,在硅谷有了一股用Nutch低成本创业的潮流。
随着时间的推移,无论是Google还是Nutch,都面临搜索对象“体积”不断增大的问题。尤其是Google,作为互联网搜索引擎,需要存储大量的网页,并不断优化自己的搜索算法,提升搜索效率。
image.png
后来的后来~~~~

在这个过程中,Google确实找到了不少好办法,并且无私地分享了出来。

2003年,Google发表了一篇技术学术论文,公开介绍了自己的谷歌文件系统GFSGoogle File System)。这是Google公司为了存储海量搜索数据而设计的专用文件系统。
第二年,也就是2004年,Doug Cutting基于GoogleGFS论文,实现了分布式文件存储系统,并将它命名为NDFSNutch Distributed File System)。
第一篇 大数据基础 - 图7
还是2004年,Google又发表了一篇技术学术论文,介绍自己的MapReduce编程模型,主要用于大规模数据集(大于1TB)的并行分析运算。
第二年(2005年),Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了上述功能。
第一篇 大数据基础 - 图8
2006年,当时依然很厉害的Yahoo(雅虎)公司,招安了Doug Cutting
雅虎这个名字对于现在的年轻人来说可能并不熟悉,但是它在70、80后一代中可是家喻户晓。雅虎创始人杨致远是那个时代年轻人心中的偶像,是中国互联网的领路人,马云的贵人和好友。雅虎是门户网站形式的创造者,搜索引擎的开拓者,它引领了世界互联网行业的发展!

一些学者曾做出评价:“Internet有朝一日将改变整个世界,但若没有Yahoo,恐怕连门还摸不着呢”,这句评价雅虎当之无愧!

这里要补充说明一下雅虎招安Doug的背景:在2004年之前,作为互联网开拓者的雅虎,是使用Google搜索引擎作为自家搜索服务的。在2004年开始,雅虎放弃了Google,开始自己研发搜索引擎。所以……

Hadoop的诞生!!!
或许是为了给新上任的自己先冲点业绩,加盟Yahoo之后,Doug CuttingNDFSMapReduce进行了升级改造,并重新命名为HadoopNDFS也改名为HDFS,全称是Hadoop Distributed File System)。
这就是后来大名鼎鼎的大数据框架系统Hadoop的由来。而Doug Cutting,则被人们称为Hadoop之父。
第一篇 大数据基础 - 图9
Hadoop这个名字,实际上是Doug Cutting他儿子的黄色玩具大象的名字。所以,HadoopLogo,就是一只奔跑的黄色大象。突然感觉到技术大牛的生活就是如此的枯燥且朴实。
第一篇 大数据基础 - 图10

我们继续往下说,还是2006年,Google又发论文了。这次,介绍了自己的BigTable。这是一种分布式数据存储系统,一种用来处理海量数据的非关系型数据库。
Doug Cutting当然没有放过,在自己的Hadoop系统里面,引入了BigTable,并命名为HBase
第一篇 大数据基础 - 图11
好吧,反正就是紧跟Google时代步伐,你出什么,我学什么。所以,Hadoop的核心部分,基本上都有Google的影子。
第一篇 大数据基础 - 图12
时间来到20081月,Hadoop成功上位,正式成为Apache基金会的顶级项目。
同年2月,Yahoo宣布建成了一个拥有1万个内核的Hadoop集群,并将自己的搜索引擎产品部署在上面。
7月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,用时209秒。此后,Hadoop便进入了高速发展期,直至现在。

  1. 大数据所有的框架都是分布式
  2. 基础架构,后面的其他框架都依赖Hadoop进行数据存储
  3. 主要解决,海量数据的存储和海量数据的分析计算问题
  4. 广义来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈

Hadoop三大发行版本


Apache、Cloudera、Hortonworks
Apache:版本原始,入门学习
Cloudera:2008年其成为第一个Hadoop的商业化公司,并在2009年推出第一个Hadoop的发行版。大型互联网企业中用的较多,使用免费,服务收费
Hortonworks:文档较好

Hadoop优势(四高)


高可靠性:Hadoop底层维护多个数据副本(默认三个),即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。**高效性:在MapReduce的思想下,Hadoop是并行工作的,加快任务处理速度。
高容错性:能够自动将失败的任务重新分配(一个节点挂点,自动将该节点的任务分配给其他节点)
成本低:Hadoop采用廉价的计算机集群
运行在Linux平台
支持多种编程语言

Hadoop组成(面试重点)

Hadoop1.x和Hadoop2.x区别

第一篇 大数据基础 - 图13
Hadoop1.x中,MapReduce既负责业务的逻辑运算又负责资源调度,耦合性较大。在Hadoop2.x中,Yarn负责资源调度,MapReduce只负责计算。

Hadoop生态系统

经过多年发展,Hadoop项目不断完善和成熟,目前已经包含多个子项目,逐渐形成一个丰富的Hadoop生态系统。

image.png

  • Common
    Common是为Hadoop其他子项目提供支持的常用工具,它主要包括FileSystem、RPC和串行化库,它们为在廉价的硬件上搭建云计算环境提供了基本的服务,并为运行在该平台上的软件开发提供了所需的API。
  • Avro
    用于数据库序列化的系统,它提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC的功能和简单的动态语言集成功能,其中代码生成器即不需要读写文件数据,也不需要使用或者实现RPC协议,它只是一个可选的对静态类型语言的实现。Hadoop的其他子项目(如HBase和Hive)的客户端与服务端之间的数据传输都采用了Avro。
    Avro系统依赖于模式,数据的读和写是在模式之下完成的,这样可以减少写入数据的开销,提高序列化的速度并缩减其大小,同时也可以方便动态脚本语言的使用,因为数据连同其模式都是自描述的。
    在RPC中,Avro系统客户端和服务器端通过握手协议进行模式交换,因此当客户端和服务器拥有彼此所有的模式时,不同模式下相同命名字段、丢失字段和附加字段等信息的一致性问题得以解决。
  • HDFS
    Hadoop分布式文件系统(Hadoop Distributed File System,HDFS),它是针对谷歌文件系统(Google File System,GFS)的开源实现。HDFS具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。它可以通过提供高吞吐率来访问应用程序的数据,适合那些具有超大数据集的应用程序,HDFS放宽了可移植操作系统接口的要求,这样可以通过流的形式访问文件系统中的数据,HDFS原本是开源的Apache项目Nutch的基础结构,最后它却成为了Hadoop基础架构之一。
  • HBase
    HBase是一个提供高可靠性、高性能、可伸缩、实时读写和分布式的列式数据库,一般采用HDFS作为其底层数据存储。HBase是针对谷歌BigTable的开源实现。HBase不同于一般的数据库,原因有两个:其一、HBase是一个适合于非结构化数据存储的数据库;其二,HBase是基于列而不是基于行的存储模式,HBase和BigTable使用相同的数据模型,用户将数据存储在一个表里,一个数据行拥有一个可选择的键和任务数量的列,由于HBase表是疏松的,用户可以给行定义各种不同类型的列,HBase主要用于需要随机访问、实时读写的大数据(Big Data)。
  • Pig
    Pig是一种数据流语言和运行环境,适合于使用Hadoop和MapReduce的平台来查询大型半结构化数据集。虽然MapReduce应用程序的编写不是十分复杂,但毕竟也是需要一定的开发经验。Pig的出现大大简化了Hadoop常见的工作任务,它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口
    Pig是一个相对简单的语言,它可以执行语句,因此,当我们需要从大型数据集中搜索满足某个给定搜索条件的记录时,采用Pig要比MapReduce具有明显的优势,前者只需要编写一个简单的脚本在集群中自动并行处理与分发,而后者则需要编写一个单独的MapReduce应用程序。
    Pig是一个对大型数据集进行分析、评估的平台,最突出的优势是它的结构能够经受住高度并行化的检验,这个特性使得它能够处理大型的数据集。Pig的底层由编译器组成,运行的时候会产生一些MapReduce程序序列。
  • Sqoop(SQL-to-Hadoop)
    Sqoop可以改进数据的互操作性,主要用来在Hadoop和关系数据库之间交换数据。通过Sqoop,我们可以方便地将数据从MySQL、Oracle、PostgreSQL等关系数据库中导入Hadoop(可以导人 HDFS、HBase或 Hive)、或者将数据从Hadoop导出到关系数据库,使得两者之间的数据迁移变得非常方便。Sqoop主要通过JDBC(Java DataBase Connectivity)与关系数据库进行交互,理论上,支持JDBC的关系数据库都可以用Sqoop与Hadoop进行数据交互。Sqoop是专门为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。
  • Chukwa
    Chukwa是开源的数据收集系统,用于监控和分析大型分布式系统的数据,Chukwa是在Hadoop的HDFS和MapReduce框架之上搭建的,集成了Hadoop的可扩展性和健壮性,通过HDFS来存储数据,并依赖MapReduce任务处理数据。Chukwa中也附带了灵活且强大的工具,用于显示、监视和分析数据结果,以便更好地利用已收集的数据。
  • Zookeeper
    Zookeeper是一个为分布式应用所涉及的开源协调服务,主要为用户提供同步、配置管理、分组和命名等服务,减轻分布式应用程序所承担的协调任务,Zookeeper的文件系统使用了我们所熟悉的目录树结构,Zookeeper是主要使用Java语言编写,同时支持C语言。

HDFS:负责存储

组件

  1. NameNode(nn):存储文件的元数据,如文件名、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
  2. DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和
  3. Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。(辅助NameNode工作)

image.png

Yarn概述

第一篇 大数据基础 - 图16
image.png

MapReduce架构概述

MapReduce分为两个阶段

  1. Map阶段并行处理输入数据
  2. Reduce阶段对Map结果进行汇总

image.png

Hadoop生态技术体系

image.png

推荐系统框架图

image.png