目录
第一章 大数据介绍
1.大数据概念
大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。
2.大数据的特点
(1)volume:数据存储量大,计算量大。
(2)value:价值密度低,对未来趋势与模式可预测分析,深度复杂分析。
(3)variety:数据来源多,数据类型多,关联性强。
(4)velocity:数据存储、传输、处理速度快。数据更新增长速度快。
3.大数据的步骤
(1)数据采集:将数据抽取到临时的文件或数据库中。
(2)数据导入、清洗:数据去重、数据归一、异常处理。
(3)数据统计、分析、挖掘:预设主题,使用各类算法计算。
(4)结果可视化。
第二章 hadoop
1.hadoop简介
- hadoop是apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构
- hadoop是基于java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中
- hadoop的核心是分布式文件系统hdfs(hadoop distributed file system)和mapreduce
- hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力
- 几乎所有主流厂商都围绕hadoop提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科、淘宝等,都支持hadoop
2.hadoop的特性
hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性:
第三章 分布式文件系统hdfs
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类,一类叫“主节点”(master node)或者也被称为“名称结点”(namenode),另一类叫“从节点”(slave node)或者也被称为“数据节点”(datanode)
1.hdfs相关概念
1.1.块
hdfs默认一个块64mb,一个文件被分成多个块,以块作为存储单位,块的大小远远大于普通文件系统,可以最小化寻址开销。
好处:
- 支持大规模文件存储
- 简化系统设计
- 适合数据备份
1.2.hdfs主要功能组件
namenode(主节点或名称节点):
- 存储元数据
- 元数据保存在内存中
- 保存文件,block,datanode之间的映射关系
- fsimage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
- 操作日志文件editlog中记录了所有针对文件的创建、删除、重命名等操作
如何解决名称节点运行期间editlog不断增大问题:secondarynamenode(第二名称节点)
第二名称结点是hdfs架构中的一个组成部分,它是用来保存名称节点中对hdfs 元数据信息的备份,并减少名称节点重启的时间。secondarynamenode一般是单独运行在一台机器上。
datanode(从节点或数据节点):
- 存储文件内容
- 文件内容保存在磁盘
- 维护了block id到datanode本地文件的映射关系
2.hdfs体系结构
2.1.hdfs体系结构的概述
hdfs采用了主从(master/slave)结构模型,一个hdfs集群包括一个名称节点(namenode)和若干个数据节点(datanode),名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地linux文件系统中的。
2.2.hdfs命名空间管理
- hdfs的命名空间包含目录、文件和块
- 在hdfs1.0体系结构中,在整个hdfs集群中只有一个命名空间,并且只有唯一一个名称节点,该节点负责对这个命名空间进行管理
- hdfs使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命名文件等
2.3.通信协议
- hdfs是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输
- 所有的hdfs通信协议都是构建在tcp/ip协议基础之上的
- 客户端通过一个可配置的端口向名称节点主动发起tcp连接,并使用客户端协议与名称节点进行交互
- 名称节点和数据节点之间则使用数据节点协议进行交互
- 客户端与数据节点的交互是通过rpc(remote procedure call)来实现的。在设计上,名称节点不会主动发起rpc,而是响应来自客户端和数据节点的rpc请求
2.4.客户端
- 客户端是用户操作hdfs最常用的方式,hdfs在部署时都提供了客户端
- hdfs客户端是一个库,暴露了hdfs文件系统接口,这些接口隐藏了hdfs实现中的大部分复杂性
- 严格来说,客户端并不算是hdfs的一部分
- 客户端可以支持打开、读取、写入等常见的操作,并且提供了类似shell的命令行方式来访问hdfs中的数据
- 此外,hdfs也提供了java api,作为应用程序访问文件系统的客户端编程接口
2.5.hdfs体系结构的局限性
- 命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
- 性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
- 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
- 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
3.hdfs存储原理
- 冗余数据保存
- 数据存取策略
- 数据错误与恢复
第四章 分布式数据库hbase
1.hbase简介
hbase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌bigtable的开源实现,主要用来存储非结构化和半结构化的松散数据。hbase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。
2.hbase访问接口
3.hbase数据模型
3.1.数据模型概述
- hbase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
- 每个值是一个未经解释的字符串,没有数据类型
- 用户在表中存储数据,每一行都有一个可排序的行键和任意多的列
- 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起
- 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换
- hbase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留(这是和hdfs只允许追加不允许修改的特性相关的)
3.2.数据坐标
hbase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]
4.hbase的实现原理
1.hbase功能组件
hbase的实现包括三个主要的功能组件:
(1)库函数:链接到每个客户端
(2)一个master主服务器
(3)许多个region服务器
- 主服务器master负责管理和维护hbase表的分区信息,维护region服务器列表,分配region,负载均衡
- region服务器负责存储和维护分配给自己的region,处理来自客户端的读写请求
- 客户端并不是直接从master主服务器上读取数据,而是在获得region的存储位置信息后,直接从region服务器上读取数据
- 客户端并不依赖master,而是通过zookeeper来获得region位置信息,大多数客户端甚至从来不和master通信,这种设计方式使得master负载很小
2.表和region
- 开始只有一个region,后来不断分裂
- region拆分操作非常快,接近瞬间,因为拆分之后的region读取的仍然是原存储文件,直到“合并”过程把存储文件异步地写到独立的文件之后,才会读取新文件
- 每个region默认大小是100mb到200mb(2006年以前的硬件配置)
- 每个region的最佳大小取决于单台服务器的有效处理能力
- 目前每个region最佳大小建议1gb-2gb(2013年以后的硬件配置)
- 同一个region不会被分拆到多个region服务器
- 每个region服务器存储10-1000个region
3.region的定位
- 元数据表,又名.meta.表,存储了region和region服务器的映射关系
- 当hbase表很大时, .meta.表也会被分裂成多个region
- 根数据表,又名-root-表,记录所有元数据的具体位置
- -root-表只有唯一一个region,名字是在程序中被写死的
- zookeeper文件记录了-root-表的位置
hbase的三层结构中各层次的名称和作用
5.hbase运行机制
1.hbase系统架构
zookeeper是一个很好的集群管理工具,被大量用于分布式计算,提供配置维护、域名服务、分布式同步、组服务等。
- 管理用户对表的增加、删除、修改、查询等操作
- 实现不同region服务器之间的负载均衡
- 在region分裂或合并后,负责重新调整region的分布
- 对发生故障失效的region服务器上的region进行迁移
2.region服务器工作原理
- 用户读写数据过程
- 缓存的刷新
- storefile的合并
3.hlog工作原理
- 分布式环境必须要考虑系统出错。hbase采用hlog保证系统恢复
- hbase系统为每个region服务器配置了一个hlog文件,它是一种预写式日志(write ahead log)
- 用户更新数据必须首先写入日志后,才能写入memstore缓存,并且,直到memstore缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘
- zookeeper会实时监测每个region服务器的状态,当某个region服务器发生故障时,zookeeper会通知master
- master首先会处理该故障region服务器上面遗留的hlog文件,这个遗留的hlog文件中包含了来自多个region对象的日志记录
- 系统会根据每条日志记录所属的region对象对hlog数据进行拆分,分别放到相应region对象的目录下,然后,再将失效的region重新分配到可用的region服务器中,并把与该region对象相关的hlog日志记录也发送给相应的region服务器
- region服务器领取到分配给自己的region对象以及与之相关的hlog日志记录以后,会重新做一遍日志记录中的各种操作,把日志记录中的数据写入到memstore缓存中,然后,刷新到磁盘的storefile文件中,完成数据恢复
- 共用日志优点:提高对表的写操作性能;缺点:恢复时需要分拆日志
第五章 nosql数据库
1.nosql简介
通常,nosql数据库具有以下几个特点:
- 灵活的可扩展性
- 灵活的数据模型
- 与云计算紧密融合
现在已经有很多公司使用了nosql数据库:
- mozilla
- adobe
- foursquare
- digg
- mcgraw-hill education
- vermont public radio
- 百度、腾讯、阿里、新浪、华为……
2.nosql与关系数据库的比较
总结:
(1)关系数据库
优势:以完善的关系代数理论作为基础,有严格的标准,支持事务acid四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持
劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持web2.0应用,事务机制影响了系统的整体性能等
(2)nosql数据库
优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持web2.0应用,具有强大的横向扩展能力等
劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等
3.nosql的四大类型
典型的nosql数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库。
3.1.键值数据库
3.2.列族数据库
3.3.文档数据库
3.4.图形数据库
4.nosql的三大基石(cap、base、最终一致性)
4.1.cap:
- c(consistency):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据
- a:(availability):可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应;
- p(tolerance of network partition):分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。
cap理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”。
4.2.base
一个数据库事务具有acid四性:
- a(atomicity):原子性,是指事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行
- c(consistency):一致性,是指事务在完成时,必须使所有的数据都保持一致状态
- i(isolation):隔离性,是指由并发事务所做的修改必须与任何其它并发事务所做的修改隔离
- d(durability):持久性,是指事务完成之后,它对于系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持
base的基本含义是基本可用(basically availble)、软状态(soft-state)和最终一致性(eventual consistency)。
5.mongodb
- 提供了一个面向文档存储,操作起来比较简单和容易
- 可以设置任何属性的索引来实现更快的排序
- 具有较好的水平可扩展性
- 支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组
- 可以实现替换完成的文档(数据)或者一些指定的数据字段
- mongodb中的map/reduce主要是用来对数据进行批量处理和聚合操作
- 支持各种编程语言:ruby,python,java,c++,php,c#等语言
- mongodb安装简单
第六章 云数据库
1.云数据库概念
云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。
2.云数据库特性
- 动态可扩展
- 高可用性
- 较低的使用代价
- 易用性
- 高性能
- 免维护
- 安全
3.云数据库系统架构
3.1.ump系统概述
3.2.ump系统架构
ump系统中的角色包括:
- controller服务器
- proxy服务器
- agent服务器
- web控制台
- 日志分析服务器
- 信息统计服务器
- 愚公系统
依赖的开源组件包括:
- mnesia
- lvs
- rabbitmq
- zookeeper
3.2.ump系统功能
- 容灾
- 读写分离
- 分库分表
- 资源管理
- 资源调度
- 资源隔离
- 数据安全
第七章 mapreduce
1.mapreduce模型简介
- mapreduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:map和reduce
- 编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
- mapreduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个map任务并行处理
- mapreduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为,移动数据需要大量的网络传输开销
- mapreduce框架采用了master/slave架构,包括一个master和若干个slave。master上运行jobtracker,slave上运行tasktracker
- hadoop框架是用java实现的,但是,mapreduce应用程序则不一定要用java来写
2.mapreduce的体系结构
mapreduce体系结构主要由四个部分组成,分别是:client、jobtracker、tasktracker以及task
1)client
- 用户编写的mapreduce程序通过client提交到jobtracker端
- 用户可通过client提供的一些接口查看作业运行状态
2)jobtracker
- jobtracker负责资源监控和作业调度
- jobtracker 监控所有tasktracker与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点
- jobtracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(taskscheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源
3)tasktracker
- tasktracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给jobtracker,同时接收jobtracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)
- tasktracker 使用“slot”等量划分本节点上的资源量(cpu、内存等)。一个task 获取到一个slot 后才有机会运行,而hadoop调度器的作用就是将各个tasktracker上的空闲slot分配给task使用。slot 分为map slot 和reduce slot 两种,分别供maptask 和reduce task 使用
4)task
task 分为map task 和reduce task 两种,均由tasktracker 启动
3.mapreduce的工作流程
4.shuffle过程
4.1.map端的shuffle过程
- 每个map任务分配一个缓存
- mapreduce默认100mb缓存
- 设置溢写比例0.8
- 分区默认采用哈希函数
- 排序是默认的操作
- 排序后可以合并(combine)
- 合并不能改变最终结果
- 在map任务全部结束之前进行归并
- 归并得到一个大的文件,放在本地磁盘
- 文件归并时,如果溢写文件数量大于预定值(默认是3)则可以再次启动combiner,少于3不需要
- jobtracker会一直监测map任务的执行,并通知reduce任务来领取数据
合并(combine)和归并(merge)的区别:
两个键值对<“a”,1>和<“a”,1>,如果合并,会得到<“a”,2>,如果归并,会得到<“a”,<1,1>>
4.2.reduce端的shuffle过程
- reduce任务通过rpc向jobtracker询问map任务是否已经完成,若完成,则领取数据
- reduce领取数据先放入缓存,来自不同map机器,先归并,再合并,写入磁盘
- 多个溢写文件归并成一个或多个大文件,文件中的键值对是排序的
- 当数据很少时,不需要溢写到磁盘,直接在缓存中归并,然后输出给reduce
第八章 spark
1.spark简介
spark的特点
- 运行速度快:使用dag执行引擎以支持循环数据流与内存计算
- 容易使用:支持使用scala、java、python和r语言进行编程,可以通过spark shell进行交互式编程
- 通用性:spark提供了完整而强大的技术栈,包括sql查询、流式计算、机器学习和图算法组件
- 运行模式多样:可运行于独立的集群模式中,可运行于hadoop中,也可运行于amazon ec2等云环境中,并且可以访问hdfs、cassandra、hbase、hive等多种数据源
2.scala简介
scala是一门现代的多范式编程语言,运行于java平台(jvm,java 虚拟机),并兼容现有的java程序。
scala的特性:
- scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统
- scala语法简洁,能提供优雅的api
- scala兼容java,运行速度快,且能融合到hadoop生态圈中
scala是spark的主要编程语言,但spark还支持java、python、r作为编程语言
scala的优势是提供了repl(read-eval-print loop,交互式解释器),提高程序开发效率
3.spark运行架构
- spark运行架构包括集群资源管理器(cluster manager)、运行作业任务的工作节点(worker node)、每个应用的任务控制节点(driver)和每个工作节点上负责具体任务的执行进程(executor)
- 资源管理器可以自带或mesos或yarn
- 一个application由一个driver和若干个job构成,一个job由多个stage构成,一个stage由多个没有shuffle关系的task组成
- 当执行一个application时,driver会向集群管理器申请资源,启动executor,并向executor发送应用程序代码和文件,然后在executor上执行task,运行结束后,执行结果会返回给driver,或者写到hdfs或者其他数据库中
4.spark运行基本流程
- 首先为应用构建起基本的运行环境,即由driver创建一个sparkcontext,进行资源的申请、任务的分配和监控
- 资源管理器为executor分配资源,并启动executor进程
- sparkcontext根据rdd的依赖关系构建dag图,dag图提交给dagscheduler解析成stage,然后把一个个taskset提交给底层调度器taskscheduler处理;executor向sparkcontext申请task,task scheduler将task发放给executor运行,并提供应用程序代码
- task在executor上运行,把执行结果反馈给taskscheduler,然后反馈给dagscheduler,运行完毕后写入数据并释放所有资源
spark运行架构具有以下特点:
- 每个application都有自己专属的executor进程,并且该进程在application运行期间一直驻留。executor进程以多线程的方式运行task
- spark运行过程与资源管理器无关,只要能够获取executor进程并保持通信即可
- task采用了数据本地性和推测执行等优化机制
第九章 流计算
1.流计算概念
2.流计算处理流程
3.数据实时采集
- 数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠
- 以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器上的日志数据
- 目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒数百mb的数据采集和传输需求,如:
- facebook的scribe
- linkedin的kafka
- 淘宝的time tunnel
- 基于hadoop的chukwa和flume
数据采集系统的基本架构一般有以下三个部分:
- agent:主动采集数据,并把数据推送到collector部分
- collector:接收多个agent的数据,并实现有序、可靠、高性能的转发
- store:存储collector转发过来的数据(对于流计算不存储数据)
4.数据实时计算
- 数据实时计算阶段对采集的数据进行实时的分析和计算,并反馈实时结果
- 经流处理系统处理后的数据,可视情况进行存储,以便之后再进行分析计算。在时效性要求较高的场景中,处理之后的数据也可以直接丢弃
数据实时计算流程
5.实时查询服务
- 实时查询服务:经由流计算框架得出的结果可供用户进行实时查询、展示或储存
- 传统的数据处理流程,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户
- 虽然通过对传统的数据处理系统进行定时查询,也可以实现不断地更新结果和结果推送,但通过这样的方式获取的结果,仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别
第十章 大数据在不同领域的应用
- 推荐系统:为用户推荐相关商品
- 生物医学
- 流行病预测
- 智慧医疗:利用医疗大数据,促进优质医疗资源共享、避免患者重复检查、促进医疗智能化
- 生物信息学:利用生物大数据,深入了解生物学过程、疾病致病基因等
- 物流:基于大数据和物联网技术的智能物流,可以提高物流信息化和智能化水平,降低物流成本和提高物流效率
- 城市管理
- 智能交通:利用交通大数据,实现交通实时监控、交通智能诱导、公共车辆管理、旅行信息服务、车辆辅助控制等各种应用
- 环保监测:监测分析大气和水污染情况,为污染治理提供依据
- 城市规划:比如,利用住房销售和出租数据,可以评价一个城区的住房分布
- 安防领域:基于视频监控、人口信息、地理数据信息等,利用大数据技术实现智能化信息分析、预测和报警
- 金融
- –高频交易:是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易。采用大数据技术决定交易
- –市场情绪分析和信贷风险分析
- 汽车:无人驾驶汽车,实时采集车辆各种行驶数据和周围环境,利用大数据分析系统高效分析,迅速做出各种驾驶动作,引导车辆安全行驶
- 零售行业:发现关联购买行为、进行客户群体细分
- 餐饮行业:利用大数据为用户推荐消费内容、调整线下门店布局、控制店内人流量
- 电信行业:客户离网分析
- 能源行业:智能电网,以海量用户用电信息为基础进行大数据分析,可以更好理解电力客户用电行为,优化提升短期用电负荷预测系统,提前预知未来2-3个月的电网需求电量、用电高峰和低谷,合理设计电力需求响应系统
- 体育娱乐:2014巴西世界杯,基于海量比赛数据和球员训练数据,指定有针对性球队训练计划,帮助德国国家队问鼎2014世界杯冠军
- 安全领域:应用大数据技术防御网络攻击,警察应用大数据工具预防犯罪
- 政府领域:利用大数据改进选举策略
本文参考了《大数据技术原理与应用(第3版)》教材配套讲义ppt,希望对大家学习有帮助。
如果想了解学习更多有关大数据相关知识,推荐林子雨老师的厦门大学数据库实验室,
发表评论