《大数据导论》(清华大学出版社)同步教学

资源下载
  1. 二一教育资源

《大数据导论》(清华大学出版社)同步教学

资源简介

(共32张PPT)
大数据导论
BIG DATA
Technology
第1章 什么是大数据
本章主要内容如下。
(1)人类信息文明的发展。
(2)大数据时代的来临。
(3)大数据的主要特征。
(4)大数据的社会价值。
1.1 人类信息文明的发展
总体来看,人类的信息文明起源于电子计算机技术的产生,尤其电子采集、电子存储、电子处理和电子显示整个电子信息处理全部流程的技术实现,标志着整个人类信息文明相关技术链条的成熟。
随着整个信息链条节点的逐步壮大,人类信息文明终于被开启,并且极大地改变着人类生活的各个方面。
人类信息文明是人类文明极大发展后由量变到质变的产物,同时更集中体现了人类整体文明的发展智慧,极大地丰富了人类的生产和生活方式,尤其提高了人类生产的效率和生活的质量。
1.2 大数据时代的来临
根据IBM公司前首席执行官郭士纳的观点,IT领域基本每隔15年都会迎来一次重大的技术变革(见表 1-1)。1980 年前后,个人微型计算机(Microcomputer)逐步普及,尤其是随着制造技术的完善带来的计算机销售价格的大幅降低,使计算机逐步进入企业和千家万户,大大提高了整个社会的生产力,同时丰富了家庭的生活方式,人类迎来了第一次信息化浪潮。Intel、AMD、IBM、Apple、Microsoft、联想等信息企业成为第一次信息浪潮的“弄潮儿”。
信息技术的发展和不断的快速革新才造就了信息量的指数级增长,而信息量的不断堆积直接造就了大数据概念的出现。随着相关技术的不断成熟,人们终于迎来了大数据时代。
信息化浪潮 发生时间 标志 解决的问题 企业界代表
第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、Apple、Microsoft、联想等
第二次 1995年前后 互联网 信息传输 Yahoo、Google、阿里巴巴、百度、腾讯等
第三次 2010年前后 大数据 信息挖掘 Amazon、Google、IBM、VMWare、Cloudera等
表1-1 3次信息化浪潮
1.2.1 信息技术的发展
大数据时代的到来得益于信息科技的跨越式持久发展,而信息技术主要解决的是信息采集、信息存储、信息处理和信息显示4个核心问题。
这4个核心问题的相关技术的不断成熟才真的支撑了整个大数据时代的全面到来,具体的技术发展表现如下。
1.信息采集技术的不断完善和实时程度的不断提升
大数据时代的到来离不开信息的大量采集。数据采集技术随着人类信息文明的发展已经有了质的飞跃(见图 1-1)。
大数据技术主要依附于数字信息,就数字信息的采集技术而言,现在的数字信息采集方法已经十分完善,文字、图片、音频、视频等多维度的数字信息的采集手段和技术已经十分完备。数据的采集越来越实时化,随处可见实时音频直播和实时视频传播。可以说信息的采集环节已经基本实现实时化,而信息延迟主要在信息传输和信息处理阶段。
图1-1 信息采集的最新技术
2.信息存储技术的不断提升
计算机硬盘的快速发展促进了高安全性和高扩展性的商业领域信息存储乃至信息积累,而移动端闪存的快速发展则拉动了个体生活和社会公共事务方面的快速信息积累,两者相辅相成,共同提供了大数据时代的信息体量支撑。
3.信息处理速度和处理能力的急速提升
信息处理速度主要依靠计算机处理核心CPU的运算能力。
CPU单核心处理能力的演变长期遵循摩尔定律(见图 1-2),即CPU的运算速度随着时间呈现指数增长趋势,所以在很长时间内,行业的发展主要集中在提高CPU单个核心的运算主频上。
图1-2 CPU单核心运算速度摩尔定律
而随着摩尔定律的渐渐失效,尤其是伴随着提高CPU单核心主频带来的商业成本的成倍增加,直接促使技术模式由简单的提高单核心主频向多核心多线程发展,即增加单个CPU的处理核心的数量的同时增加内存和CPU联络的线程数量和通信带宽,这样就可以保证多核心的同时运转。CPU的实际运算因核心数量的增加,同样实现了运算速度的十分可观的高速提升。
4.信息显示技术的完备和日臻成熟
信息的显示技术尤其是可视化技术近些年有了突破性进展,特别是随着图形像素技术的不断提升,图形显示越来越细腻,图形显示水平已经越来越趋于逼真和生动化(见图1-3)。
图1-3 多彩的数据可视化手段
图形显示技术的发展突破了简单文字显示和图表显示的技术界限,信息显示由一维、二维显示拓展到了三维乃至更多维度显示。这样的显示技术带来了整个大数据行业的腾飞:首先,带给人们更好的视觉和感官享受,让信息技术更好、更快地融入信息时代;其次,带来了新的连带技术的发展,诸如图形化数据库、图像识别及人工智能等技术的全面发展;最后,信息显示的发展和日臻完善,给整个信息技术带来了从量到质的跨越式发展,并且会继续更加深远地影响整个大数据时代的发展。
1.2.2 数据产生方式的变革
大数据时代的到来依托于信息技术的不断革新和发展,但是仅靠信息技术的发展,还是不能完全促使大数据时代的最终来临。信息技术的发展只能为大数据时代的来临带来技术上的铺垫和积淀。大数据时代的来临必须依托于数据量的爆炸式增长和完善,而这在很大程度上取决于数据产生方式的变革。
可以说信息技术的发展促进了数据产生方式的变革,而反过来数据产生方式的革新也倒逼了信息技术的不断完善和发展,两者的发展是相辅相成和互相促进的。接下来就看看数据产生方式的变革历程(见图 1-4)。
图1-4 数据生产方式的变革
1.传统大型商业领域业务运营数据产生方式的变化
可以说传统大型商业领域业务运营数据的采集是整个数据行业的开始,因为银行、商铺、保险、证券、股票、零售等商业数据的隐私性和保密性要求,直接激发了人们对信息行业发展的需求。同时这些传统的商业部门也完成了整个大数据行业的早期数据积累,尤其是对数据量变方面的贡献。由于整个商业领域有大量的保密且极其重要的数据需要妥善保存和随时处理,同时伴随着商业全球化的扩张和整个世界经济在过去半个世纪尤其是第二次世界大战以后飞速的发展,都促使传统商业领域的数据量大幅增加。
商业数据由过去的波浪形增长方式变成了指数型的爆炸式增长方式。这种数据产生方式的变化直接倒逼了信息技术的发展,包括传统数据库技术、数据检索标准语言—SQL、大型商业数据中心、全球商业数据网络等新的数据技术的发展,而这些技术都为传统商业运营所产生的大量数据提供存储和处理。
2.互联网时代数据产生方式的变化
全球海底电缆连通世界五大洲,促使万维网全球数据连通;通信卫星的全球组网,再一次在移动端将整个人类联系在了一起,让每个人在智能手机的帮助下可以全球通达;与此同时,全球定位系统也实现向民用领域开放,目前以美国为首的GPS全球定位系统的民用服务已经到了十分便利和极其精确的程度。
海底电缆、移动通信和全球定位系统3个大的信息核心技术的发展,让人们终于迎来了互联网时代的大规模数据产生方式。这样的数据产生方式促成了数据量的量变。全球移动通信用户逐年增加,而每一位终端用户都是独立的鲜活个体,其任何一秒钟产生的共享数据量都是惊人的,同时是不断更新和活跃的,全球人类第一次真的汇聚在“地球村”。
3.物联网(IOT)加快了数据产生方式的变革
全球科技巨头都在积极布局物联网,而物联网的数据产生方式是完全实时的,这样的数据产生方式再次刷新了数据产生的量级,即便最简单的地下车库视频监控或商场的超市自动视频采集设备每天所产生的数据量都是天文数字,更别说全球联网实现的物联网全流程运作。
物联网旨在将实物世界与信息数据实现完全的对应和联络,物联网时代在很大程度上在于对世界存在的实物进行信息标记、调度、利用、处理、再利用,然后对整个链条的信息化实物进行掌控。而这样的信息模式会造成终端数据量的再次质的飞跃,同时更为重要的是造成实时数据流的爆炸式增长。这样的数据产生方式是前所未有的,也最终在互联网信息时代催生出大数据时代后再次把大数据时代的未来推到了前所未有的高度。
综上所述,大数据时代的发展实际经历了20世纪90年代到21世纪初的萌芽阶段。这个阶段与数据商业运营模式的产生阶段对应,主要的大数据研究方向为商务智能、数据仓库和数据建模,目的在于为大型传统商业提供业务咨询、开拓销售市场,以及维护客户关系。
随着互联网技术的不断成熟,尤其是Web 2.0时代的到来,大数据时代也发展到21世纪前10年的技术成熟期。
这个阶段也正好与互联网时代的大众数据产生阶段对应,主要的大数据研究方向是网络资源搜索、社交网络、大众媒体、政务大型对公平台等的平台大数据处理,目的在于更好地利用互联网系统产生的大量数据,更好地为人们的生产、生活和销售市场带来私人订制或者群体定制式的信息服务。2010年以后,大数据时代终于到了大规模应用期,这个阶段与物联网实时数据产生阶段对应,目的在于拓展大数据技术,实现人工智能。
1.3 大数据的主要特征
1.3.1 大数据的数据特征
大数据数据层次的特征是最先被整个大数据行业所认识、所定义的,其中最为经典的是大数据的4V特征,即数据量巨大(Huge Volume)、数据类型繁多(Variety)、信息处理速度快(Velocity)、价值密度低(Value)。
1.数据量巨大
根据著名咨询机构IDC(Internet Data Center)做出的预测,人类社会产生的数据一直都在以每年 50%的速度增长,基本每两年就增长一倍。这个预测被形象地称为“数据量摩尔定律”。这样的预测有望随大数据时代和人工智能时代的来临而打破。数据量的真实增长会是怎样的只有明天才有结论,但是数据量大却是大数据时代牢不可动的第一标签。
2.数据类型繁多
从数据产生方式的几次改变就可以体会到数据类型跟随时代的变革。大型商业运营阶段产生的数据类型多为传统的结构化数据。这些数据多为隐私性和安全性级别都十分高的商业、贸易、物流,以及财务、保险、股票等的传统支柱行业数据。而互联网时代产生的数据类型多为非结构化的电子商务交易数据、社交网络数据、图片定位数据,以及商业智能报表、监控录像、卫星遥感数据等非结构化和二维码像素数据。
互联网时代数据类型的改变也促进了新型数据库技术的大力发展,如NoSQL和NewSQL等数据库技术都得到了长足的发展,而这一切都是为了满足新数据类型的数据存储和高效利用的需要。IoT、人工智能时代的数据产生方式是多种多样的,其产生的数据类型也是多种多样的。
3.信息处理速度快
大量的数据、繁杂的数据类型,必然要求较快的信息处理速度。近年来计算机核心处理单元CPU的综合信息处理能力呈现指数级增长。实际上,CPU运算速度的增长分为两个阶段:第一个阶段,行业的关注重点是单个核心主频的不断提升,单核心的CPU速度经历了飞速的发展期;到了21世纪初,再提高单核心的主频已经出现了很大的工业困难,并且从成本的角度也不再符合整个市场的需求,因此行业领导者诸如Intel和AMD公司都把提高信息的处理速度的方式转变到多核心联动处理。
4.价值密度低
数据量虽然巨大,但是人们关注的其中有用的信息却不容易被发现,这是大数据时代数据的一个很大特点。数据量级巨大,人们需要的有价值的数据资料和数据决策却难以得到,这就需要专业人员根据各自行业的需求,通过特定的技术手段和研究方法,在海量的价值密度极低的数据海洋里找到合适的数据集,经过具体可行的数据分析和挖掘方法去得到可以利用的高密度价值的数据,促进低密度数据的高价值信息提取,从而实现大数据的科学合理利用。
1.3.2 大数据的技术特征
大数据的这4个着眼于数据层次的特征是被整个大数据行业公认的,也是本书必须予以尊重的。显然4V特征很好地描述了整个大数据的数据层次权威特征,但是大数据的主要特征显然不仅仅表现在数据层次。
从技术层次看,大数据的技术特征也是可圈可点的,而这些技术特征决定了我们不仅要着眼于大数据的数据层次,还要注重大数据行业技术的方方面面。这些技术特征基本可以总结为如下几点。
1.大数据时代的技术是开放性的
2.大数据时代的技术是平台化的
3.大数据时代的技术是基于新型的实验训练性质的数学算法实现的
4.大数据时代的技术最终期待实现人工智能管理和机器人代工
1.4 大数据的社会价值
大数据的社会价值主要体现在以下几个方面。
1.大数据为各个行业带来了行业规划和行业决策的整体升级及精准化
2.大数据为行业的整体发展注入更加公平和充沛的活力
3.大数据从实际意义上促进了信息技术产业与工业企业的深度融合
4.大数据极大地提升了企业自主创新能力,为新技术和新方法的出现提供高效信息咨询(共15张PPT)
第4章 大数据存储与管理
本章主要内容如下。
(1)数据的存储模式。
(2)大数据时代的存储管理系统。
4.1 数据存储概述
图4-1 机械硬盘
读/写原理:机械硬盘的磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置进行数据的读/写操作。机械硬盘中所有的盘片都装在一个旋转轴上。每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头连在一个磁头控制器上,磁头控制器负责各个磁头的运动。另外,机械硬盘在读取的时候,各个部件在做机械运动,所以会产生一定的热量和噪声。
稳定性:机械硬盘都是磁碟型的,数据存储在磁碟扇区里,所以机械硬盘不能摔,通电不能移动,否则易损坏。
优缺点:优点在于便宜,性价比高,可以用较少的花费获得较大容量,使用寿命长;缺点是相对固态硬盘来说,读/写速度较慢;防震性也没有固态硬盘好。
2.固态硬盘
组成:固态硬盘(Solid State Drive,SSD)是用固态电子存储芯片阵列制成的硬盘,由控制单元和存储单元(Flash芯片、DRAM芯片)组成,如图4-2所示。
图4-2 固态硬盘
读/写原理:与普通磁盘的数据读/写原理不同,固态硬盘的读取直接由控制单元读取存储单元,不存在机械运动,因此读取速度非常快。相对机械硬盘,固态硬盘的读取速度提高了两倍多。由于固态硬盘属于无机械部件及闪存芯片,所以具有发热量小、散热快等特点,而且没有机械马达和风扇,工作噪声值为0分贝。
稳定性:固态硬盘使用闪存颗粒(即内存、MP3、U盘等存储介质)制作而成,所以内部不存在任何机械部件,这样即使在高速移动甚至伴随翻转倾斜的情况下,也不会影响正常使用。而且在发生碰撞和震荡时,能够将数据丢失的可能性降到最小。相较机械硬盘,固态硬盘更可靠。
优缺点:固态硬盘的优点是读取和写入速度快,缺点是价格较高,有写入次数的限制,读/写有一定的寿命限制。
3.可记录光盘
常使用的可记录光盘分为CD-R、CD-RW、DVD±R/RW多种格式,如图4-3所示。
图4-3 可记录光盘
(1)CD-R是一次刻录、可多次读取的光盘,标准容量为650MB,现在常用的刻录容量为720MB。
(2)CD-RW是可以多次刻录、反复擦写的光盘,容量为650MB。
(3)目前主流的DVD刻录盘有两种—DVD-R/RW和DVD+R/RW。
4.U盘
U盘是一种Flash存储设备,是用Flash芯片(Flash RAM,电可擦写存储器)作为存储介质制作的移动存储器,如图4-4所示。U盘采用通用串行总线(Universal Serial Bus,USB)接口,可反复擦写的性能大大加强了数据的安全性。U盘使用极为方便,无须外接电源,支持即插即用和热插拔,只要用户计算机的主板上有USB接口,就可以使用。由U盘发展起来的MP3、MP4播放机也可当数据存储设备使用。
图4-4 U盘
5.闪存卡
闪存卡一般用于数码类的产品中,如用于手机、数码照相机、数码摄像机、数码录音笔等。常用类型有SD卡、MiniSD卡、MicroSD(TF)卡、CF卡、记忆棒等,如图4-5所示。
图4-5 闪存卡
6.数据存储介质的选择原则
数据存储介质的选择主要考虑如下原则。
(1)耐久性
耐久性能高的存储介质不容易损坏,降低了数据损失的风险。因而存储数据应选用对环境要求低、不容易损伤、耐久性能高的介质。
(2)容量恰当
介质的高容量不仅有利于存储空间的减少,还便于管理,但会使存储的成本增加。对大容量数据,如果存储介质容量低,将不利于存储数据的完整。介质的存储容量最好与所管理的数据量大小相匹配。
(3)低费用
介质的价格低,可以减少存储管理与系统运行的费用。
(4)广泛的可接受性
为减少IT业界对存储介质不支持的风险,我们应当选用具有广泛可使用性的存储介质,特别应注意选用能满足工业标准的存储介质。(共17张PPT)
本章主要内容如下。
(1)数据的存储模式。
(2)大数据时代的存储管理系统。
第4章 大数据存储与管理
图4-6 数据的存储模式
1.DAS
DAS 将存储设备通过 SCSI 接口直接连接到一台服务器上使用,如图 4-7所示。
DAS是通过小型计算机系统接口(Small Computer System Interface,SCSI),在计算机与外部设备之间进行连接。
图4-7 DAS(1)
DAS依赖主机的操作系统来实现数据的读/写、管理、备份等工作,如图4-8所示。
图4-8 DAS(2)
(1)DAS的优点
配置简单:DAS购置成本低,配置简单,仅仅是一个外接的SCSI接口。
使用简单:使用方法与使用本机硬盘并无太大差别。
使用广泛:在中小型企业中,应用十分广泛。
(2)DAS的缺点
扩展性差:在新的应用需求出现时,需要为新增的服务器单独配置新的存储设备。
资源利用率低:不同的应用服务器存储的数据量随着业务发展出现不同,有部分应用存储空间不够,而另一些却有大量的存储空间。
可管理性差:数据分散在应用服务器各自的存储设备上,不便于集中管理、分析和使用。
异构化严重:企业在发展过程中采购不同厂商、不同型号的存储设备,设备之间的异构化严重,使维护成本很高。
I/O瓶颈:SCSI接口处理能力会成为数据读/写的瓶颈。
2.NAS
NAS存储设备是一种带有操作系统的存储设备,也叫作网络文件服务器。NAS设备直接连接到TCP/IP网络上,网络服务器通过TCP/IP网络存取与管理数据。
应用:文档、图片、电影的共享等。
典型的NAS架构如图4-9所示。
图4-9 典型的NAS架构
(1)NAS的优点
即插即用:容易部署,把NAS设备接入以太网就可以使用。
支持多平台:可以使用Linux等主流操作系统。
(2)NAS的缺点
NAS设备与客户机通过以太网连接,NAS使用网络进行数据的备份和恢复,因此数据存储或备份时都会占用网络带宽。
存储数据通过普通数据网络传输,因此容易产生数据泄漏的安全问题。
只能以文件级访问,不适合块级的应用。
3.SAN
SAN是一个采用网状通道(Fibre Channel,FC)技术,通过FC交换机连接存储阵列和应用服务器,建立专用于数据存储的区域网络,如图4-10所示。
SAN支持数以百计的磁盘,提供了海量的存储空间,解决了大容量存储问题;这个海量空间可以从逻辑层面上按需要分成不同大小的逻辑单元,再分配给应用服务器。SAN允许企业独立地增加它们的存储容量。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据放在哪里,服务器都可以直接存取所需的数据。
图4-10 SAN
(1)SAN的优点
传输速度快:SAN采用高速的传输媒介,并且SAN网络独立于应用服务器系统之外,因此存取速度很快。
扩展性强:SAN的基础是一个专用网络,增加一定的存储空间或增加几台应用服务器,都非常方便。
磁盘使用率高:整合了存储设备和采用了虚拟化技术,因而整体空间的使用率大幅提升。
(2)SAN的缺点
价格贵:不论是SAN阵列柜还是SAN必需的光纤通道交换机,其价格都是十分昂贵的,就连服务器上使用的光通道卡的价格也是不易被小型企业所接受的。
异地部署困难:需要单独建立光纤网络,异地扩展比较困难。
4.不同应用场景对应的存储选择
CPU 密集的应用环境:某种应用极其消耗CPU资源,其程序内部逻辑复杂而且对磁盘访问量不高。这种程序在运行时根本不用或只需少量读取磁盘上的数据,只是在程序载入的时候读入一点点程序数据而已。进程运行后便会使CPU的核心处于全速状态,这会造成其他进程在同一时间只能获得少量的执行时间,进而严重影响性能。
I/O密集的应用环境:某种程序的内部逻辑并不复杂、耗费的CPU资源不多,但要随时读取磁盘上的数据,如FTP服务器。
对高并发随机小块I/O或共享访问文件的应用环境:我们往往会采用NAS。因为对小块的I/O读/写并不会对网络造成大的影响,并且NAS提供了网络文件共享协议。(共16张PPT)
大数据导论
(清华大学出版社)
本章主要内容如下。
(1)数据的存储模式。
(2)大数据时代的存储管理系统。
第4章 大数据存储与管理
4.2 大数据时代的存储管理系统
在普通PC中,目前已经被广泛使用的存储管理系统有普通的文件系统、键-值数据库和关系型数据库。
在大数据时代,普通PC的存储容量已经无法满足大数据需求,需要进行存储技术的变革,我们采用分布式平台来存储大数据。
4.2.1 文件系统
1.文件系统简介
在计算机中,文件系统(File System)是提供了命名文件及放置文件的逻辑存储和恢复等功能的系统。DOS、Windows、OS/2、Macintosh和UNIX-based操作系统都有文件系统。在此系统中,文件被放置在分等级的(树状)结构中的某一处。文件被放进目录(Windows中的文件夹)或子目录。
文件系统是软件系统的一部分,它的存在使应用可以方便地使用抽象命名的数据对象和大小可变的空间。
2.操作系统和文件系统的关系
文件系统是操作系统用于存储设备(磁盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件机构被称为文件管理系统,简称文件系统。文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,允许用户进行存入、读出、修改等操作。
图4-11 计算机集群的基本架构
2.分布式文件系统的整体结构
如图 4-12 所示,分布式文件系统在物理结构上是由计算机集群中的多个节点构成的。这些节点分为两类,一类叫“主节点(Master Node)”或者也被称为“名称节点(NameNode)”,另一类叫“从节点(Slave Node)”或者也被称为“数据节点(DataNode)”。
图4-12 分布式文件系统的整体结构
3.Apache下的分布式文件系统
Hadoop是Apache软件基金会旗下的一个分布式系统基础架构。Hadoop框架最核心的设计就是HDFS、MapReduce,为海量的数据提供存储和计算。
MapReduce主要运用于分布式计算,HDFS主要是Hadoop的存储,用于海量数据的存储。HDFS 是一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合那些需要处理海量数据集的应用程序。
HDFS使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命名文件等。
在HDFS中,一个文件被分成多个块,以块作为存储单位,块的作用如下。
(1)支持大规模文件存储
(2)简化系统设计
(3)适合数据备份
HDFS采用了主从(Master/Slave)结构模型,如图4-13所示。一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。
名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。
集群中的数据节点负责处理客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。
每个数据节点的数据实际上是保存在本地Linux文件系统中的。
图4-13 HDFS的体系结构
图4-14 HDFS主要组件的功能
(1)NameNode
名称节点(NameNode)存储元数据,元数据被保存在内存中(磁盘上也保存了一份),保存文件Block、DataNode之间的映射关系;NameNode记录了每个文件中各个块所在的DataNode的位置信息。
元数据的内容包括文件的复制等级、修改和访问时间、访问权限、块大小及组成文件的块。对目录来说,NameNode存储修改时间、权限和配额元数据。
(2)DataNode
数据节点(DataNode)负责数据的存储和读取,数据被保存在磁盘中,维护BlockId到DataNode本地文件的映射关系。DataNode定期向NameNode发送Block信息以保持联系,如果NameNode在一定的时间内没有收到DataNode的Block信息,则认为DataNode已经失效了,NameNode会复制其上的Block到其他DataNode。(共19张PPT)
本章主要内容如下。
(1)数据的存储模式。
(2)大数据时代的存储管理系统。
第4章 大数据存储与管理
在普通PC中,目前已经被广泛使用的存储管理系统有普通的文件系统、键-值数据库和关系型数据库。
在大数据时代,普通PC的存储容量已经无法满足大数据需求,需要进行存储技术的变革,我们采用分布式平台来存储大数据。
4.2 大数据时代的存储管理系统
4.2.3 数据库
数据库(DataBase)就是一个存放数据的仓库。这个仓库是按照一定的数据结构(数据结构是数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方式来管理数据库里的数据。
数据库家族如图4-15所示。
图4-15 数据库家族
1.关系型数据库
关系型数据库把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
在关系型数据库中,程序对数据的操作几乎全部建立在一个或多个关系表格上,即程序通过对这些关联表的表格分类、合并、连接或选取等运算来实现对数据的管理。
2.非关系型数据库
非关系型数据库也被称为NoSQL数据库,如图4-16所示。
NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底否定关系型数据库,而是成为传统关系型数据库的一个有效补充。
NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
图4-16 非关系型数据库
NoSQL是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论“大一统”的局面。NoSQL数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语(NoSQL)在2009年初得到了广泛认同。
当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求,而NoSQL存储就是满足这个需求而诞生的。
NoSQL典型产品包括Memcached、Redis、MongoDB、HBase等。
4.2.4 键-值数据库
键-值(Key-Value)数据库是一种NoSQL数据库,用户可以通过Key来添加、查询或者删除数据。因为使用Key主键访问,所以会获得很高的性能及扩展性。键-值存储非常适合不涉及过多数据关系和业务关系的数据,同时能有效减少读/写磁盘的次数,比SQL数据库存储拥有更好的读/写性能。
键-值数据库主要使用一个哈希表,这个表有一个特定的键和一个指针指向特定的数据。Key-Value模型对IT系统的优势在于简单、易部署、高并发。
1.键-值对的存储
键-值对存储是数据库最简单的组织形式。键-值对存储通常都有如下接口。
(1)Get(Key):获取之前存储于某标示符“Key”之下的一些数据,如果“Key”下没有数据则报错。
(2)Set(Key, Value):将“Value”存储到存储空间中某标示符“Key”下,使我们可以通过调用相同的“Key”来访问它。如果“Key”下已经有了一些数据,旧的数据将被替换。
(3)Delete(key):删除存储在“Key”下的数据。
2.键-值数据库的优缺点
优点:在键已知的情况下查找内容,键-值数据库的访问速度比关系型数据库快好几个数量级。
缺点:在键未知的情况下查找内容,键-值数据库的访问速度是非常糟糕的。因为键-值数据库不知道存储的数据是结构的还是内容的,它没有关系型数据库中那样的数据结构,无法像SQL那样用WHERE语句或者通过任何形式的过滤来请求数据库中的一部分数据,它必须遍历所有的键,获取它们对应的值,进行某种用户所需要的过滤,然后保留用户想要的数据。
市场上流行的键-值数据库有Memcached、Redis、MemcacheDB、Berkeley DB。
4.2.5 分布式数据库
HBase(分布式数据库)是一种NoSQL(非关系型数据库)模型,经常用于分布式环境里,是一个分布式的结构化数据存储系统,是Apache的一个开源项目,是Google公司的BigTable的开源实现。
HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群来处理超过 10 亿行数据和数百万列元素组成的数据表。
HBase是一个疏松的、分布式的、已排序的多维度持久化的列族数据库。
列存储数据库将数据存在列族(column family)中,一个列族存储经常被一起查询的相关数据。例如,如果我们有一个Person类,我们通常会一起查询其姓名和年龄,而不是薪资。在这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另外一个列族中。
若要使用HBase,我们需要了解如下6个重要概念。
(1)表(table):HBase采用表来组织数据。
(2)行(row):每个表都由行组成,每个行由行键(rowkey)来标识。
(3)列族(column family):一个table有多个列族。
(4)列限定符:是column family的分类,每个column family可以有不同的分类。
(5)时间戳(timestamp):时间戳用来区分数据的不同版本。
(6)单元格(cell):在table中,通过行、列族、子列、时间戳来确定一个cell,cell中存储的数据没有数据类型,是字节数组byte[] 。
HBase的结构示例如图4-17所示。
图4-17 HBase的结构示例
在HBase数据库表中插入数据应使用put操作。例如,使用如下语句可向数据库表中插入3条数据。
put 't1','rowkey001','f1:col1','value01b'
put 't1','rowkey001','f1:col2','value02'
put 't1','rowkey001','f2:col1','valuef2col1'
查看刚才插入的数据使用scan命令,结果如图4-18所示。(共36张PPT)
大数据导论
第4章 大数据存储与管理
本章主要内容如下。
(1)数据的存储模式。
(2)大数据时代的存储管理系统。
4.2 大数据时代的存储管理系统
在普通PC中,目前已经被广泛使用的存储管理系统有普通的文件系统、键-值数据库和关系型数据库。
在大数据时代,普通PC的存储容量已经无法满足大数据需求,需要进行存储技术的变革,我们采用分布式平台来存储大数据。
4.2.6 关系型数据库
1.关系型数据库的特点
(1)关系型数据库,是建立在关系模型基础上的数据库,现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
(2)所谓关系模型就是“一对一、一对多、多对多”等二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
(3)关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表,一组表组成了数据库。
(4)关系型数据库里面的数据是按照“数据结构”来组织的,因为有了“数据结构”,所以关系型数据库里面的数据是“条理化”的。
2.关系型数据库的基本概念
(1)表:表是一系列二维数组的集合,用来代表和存储数据对象之间的关系。它由纵向的列和横向的行组成。
(2)行:也称元组或记录,在表中是一条横向的数据集合。
(3)列:也称字段,在表中是一条纵向的数据集合,列也定义了表中的数据结构。
3.结构化查询语言
结构化查询语言(Structured Query Language,SQL)用于对关系型数据库里的数据和表进行查询、更新和管理。
常用操作如下。
创建数据库表:CREATE DATABASE <数据库名> [其他参数]
查询:SELECT * FROM 表 WHERE 条件表达式。
增加:INSERT INTO 表名 (列名1,列名2,…) VALUES (列值1,列值2,…)。
删除:DELETE FROM 表名[WHERE 条件表达式]。
修改:UPDATE 表名 SET 列名=值[WHERE 条件表达式]。
4.事务的ACID特性
事务的 ACID 特性包括:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
(1)原子性:整个事务中的所有操作,要么全部成功,要么全部失败,没有中间状态。
(2)一致性:事务是按照预期生效的,一致性的核心一部分靠原子性实现,另一部分靠逻辑实现。
(3)隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的。事务的隔离级别一共有4种状态,可以在数据库中进行设置。
(4)持久性:在事务完成以后,保证事务对数据库所做的更改被持久地保存在数据库之中。
常见的关系型数据库有Oracle、SQL Server、MySQL、SQLite、PostgreSQL、Sqlite。
4.2.7 数据仓库
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合。
Hive是一个构建于Hadoop上的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。它的底层依赖分布式文件系统HDFS存储数据,并使用分布式并行计算模型MapReduce处理数据。Hive定义了简单的类似于SQL的查询语言HiveQL,用户可以通过编写的HiveQL语句运行MapReduce任务。
下面通过实例简单介绍Hive的常见操作。
1.创建表
以下语句在Hive数据库中创建表usr,含有3个属性,即id、name、age。
hive> use hive;
hive>create table if not exists usr(id bigint,name string,age int);
以下语句在Hive数据库中,创建表usr,含有3个属性,即id、name、age,存储路径为“/usr/local/hive/warehouse/hive/usr”。
hive>create table if not exists hive.usr(id bigint,name string,age int)
>location '/usr/local/hive/warehouse/hive/usr';
2.查看数据库
以下语句查看Hive中包含的所有数据库。
以下语句查看Hive中以h开头的所有数据库。
hive> show databases;
hive>show databases like h.* ;
3.查看表和视图
以下语句查看数据库Hive中所有的表和视图。
以下语句查看数据库Hive中以u开头的所有表和视图。
hive> use hive;
hive> show tables;
hive> show tables in hive like u.* ;
4.向表中加载数据
以下语句把目录“/usr/local/data”下的数据文件中的数据加载进usr表并覆盖原有数据。
ive> load data local inpath /usr/local/data overwrite into table usr;
以下语句把目录“/usr/local/data”下的数据文件中的数据加载到usr表,且不覆盖原有数据。
以下语句把分布式文件系统目录“hdfs://master_server/usr/ local/data”下的数据文件中的数据加载到usr表,并覆盖原有数据。
hive> load data local inpath /usr/local/data into table usr;
hive> load data inpath hdfs://master_server/usr/local/data
>overwrite into table usr;
图4-19所示是Hive的应用流程。第一个阶段是从各种数据源获取数据,数据源可以是文档、关系型数据库等;第二个阶段是数据被抽取转换和加载存放到数据仓库中;第三个阶段是分析和挖掘数据仓库中存储的数据,然后应用到各种场景中,如数据挖掘系统、报表分析系统、查询应用等。
图4-19涉及一些相关定义:OLTP是传统的关系型数据库的主要应用,主要是基本的日常事务处理,如银行交易;OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
图4-19 Hive的应用流程
4.2.8 文档数据库
文档数据库会将数据以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值。此值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。
MongoDB 是一种用得比较多的文档数据库,是非关系型数据库中功能最丰富、最像关系型数据库的数据库。它支持的数据结构非常松散,类似JSON的BSON格式,因此可以存储比较复杂的数据类型。
1.MongoDB的基本概念
(1)文档
简单地说,文档可以被理解为一个文本文件,不过这个文本文件有固定的格式,即使用BSON的有序键-值对;文档就相当于表中的一条记录;MongoDB的文档可以使用不同的字段,并且相同的字段可以使用不同的数据类型;文档中的值不仅可以是在双引号中的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档);MongoDB区分类型和大小写。
(2)文档的键
键是字符串类型,MongoDB的文档不能有重复的键。
(3)集合
多个文档组成一个集合(见图 4-20),相当于关系型数据库的表,通常包括常规集合及定长集合;集合存在于数据库中,无固定模式,即使用动态模式,也就是说,集合不要求每一个文档使用相同的数据类型及列。
(4)数据库
一个MongoDB实例可以包含多个数据库;一个数据库可以包含多个集合;一个集合可以包含多个文档。
图4-20 多个不同的文档组成了一个集合
2.MongoDB的适用场景
(1)更高的写入负载
在默认情况下,MongoDB更侧重大数据和高频率的写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景。但是应当避免在高事务安全性的系统中使用MongoDB,除非能从架构设计上保证事务安全。
(2)高可用性
MongoDB的主副集(Master-Slave)配置非常简洁、方便,此外,MongoDB可以快速地处理单节点故障,自动、安全地完成故障转移。这些特性使MongoDB能在一个相对不稳定的环境中保持高可用性。
(3)表结构不明确
数据在不断变大在一些传统RDBMS中,增加一个字段会锁住整个数据库/表,或者在执行一个重负载的请求时会明显造成其他请求的性能降级,这些情况通常发生在数据表大于1GB的时候(当大于1TB时更甚)。因为MongoDB是文档数据库,为非结构化的文档增加一个新字段是很快速的操作,并且不会影响到已有数据。另外,当业务数据发生变化时,不需要由DBA修改表结构。
4.2.9 图形数据库
图形数据库是一种NoSQL数据库,它应用图形理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。
一个图形数据库最主要的组成有两种,即节点集和连接节点的关系。
节点集就是图 4-21 中一系列节点的集合,比较接近于关系型数据库中最常使用的表,而关系则是图形数据库所特有的。
图4-21 图形数据库
从图4-22可以看到,在关系型数据库中,在需要表示多对多关系时,我们常常需要创建一个关联表来记录不同实体的多对多关系,而且这些关联表常常不用来记录信息。如果两个实体之间有多种关系,我们就需要在它们之间创建多个关联表。而在一个图形数据库中,我们只需要标明两者之间存在着不同的关系。
图形数据库典型的产品有Neo4J、InfoGrid。
图4-22 关系型数据库与图形数据库
4.2.10 云存储
云存储是一个新的概念,是一种新兴的网络存储技术,指通过集群应用、网络技术或分布式文件系统等功能,借助应用软件将网络中大量各种不同类型的存储设备集合起来协同工作,共同对外提供数据存储和业务访问功能的一种服务,如图4-23所示。
图4-23 云存储
1.云存储的特点
(1)存储管理可以实现自动化和智能化,所有的存储资源被整合到一起,客户看到的是单一存储空间。
(2)云存储通过虚拟化技术解决了存储空间的浪费,可以重新自动分配数据,提高了存储空间的利用率,同时具备负载均衡、故障冗余功能。
(3)云存储能够实现规模效应和弹性扩展,降低运营成本,避免资源浪费。
2.云存储的优点
(1)节约成本
(2)更好地备份数据并可以异地处理日常数据
(3)访问更便捷
(4)提高竞争力
3.云存储的架构
云存储的架构由存储层、基础管理层、应用接口层、访问层构成,如图4-24所示。
图4-24 云存储的架构
(1)存储层
存储层是云存储最基础的部分。存储设备可以是FC光纤通道存储设备,可以是NAS存储设备,也可以是SAN或DAS等存储设备。云存储中的存储设备往往数量庞大且分布于不同地域,彼此之间通过广域网、互联网或者FC光纤通道网络连接在一起。
存储设备之上是一个统一存储设备管理系统,可以实现存储设备的逻辑虚拟化管理、多链路冗余管理,以及硬件设备的状态监控、故障维护。
(2)基础管理层
基础管理层是云存储最核心的部分,也是云存储中最难以实现的部分。基础管理层通过集群系统、分布式文件系统和网格计算等技术,实现云存储中多个存储设备之间的协同工作,使多个的存储设备可以对外提供同一种服务,并提供更大、更强、更好的数据访问性能。
CDN 内容分发系统、数据加密技术保证云存储中的数据不会被未授权的用户所访问。同时,通过各种数据加密、数据备份、数据容灾的技术和措施,确保云存储中的数据不会丢失,保证云存储自身的安全和稳定。
(3)应用接口层
应用接口层是云存储最灵活多变的部分。不同的云存储运营单位可以根据实际业务类型,开发不同的应用服务接口,提供不同的应用服务。云存储运营单位不同,云存储提供的访问类型和访问手段也不同。
(4)访问层
任何一个授权用户都可以通过标准的公用应用接口来登录云存储系统,享受云存储服务,如视频监控应用平台、IPTV 和视频点播应用平台、网络硬盘应用平台、远程数据备份应用平台等。(共25张PPT)
第5章 大数据计算框架
本章主要内容如下。
(1)MapReduce。
(2)Spark。
5.1 计 算 框 架
大数据技术是收集、整理和处理大容量数据集,并从中获得见解所需的一整套技术。而大数据的处理框架负责对系统中的数据进行计算,例如处理文件系统中存储的数据,或处理刚刚从系统中获取的流式数据。
处理框架在某种意义上可称为处理引擎,如MapReduce是Hadoop的默认处理引擎,Spark也可以作为Hadoop的处理引擎,这些都是实际负责处理数据操作的组件。处理框架按照所处理的数据状态分为批处理框架、流式处理框架及交互式处理框架。
5.1.1 批处理框架
批处理是一种用来计算大规模数据集的方法,它在大数据世界有着悠久的历史,最早的Hadoop就是其中一种,而后起之秀Spark也是从批处理开始做起的。批处理主要操作大容量静态数据集,并在计算过程完成后返回结果。批处理模式中使用的数据集通常符合下列特征。
有界:批处理的数据集是数据的有限集合。
持久:数据通常存储在某种类型的持久存储系统中,如HDFS或数据库。
大量:批处理操作通常处理极为海量的数据集。
批处理适合需要访问全体记录才能完成的计算工作。
需要处理大量数据的任务通常最适合用批处理操作进行处理。
大量数据的处理需要付出大量时间,因此批处理不适合对处理时间要求较高的场合。
5.1.2 流式处理框架
在大数据时代,数据通常都是持续不断、动态产生的。在很多场合,数据需要在非常短的时间内得到处理,并且还要考虑容错、拥塞控制等问题,避免数据遗漏或重复计算。流式处理框架则是针对这一类问题的解决方案。
流式处理框架一般采用有向无环图(Directed Acyclic Graph, DAG)模型。图中的节点分为两类:一类是数据的输入节点,负责与外界交互而向系统提供数据;另一类是数据的计算节点,负责完成某种处理功能,如过滤、累加、合并等。从外部系统不断传入的实时数据则流经这些节点,把它们串接起来。
基于流式处理框架的系统会对随时进入系统的数据进行计算。相比批处理,这是一种截然不同的处理方式。流式处理无须针对整个数据集执行操作,而会对通过系统传输的每个数据项执行操作。流式处理的数据集是“无边界”的,这就产生了如下3个重要的影响。
(1)完整数据集只能代表截至目前已经进入系统中的数据总量。
(2)工作数据集会更加相关,在特定时间只能代表某个单一数据项。
(3)处理工作是基于事件的,除非明确停止,否则没有“尽头”。处理结果立即可用,并会随着新数据的抵达继续更新。
此类处理非常适合某些类型的工作负载,有近实时处理需求的任务很适合使用流式处理,如分析服务器或应用程序错误日志,以及其他基于时间的衡量指标的应用场景,因为这些应用场景要求对数据变化做出实时的响应,对业务职能来说是极为关键的。流式处理很适合用来处理必须对变动或峰值做出响应,并且关注一段时间内变化趋势的数据。
Apache Storm是一种侧重于极低延迟的流式处理框架,也是要求近实时处理的工作负载的最佳选择。该框架可处理非常大量的数据,提供结果比其他解决方案具有更低的延迟。同时,Spark Streaming也提供这种流式的处理模式。
5.1.3 交互式处理框架
在解决了大数据的可靠存储和高效计算后,如何为数据分析人员提供便利应用,日益受到关注,而最便利的分析方式莫过于交互式查询。一些批处理和流计算平台如Hadoop和Spark也分别内置了交互式处理框架。
由于SQL已被业界广泛接受,目前的交互式处理框架都支持用类似SQL的语言进行查询。早期的交互式分析平台建立在Hadoop的基础上,被称作SQL-on-Hadoop。后来的分析平台改用Spark、Storm等引擎,不过SQL-on-Hadoop的称呼还是沿用了下来。SQL-on-Hadoop也指为分布式数据存储提供SQL查询功能。
Apache Hive是最早出现的、架构在Hadoop基础之上的大规模数据仓库,由Facebook公司设计并开源。Hive的基本思想:通过定义模式信息,把HDFS中的文件组织成类似传统数据库的存储系统。Hive保持着Hadoop所提供的可扩展性和灵活性。Hive支持熟悉的关系型数据库概念,如表、列和分区,包含对非结构化数据一定程度的SQL支持。它支持所有主要的原语类型(如整数、浮点数、字符串)和复杂类型(如字典、列表、结构)。它还支持使用类似SQL的声明性语言Hive Query Language(HiveQL)表达的查询,任何熟悉SQL的人都很容易理解它。
5.2 MapReduce
MapReduce是Hadoop大数据处理框架的处理引擎,能够运行在由上千个商用机器组成的大集群上,并以一种可靠的、具有容错能力的方式并行地处理TB级别的海量数据集。MapReduce对历史的批量数据的处理具有很强的优势,且用户能够基于此引擎轻松地编写应用程序,以实现分布式的并行数据处理。
5.2.1 MapReduce编程的特点
MapReduce源于Google公司的一篇论文,它借鉴了分而治之的思想,将一个数据处理过程拆分为主要的Map(映射)和Reduce(化简)两步。
用户不需要了解分布式计算框架的内部运行机制,只要能用Map和Reduce的思想描述清楚要处理的问题,即编写map()和reduce()函数,就能轻松地使用Hadoop实现分布式的处理。MapReduce的编程具有以下特点。
1.开发简单
2.可扩展性强
3.容错性强
5.2.2 MapReduce的计算模型
MapReduce将数据处理拆分为主要的Map与Reduce两步,MapReduce操作数据的最小单位是一个Key-Value对。用户在使用MapReduce编程的时候,首先需要将数据抽象为Key-Value对的形式,接着map()函数以Key-Value对作为输入,经过map()函数的处理后,产生一系列新的Key-Value对作为中间结果输出到本地。
MapReduce计算框架会自动将这些中间结果数据按照Key做聚合排序处理,并将Key值相同的数据分发给reduce()函数处理;reduce()函数以Key和对应的Value的集合作为输入,经过reduce()函数的处理后,产生另一系列Key-Value对作为最终输出,写入HDFS。
这个过程用如下表达式表示:
{Key1,Value1} -> {Key2,List} -> {Key3,Value3}。
MapReduce能够解决的问题有一个共同特点:任务可以被分解成多个子问题,且这些子问题相对独立,彼此之间不会有牵制;待并行处理完这些子问题后,任务便被解决了。
一般网站都需要对网站的PV(URL被访问的次数)和UV(URL被不同IP访问的次数)进行数据统计,这些数据来源于网站服务器上的log日志。这些log日志记录其他机器访问服务器的IP、时间、状态码等信息。
大型网站的服务器往往会产生海量的log日志,使用MapReduce的分布式计算框架来分析日志是非常有效的方式。
1.输入
PV统计数据的来源是网站服务器的log日志,日志文件是作为输入源被MapReduce应用程序使用的,而此日志文件是非常庞大的。在执行Map和Reduce操作之前,用户程序会调用MapReduce库将输入的日志文件分成多个数据片段,也称作分片(split)。每个分片的大小默认为64MB(可以通过参数来设置每个分片的大小),每个split交由一个map()函数进行处理。假设log日志中数据的格式如下。
{day":"2017-03-01","begintime":1488326400000, "endtime":1488327000000,
"CIP":" 10.90.2.13. ",""domain":"com.browser1","activetime":60000}
{day":"2017-03-01","begintime":1488326434000, "endtime":1488367000000,
"CIP”: "10.90.2.13. ",""domain"::"com.browser","activetime":60000}
{day":"2017-03-01","begintime":1488326400000, "endtime":1488327000000,
"CIP”: "10.90.2.13. ",""domain"::"com.browser2","activetime":60000}
日志内容包括日期、开始时间、结束时间、访客IP和被访问的URL等。为展示方便,后续日志格式为访问日期、被访问URL和访客IP。如图5-1所示,假设整个日志文件大小为10GB,每个分片设置为256MB,可分为40个split。
从图5-1可以看到,输入环节主要完成两个动作:一是将输入的log日志文件进行分片,二是将每个分片的文本信息转换为初始的形式,作为Map任务的输入。
图5-1 日志文件分片
2.Map任务
每个分片交给一个Map任务进行处理,Map任务不断地从对应的分片中解析出一个个键-值对,并调用map()函数进行处理。因为此应用程序是计算PV,需要的信息是某天被访问的网站URL和访客IP,所以map()函数实现的是对初始对的Value值进行处理,提取URL和IP字段,并输出新的键-值对。为方便理解以被访问的URL作为Key,实际应该将时间和URL一起作为组合Key,Value为访问的IP地址。日志数据经过Map任务处理后得到新的键-值对,如图5-2中间部分所示。Map将输出的结果存于HDFS中。
图5-2 Map任务和Shuffle处理
3.Shuffle处理
Shuffle也叫数据混洗,代表map()函数产生输出到Reduce的输入的整个过程。它首先会对所有的Map输出的中间结果按照Key进行合并,Key值相同的合并一起,在此例中是将访问URL的所有访客IP进行合并,然后按Key值的大小进行排序。Map输出的键-值对经过Shuffle操作后形成的键-值对,如图5-2右边所示。
Shuffle是MapReduce的核心,由MapReduce内部代码实现,它的职责是把Map的输出结果有效地传到Reduce。
4.Reduce任务
对经过Shuffle处理的中间结果,系统根据Reduce任务的个数进行分区,每个区对应一个Reduce任务,一个Reduce任务处理的数据可能包括多个Map任务输出的结果,一个Map任务输出的结果也可能被多个Reduce任务处理。
假如此MapReduce计算框架有两个节点可提供Reduce任务,则根据排序结果将中间结果分配给两个Reduce进行归约,其过程如图5-3所示。
5.输出
MapReduce最终的结果存于HDFS中,供后续查询分析使用。在实际应用中,一个任务不可能只通过一个map()和reduce()两个函数就能完成,通常需要经过多次Map和Reduce操作,是一个迭代执行的过程。
利用分而治之的思想可以将很多复杂的数据分析问题转变为一系列的MapReduce作业,利用Hadoop提供的MapReduce计算框架,实现分布式计算,这样就能对海量数据进行复杂的数据分析,这也是MapReduce的意义所在。
图5-3 Shuffle处理和Reduce任务(共18张PPT)
清华大学出版社
第5章 大数据计算框架
图5-4 MRv1架构
(1)JobTracker
JobTracker是集群的主节点,负责任务调度和集群资源监控,并不参与具体的计算。一个Hadoop集群只有一个JobTracker,存在单点故障的可能,必须运行在相对可靠的节点上。一旦JobTracker出错,整个集群所有正在运行的任务将全部失败,这也是MRv1的不足之处。
(2)TaskTracker
TaskTracker在集群中是从节点,主要负责汇报Heartbeat信息和执行JobTracker的命令。一个集群可以有多个TaskTracker,但一个节点只会有一个TaskTracker,并且TaskTracker和HDFS的DataNode运行在同一个节点上,这样存储和计算被放在同一节点上,TaskTracker可以对自身节点上存储的数据进行计算,避免计算过程中数据的迁移。
TaskTracer周期地向JobTracker发送Heartbeat信息后,JobTracker根据Heartbeat信息和当前作业的运行情况为TaskTracker下达命令,包括启动任务、提交任务、杀死任务、杀死作业和重新初始化5种命令。
(3)Client
用户编写的MapReduce程序通过客户端提交到JobTracker。
从图5-4可以看到,当用户向Hadoop提交一个MapReduce作业时,JobTracker的作业分解模块会将其分拆为任务并交由各个TaskTracker执行。在MRv1中,任务分为两种——Map任务(Map Task)和Reduce任务(Reduce Task)。
一个TaskTracker能够启动的任务数量由TaskTracker配置的任务槽(slot)决定。槽是Hadoop的计算资源的表示模型,Hadoop将各个节点上的多维度资源(CPU、内存等)抽象成一维度的槽,这样就将多维度资源分配问题转换成一维度的槽分配问题。
MRv1的资源管理方案有如下弊端。
(1)槽被设定为Map槽和Reduce槽,因此,某一时刻Map槽或Reduce槽会出现紧缺情况,降低了槽的使用率。
(2)不能动态设置槽的数据量,可能会导致一个TaskTracker资源使用率过高或过低。
(3)提交的作业是多样化的,如果一个任务需要1GB内存,则会产生资源浪费;如果一个任务需要3GB内存,则会发生资源抢占。
2.YARN
因为MRv1的种种不足,如可靠性差、多计算框架支持不足、资源利用率低,Apache社区着手下一代Hadoop的开发,提出了一个通用的架构——统一资源管理和调度平台,此平台直接导致了YARN和Mesos的出现。
在MRv2中,YARN接管了所有资源管理调度的功能,同时还兼容异构的计算框架,即在YARN上不仅可以部署批处理的MapReduce计算框架,还可以部署Spark,支持流式计算和交互式计算框架,如图5-5所示。
图5-5 支持多种计算框架的YARN
YARN的架构也是主从架构,如图5-6所示。
YARN服务由ResourceManager和NodeManager两类进程组成,Container是YARN的资源表示模型,任何计算类型的作业都可以在Container中。YARN是双层调度模型,ResourceManager是中央调度器,ApplicationMaster是YARN的二级调度器,运行在Container中。
图5-6 YARN的架构
(3)ApplicationMaster
ApplicationMaster是YARN架构中比较特殊的组件,其生命周期随着应用的开始而开始,随着应用的结束而结束。它是集群中应用程序的进程。每个应用程序都有自己专属的ApplicationMaster,不同计算框架如MapReduce和Spark的ApplicationMaster的实现也是不同的。它负责向ResourceManager申请资源,在对应的NodeManager上启动Container来执行任务,同时在应用运行过程中不断监控这些任务的状态。
MRv1与YARN的对比如表5-1所示。
项目 MRv1 YARN
调度机制 JobTracker既负责资源管理又负责任务调度 第一层由ResourceManager分配资源,第二层由ApllicationMaster对框架的任务进行调度
资源表示模型 槽(slot),是静态的,启动后不可更改,资源利用率低 Container,可根据应用申请的大小决定,是动态改变的
可靠性 JobTracker出现故障时,整个集群任务执行失败 ResourceManager仅负责资源管理,当Resource Manager发生故障后,ApplicationMaster正在执行的任务并不会停止,而且ResourceManger重启后会迅速获取集群节点的所有状态
扩展性 JobTracker承担资源管理和作业调度功能,当同时提交的作业过多时,会增加JobTracker的负荷,使其成为整个集群的瓶颈,制约集群的扩展 ResourceManager在应用程序申请完资源后,不再参与作业任务的调度,减少了ResourceManager的负担,可以扩展更多节点
支持的计算框架 MapReduce 支持MapReduce、Spark等各种类型的计算框架
表5-1 MRv1与YARN的对比(共14张PPT)
第5章 大数据计算框架
本章主要内容如下。
(1)MapReduce。
(2)Spark。
5.3 Spark
总体来说,Spark具有以下特点。
1.快速处理能力
2.易于使用
3.通用性强
4.可用性高
图5-7 Spark生态系统
1.Spark Core
Spark Core 是整个生态系统的核心组件,是一个分布式大数据处理框架。它提供了资源调度管理,通过内存计算、DAG等机制,保证快速的分布式计算,并引入了RDD的抽象,保证数据的高容错性。
Spark Streaming提供的处理引擎和RDD编程模型可以同时进行批处理和流处理,它使用的是数据离散化处理方式,能够进行秒级以下的数据批处理。在Spark Streaming处理过程中,Receiver并行接收数据,并将数据缓存至Spark工作节点的内存中。经过系统延迟优化后,Spark引擎对短任务能够进行批处理。Spark可基于数据的来源及可用资源情况,将任务动态地分配给工作节点,如图5-8所示。
使用离散化流数据使Spark Streaming具有以下优点。
(1)动态负载均衡
(2)快速故障恢复
图5-8 Spark Streaming的处理架构
3.Spark SQL
Spark SQL的前身是Shark,即Hive on Spark,本质是通过HiveQL进行解析,把HiveQL翻译成Spark上对应的RDD操作,然后通过Hive的元数据信息获取数据库里的表信息,最后由Shark获取并放到Spark上运算。
Spark SQL允许开发人员直接处理RDD,也可查询在Hive上存储的外部数据。Spark SQL的一个重要特点是能够统一处理关系表和RDD,使开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。
4.BlinkDB
BlinkDB是一个用于在海量数据上运行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度来提升查询响应时间,其数据的精度被控制在允许的误差范围内。
BlinkDB采用自适应的优化框架,从原始数据随着时间的推移建立并维护一组多维样本,且遵循动态样本选择策略。
5.MLlib
MLlib是Spark提供的机器学习框架。它的目标是让机器学习的门槛更低,让一些可能并不了解机器学习的用户能够使用MLlib。MLlib目前已经提供了基础统计、分类、回归、决策树、随机森林、朴素贝叶斯、协同过滤、聚类、维数缩减、特征提取与转型、频繁模式挖掘等多种数理统计、概率论、数据挖掘方面的数学算法。
6.GraphX
GraphX是分布式图计算框架。它提供了对图的抽象Graph,Graph由顶点、边及边权值3种结构组成。对Graph的所有操作最终都会转换成RDD操作来完成,即对图的计算在逻辑上等价于一系列的RDD转换过程。目前,GraphX已经封装了最短路径、网页排名、连接组件、三角关系统计等算法的实现,用户可自行选择使用。
以上Spark Steaming、Spark SQL、GraphX、MLlib、BlinkDB的功能都是建立在核心引擎上实现的。(共21张PPT)
大数据导论
BIG DATA
Technology
第5章 大数据计算框架
本章主要内容如下。
(1)MapReduce。
(2)Spark。
5.3.3 Spark的架构与原理
1.基本架构
Spark集群的运行模式有多种,但Spark的基本架构都是相似的,如图5-9所示。
图5-9 Spark的基本架构
(1)Cluster Manager
它是Spark的集群管理器,负责资源的分配与管理。Cluster Manager属于一级分配,它将各个Worker上的内存、CPU等资源分配给应用程序。YARN、Mesos、EC2等都可以作为Spark的集群管理器,如YARN的ResourceManager可以作为Spark的Cluster Manager使用。
(2)Worker
Worker是Spark的工作节点。对Spark应用程序来说,由Cluster Manager分配得到资源的Worker节点主要负责创建Executor,将资源和任务进一步分配给Executor,并同步资源信息给Cluster Manager。在Spark on YARN模式下,Worker就是NoteManager节点。
(3)Executor
Executor是具体应用运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存到内存或磁盘上,每个应用都有各自独立的一批Executor。Executor同时与Worker、Driver App保持信息的同步。
(4)DriverApp
它属于客户端驱动程序,用于将任务程序转化为RDD和DAG,并与Cluster Manager进行通信与调度。
2.工作流程
Spark的工作流程如图5-10所示。
图5-10 Spark 的工作流程
(1)构建Spark 应用程序的运行环境,启动SparkContext。
(2)SparkContext向资源管理器申请运行Executor资源。
(3)资源管理器分配资源给Executor,并由Worker启动Executor。
(4)Executor向SparkContext申请Task任务。
(5)SparkContext根据应用程序构建DAG。
(6)将DAG划分为多个Stage。
(7)把每个Stage需要的任务集发送给TaskScheduler。
(8)TaskScheduler将Task发送给Executor运行,Executor在执行任务过程中需要与DriverApp通信,告知目前任务的执行状态。
(9)Task在Executor上运行完后,释放所有资源。
5.3.4 Spark RDD的基本知识
1.RDD的定义
RDD(Resilient Distributed Datasets)是一种可扩展的弹性分布式数据集,是Spark最基本的数据抽象,表示一个只读、分区且不变的数据集合,是一种分布式的内存抽象。
RDD不具备Schema的数据结构,可以基于任何数据结构创建,如tuple(元组)、dict(字典)和list(列表)等。
与RDD类似的分布式共享内存(Distributed Shared Memory,DSM)也是分布式的内存抽象,但两者是不同的。与DSM相比,RDD模型有两个优势:
①RDD中的批量操作在运行时会根据数据存放的位置来调度任务;
②对扫描类型的操作,如果内存不足以缓存整个RDD,就进行部分缓存,避免内存溢出。RDD与DSM的主要区别如表5-2所示。
项目 RDD DSM
读 批量或细粒度读操作 细粒度读操作
写 批量转换操作 细粒度转换操作
一致性 RDD是不可更改的 取决于应用程序或运行时
容错性 细粒度,低开销使用Lineage 需要检查点操作和程序回滚
落后任务的处理 任务备份,重新调度执行 很难处理
任务安排 基于数据存放的位置自动实现 取决于应用程序或运行时
表5-2 RDD与DSM的主要区别
RDD具有以下特点。
(1)Partition(译为分区或分片)是Spark数据集的基本组成单位。
(2)在Spark中,RDD的计算是以分片为单位的,每个RDD都会实现计算函数,以达到RDD的转换操作。
(3)RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。
(4)当前,Spark实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。
(5)列表,允许存储/读取每个Partition的优先位置(Preferred location)。
2.RDD的操作类型
在Spark编程中,开发者需要编写DriverApp来连接Worker。
DriverApp定义一个或多个RDD及相关的行动操作。Worker将经过一系列操作后的RDD分区数据保存在内存中。在Spark中,RDD的操作大致可以分为4类,分别为创建(Create)、转换(Transformation)、控制(Contral)和行动(Action)。
(1)创建
创建操作用于创建RDD。RDD的创建只有两种方式,一种是把来自于外部存储系统的数据集合到内存,另一种是通过转换操作生成RDD。
(2)转换
它将RDD通过一定的操作变换成新的RDD,如Hadoop RDD可以使用Map操作变换为Mapped RDD。转换操作是惰性操作,只是定义了一个新的RDD,并没有立即执行。
(3)控制
控制操作进行RDD的持久化,可以让RDD按不同的存储策略保存在磁盘或内存中。
(4)动作
它是能够触发Spark运行的操作,如对RDD进行Collect是动作操作。
3.RDD的依赖关系
RDD只支持粗粒度转换,即在大量记录上执行的单个操作,将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。
一个RDD包含一个或多个分区,RDD的每个分区分布在集群的不同节点中,每个分区实际是一个数据集合的片段。在构建DAG的过程中,系统会将RDD用依赖关系串联起来。每个RDD都有其依赖,除了最顶级的RDD,这些依赖分为窄依赖和宽依赖。
窄依赖指每个父RDD的分区都至多被一个子RDD的分区使用;而宽依赖指多个子RDD的分区依赖一个父RDD的分区。例如Map、Filter操作是一种窄依赖,而Join、GroupByKey操作属于宽依赖,如图5-11所示。
图5-11 RDD窄依赖和宽依赖
4.RDD的作业调度
当对RDD执行转换操作时,调度器会根据RDD的“血统”来构建由若干Stage组成的DAG,每个Stage包含尽可能多的连续窄依赖转换。调度器按照DAG的顺序进行计算,并最终得到目标结果。
调度器根据数据存储位置向各节点分配任务,并采用延时调度机制。例如某个任务需要处理的某个分区刚好存储在某个节点的内存中,则该任务会分配给节点;如果内存不包含该分区,调度器会找到包含该RDD的较佳位置,并把任务分配给其所在节点。
图5-12展示了Spark中的RDD作业调度DAG,其中有A、B、C、D、E、F、G这7个RDD,每个RDD有多个分区。在这个图中,系统根据RDD的宽依赖将整个作业分为3个Stage,其中Stage 2内部的窄依赖则以流水线的形式执行,Stage 1与Stage 2执行完成后执行Stage 3。
图5-12 RDD作业调度DAG

展开更多......

收起↑

资源列表