大数据平台技术复习

1. 大数据技术概述

本文由本人学习过程中总结,难免有纰漏,欢迎交流学习

1.1云计算、物联网、大数据与人工智能

云计算使计算机系统资源,特别是存储和计算能力,在不需要用户直接主动管理 的情况下随需应变。这个术语通常用于描述Internet上许多用户可用的数据中心。

并行计算

同时使用多种计算资源解决计算问题的过程

分布式计算

将需要巨大计算能力的问题分成许多小部分进行处理,最后综合结果

网格计算

在动态、多机构参与的虚拟组织中协同共享资源和求解问题

服务对象

混合云
公有云
私有云

服务层次

IaaS 基础设施层 基础设施即服务
PaaS 平台层 平台即服务
SaaS 应用层 软件即服务

物联网

物联网(IoT)是关于设备的网络(例如车辆和家用电子设备等),其中包含电子产 品、软件、传感器、执行器,以及提供设备连接、交互和交换数据的网络连接。

大数据

大数据是无法在可容忍的时间内用传统信息技术和软硬件工具对其进行获取、管 理和处理的巨量数据集合。具有海量性、多样性、时效性及可变性等特征,需要 可伸缩的计算体系结构以支持其存储、处理和分析。

Volume:体量大 Variety:样式多 Velocity:速度快 Valueless:价值密度低

人工智能

人工智能:系统能够正确地解释外部数据,从这些数据中学习,并通过灵活的适 应利用这些学习来实现特定的目标和任务。

发展阶段
计算智能
感知智能
认知智能

1.2云计算、物联网、大数据与人工智能的关系

云计算为大数据提供了技术基础

大数据为云计算提供用武之地

物联网是大数据的重要来源

大数据技术为物联网数据分析提供支撑

云计算为物联网提供海量数据存储能力

物联网为云计算技术提供了广阔的应用空间

简单总结:通过物联网产生、收集海量的数据存储于云平台,再通过大数据分析,甚至更高形式的人工智能为人类的生产活动,生活所需提供更好的服务。

1.3大数据系统构建

​ 大数据平台构建的前提条件
​ 过程
​ 集成管理
​ 基础分析
​ 智能分析
​ 功能模块设计
​ 数据可视化子系统
​ 数据分析与服务子系统
​ 数据存储与管理子系统
​ 数据交互子系统
​ 技术架构设计
​ 架构图
​ 数据交互技术架构
​ 数据存储技术架构
​ 数据计算技术架构
​ 主要问题
​ 不同场景下的技术框架选型

2.Hadoop大数据处理架构

2.1Hadoop Common

Hadoop集群的节点类型

▫ Hadoop框架中最核心的设计是为海量数据提供存储的HDFS和对数 据进行计算的MapReduce

▫ MapReduce的作业主要包括:(1)从磁盘或从网络读取数据,即 IO密集工作;(2)计算数据,即CPU密集工作

▫ Hadoop集群的整体性能取决于CPU、内存、网络以及存储之间的 性能平衡。因此运营团队在选择机器配置时要针对不同的工作节点 选择合适硬件类型

• Hadoop集群的节点类型

• 基本的Hadoop集群中的节点主要有

NameNode:负责协调集群中的数据存储
DataNode:存储被拆分的数据块
JobTracker:协调数据计算任务
TaskTracker:负责执行由JobTracker指派的任务
SecondaryNameNode:帮助NameNode收集文件系统运行的状态 信息

2.2Hadoop特点

Hadoop 是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

⒈高可靠性。Hadoop 按位存储和处理数据的能力值得人们信赖。

⒉高扩展性。Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

⒊高效性。Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

⒋高容错性。Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

Hadoop 带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

2.3HDFS组件

Application Master

•为应用程序申请资源,并分配给内部任务

•任务调度、监控与容错

Resource Manager
Scheduler
Applications Manager

Node Manager
资源管理单元
Container
工作流程
Zookeeper
集群管理的基本作用
架构
ZNode
Kafka
功能组件
Producer
Broker
Topic
Consumer Group
Consumer

MapReduce

MapReduce 1.0的缺陷

(1)存在单点故障

(2)JobTracker“大包大揽”导 致任务过重(任务多时内存开销 大,上限4000节点)

(3)容易出现内存溢出(分配 资源只考虑MapReduce任务数, 不考虑CPU、内存)

(4)资源划分不合理(强制划分为slot ,包括Map slot和Reduce slot)

YARN

纯粹的资源管理调度框架

被剥离了资源管理调度功能的MapReduce 框架就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己 负责资源调度管理服务, 而是由YARN为其提供资源 管理调度服务

YARN的优势 :

• 大大减少了承担中心服务功能的ResourceManager的资源消耗

• YARN中的资源管理比MapReduce1.0更加高效

• YARN为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求调整各自占用的资源,实现集群资源共享 和资源弹性收缩;可以实现一个集群上的不同应用负载混搭,有效提 高了集群的利用率;不同计算框架可以共享底层存储,避免了数据集跨集群移动

2.4Hadoop的安装部署

​ 安装方式
​ 安装流程与主要命令
​ 分布式模式
​ 单机模式
​ 伪分布式模式
​ core-site.xml配置
​ hdfs-site.xml配置

3.HDFS分布式文件存储

3.1HDFS

HDFS是一种典型的主从式的分布式文件系统

分布式文件系统概述

• 在获取了海量的数据之后,采用何种方式进行高效存储是进行 大数据分析的基础

• 基于分布式硬件集群,并采用特定的分布式文件系统对海量数 据(尤其是原生数据)进行存储

• 分布式文件系统把文件分布存储到多个计算机节点上,成千上 万的计算机节点构成计算机集群

块:HDFS 以块(默认 64MB)作为存储单位

①支持大规模文件存储:一个大规模文件可被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上。因此,一个文件的大小不会受到单个节点的存储容量的限制。
②简化系统设计:元数据无需和文件块一起存储。
③适合数据备份:每个文件块都可冗余存储到多个节点上,大大提高了系统的容错性和可用性。

3.2架构

NameNode

NameNode负责管理分布式文件系统的命名空间(Namespace) ,保存了两个核心的数据结构,即FsImage和EditLog

• 在名称节点启动时,它会将FsImage文件中的内容加载到内存 中,之后再执行EditLog文件中的各项操作,使得内存中的元数 据和实际的同步,存在内存中的元数据支持客户端的读操作。

• 一旦在内存中成功建立文件系统元数据的映射,则创建一个新 的FsImage文件和一个空的EditLog文件

•名称节点启动之后,HDFS中的更新操作会重新写到EditLog文件 中,因为FsImage文件一般都很大(GB级别的很常见),如果所 有的更新操作都往FsImage文件中添加,这样会导致系统运行的 十分缓慢,但是,如果往EditLog文件里面写就不会这样,因为 EditLog 要小很多。每次执行写操作之后,且在向客户端发送成 功代码之前,edits文件都需要同步更新

​ Editlog
​ FsImage

主要功能特性

存储元数据

元数据保存在内存中

保存文件,block,datanode这间的映射关系

DataNode

​ HDFS Block
​ 64MB
​ 128MB

主要功能特性

​ 功能:
存储文件内容
文件内容保存在磁盘
维护了block id 到datanode本地文件的映射关系
特性:
支持大规模文件存储
简化系统设计
适合数据备份

SecondaryNameNode

主要作用

克服:

  1. 当 NameNode 运行了很长时间后,edit logs 文件会变得很大。
  2. NameNode 的重启会花费很长时间,因为有很多改动 [笔者注:在 edit logs 中] 要合并到 fsimage 文件上。
  3. 如果 NameNode 挂掉了,那我们就丢失了很多改动因为此时的 fsimage 文件非常旧。
运行机制

首先,它定时到 NameNode 去获取 edit logs,并更新到 fsimage 上。[笔者注:Secondary NameNode 自己的 fsimage]
一旦它有了新的 fsimage 文件,它将其拷贝回 NameNode 中。
NameNode 在下次重启时会使用这个新的 fsimage 文件,从而减少重启的时间。

3.3数据存取过程

数据存储

• 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随 机挑选一台磁盘不太满、CPU不太忙的节点

• 第二个副本:放置在与第一个副本不同的机架的节点上 • 第三个副本:与第一个副本相同机架的其他节点上

• 更多副本:随机节点

被存放在数据节点A和B上。这种多副本方式具有以下几个优点:

(1)加快数据传输速度 (2)容易检查数据错误 (3)保证数据可靠性

• 数据读取

• HDFS提供了一个API可以确定一个数据节点所属的机架ID,客 户端也可以调用API获取自己所属的机架ID

• 当客户端读取数据时,从名称节点获得数据块不同副本的存放位 置列表,列表中包含了副本所在的数据节点,可以调用API来确 定客户端和这些数据节点所属的机架ID,当发现某个数据块副本 对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本 读取数据,如果没有发现,就随机选择一个副本读取数据

3.4优点与局限性

​ 优点
​ 支持流数据读写
​ 支持廉价设备
​ 支持大数据集
​ 文件模型简单
​ 跨平台支持
​ 局限性
​ 不适合低延迟数据访问
​ 无法高效存储小文件
​ 不支持多用户写入及任意文件修改
​ 命名空间限制
​ 数据隔离问题
​ 性能瓶颈
​ 集群的可用性
​ 单点故障

4. NoSQL与HBase分布式数据库

4.1常见NoSql

键值数据库、列族数据库、文档数据库、图形数据库

三大基石

CAP、BASE 和最终一致性

文档数据库

存储、索引并管理面向文档的数据或者类似的半结构化数据 比如,用于后台具有大量读写操作的网站、使用JSON数据结构 的应用、使用嵌套结构等非规范化数据的应用程序

优点

性能好(高并发),灵活性高,复杂性低,数据结构灵活 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中 既可以根据键来构建索引,也可以根据内容构建索引

缺点

缺乏统一的查询语法

​ MongoDB
​ CouchDB
​ ...

图数据库

专门用于处理具有高度相互关联关系的数据,比较适合于社交网 络、模式识别、依赖分析、推荐系统以及路径寻找等问题

优点

灵活性高,支持复杂的图算法,可用于构建复杂的关系图谱

缺点

复杂性高,只能支持一定的数据规模

Neo4j
Infinite Graph

列族数据库

典型应用

分布式数据存储与管理 数据在地理上分布于多个数据中心的应用程序 可以容忍副本中存在短期不一致情况的应用程序 拥有动态字段的应用程序 拥有潜在大量数据的应用程序,大到几百TB的数据

优点

查找速度快,可扩展性强,容易进行分布式扩展,复杂性低

缺点

功能较少,大都不支持强事务一致性

​ BigTable
​ HBase
​ Cassandra
​ ...

键值数据库

键是一个字符串对象 值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等

涉及频繁读写、拥有简单数据模型的应用

内容缓存,比如会话、配置文件、参数、购物车等

存储配置和用户数据信息的移动应用

扩展性好,灵活性好,大量写操作时性能高

无法存储结构化信息,条件查询效率较低

​ Redis
​ Memcached
​ ...

4.2NoSQL关系数据库应用

关系数据库的优劣势

▫ 优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持

▫ 劣势:可扩展性较差,无法较好支持海量数据存储,数据模过于死板、无法较好支持Web2.0应用,事务机制影响了系 统的整体性能等

• NoSQL数据库的优劣势

▫ 优势:可以支持超大规模数据存储,灵活的数据模型可以很 好地支持Web2.0应用,具有强大的横向扩展能力等

▫ 劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等

• 关系数据库和NoSQL数据库各有优缺点,彼此无法取代
• 关系数据库应用场景:电信、银行等领域的关键业务系统 ,需要保证强事务一致性
• NoSQL数据库应用场景:互联网企业、传统企业的非关键 业务(比如数据分析)
• 关系数据库和NoSQL数据库各有优缺点,彼此无法取代
• 关系数据库应用场景:电信、银行等领域的关键业务系统 ,需要保证强事务一致性
• NoSQL数据库应用场景:互联网企业、传统企业的非关键 业务(比如数据分析)

4.3HBase 的体系架构组成

(1) 客户端:包含访问 HBase 的接口,同时在缓存中维护着已访问过的 Region 位置信息,以加快后续数据访问过程。
(2) Zookeeper 服务器
①Zookeeper 是一个很好的集群管理工具,被大量用于分布式计算,提供配置维护、域名服务、分布式同步、组服务等。
②Zookeeper 可以帮助选举出一个 Master 作为集群的总管,并保证在任何时刻总有唯一一个 Master 在运行,这就避免了 Master 的 “单点失效” 问题。
③Master 通过 Zookeeper 随时感知各个 Region 服务器的工作状态。
④每个 Region 服务器都需要到 Zookeeper 中进行注册,Zookeeper 实时监控每个 Region 服务器的状态并通知给 Master。
⑤Zookeeper 保存了 - ROOT - 表的地址;客户端通过访问 Zookeeper 获得 - ROOT - 表的地址,通过 “三级寻址” 找到所需要的数据。
(3) 主服务器 Master 主要负责表和 Region 的管理工作
(4) Region 服务器是 Hbase 中最核心的模块,负责维护分配给自己的 Region,并响应用户的读写请求。

4.4Region 服务器工作原理

①Region 服务器内部管理了一系列 Region 对象和一个 HLog 文件(存储在磁盘上,记录所有的更新操作)
②每个 Region 对象由多个 Store 组成
③每个 Store 对应表中的一个列族的存储
④每个 Store 又包含一个 MemStore 和多个 StoreFile
⑤MemStore 是内存中的缓存,保存最近更新的数据
⑥StoreFile 是磁盘文件,B 树结构,方便快速读取
⑦StoreFile 在底层的实现方式是 HDFS 文件系统的 HFile(HFile 数据块采用压缩方式存储)

  1. 写数据
    (1) 用户写入数据时,被分配到相应 Region 服务器去执行
    (2) 用户数据首先被写入到 MemStore 和 Hlog 中
    (3) 只有当操作写入 Hlog 之后,commit () 调用才会将其返回给客户端

  2. 读数据
    当用户读取数据时,Region 服务器首先访问 MemStore 缓存,如果找不到,再去磁盘上面的 StoreFile 中寻找

  3. 刷新缓存
    (1) 系统周期性把 MemStore 缓存里的内容刷写到磁盘的 StoreFile 文件中。然后,清空缓存,并在 Hlog 里面写入一个标记;
    (2) 每次刷写都生成一新的 StoreFile 文件。因此,每个 Store 包含多个 StoreFile 文件;
    (3) 每个 Region 服务器都有一自己的 HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作后是否发生新写入操作;
    (4) 如发现更新,则先写入 MemStore,再刷写到 StoreFile;
    (5) 最后删除旧的 Hlog 文件,并开始为用户提供服务。

4.5HBase表结构操作命令

HBase 是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
HBase 中根据行键、列族、列限定符和时间戳来确定一个单元格,因此可以视为一个 “四维坐标”,即 [行键,列 族,列限定符,时间戳]
行键:每个行由行键 (Row Key) 来标识。
列族:一表被分组成许多列族的集合,是基本的访问控制单元。
列限定符:列族里的数据通过列限定符(或列)来定位。
时间戳:每个单元格都保存同一份数据的多个版本,该版本用时间戳进行索引。

HBase操作命令

​ 集群部署与启动
​ 创建表
​ create
​ 全表数据查询
​ scan
​ 表单元数据查询
​ get
​ 已创建表信息查询
​ list
​ 数据添加
​ put
​ 删除表
​ enable/disable
​ drop

4.6HBase应用方案

Ganglia是UC Berkeley发起的一个开源集群监视项目,用于监控系统性能

OpenTSDB可以从大规模的 集群(包括集群中的网络 设备、操作系统、应用程 序)中获取相应的 metrics并进行存储、索 引以及服务,从而使得这 些数据更容易让人理解, 如web化,图形化等

Ambari 的作用就 是创建、管理、监 视 Hadoop 的集群

5. MapReduce计算模型

5.1MapReduce设计思想

为什么需要MapReduce:

• 计算问题简单,但求解困难

• 待处理数据量巨大(TB/PB级),只有分布在分布式集群节

点上并行计算才能在可接受的时间内完成

传统并行计算框架

共享式(共享内存/共享存储),容错性差

刀片服务器、高速网、SAN,价格贵,扩展性差

实时、细粒度计算、计算密集型

MapReduce

非共享式,容错性好

普通PC机,便宜,扩展性好

简单

批处理、非实时、数据密

集型

Moving computing instead of moving data

MapReduce设计的一个理念就是“计算向数据靠拢”,而

不是“数据向计算靠拢”

分治思想

MapReduce采用“分而治之”策略,一个存储在分布式文 件系统中的大规模数据集,会被切分成许多独立的分片( split),这些分片可以被多个Map任务并行处理

5.2编程模型

开发者需编写 两个主要函数

Map: (in_key, in_value)→{(keyj, valuej) | j = 1...k}

Reduce: (key, [value1,...,valuem])→(key, final_value)

Map输入参数:in_key和in_value,它指明了Map需要处理的原始数据

Map输出结果:一组<key,value>对,这是经过Map操作后所产生的中间结果

Reduce输入参数:(key, [value1,...,valuem])

Reduce工作:对这些对应相同key的value值进行归并处理

Reduce输出结果:(key, final_value),所有Reduce的结果并在一起就是最 终结果

5.3架构

​ JobTracker
​ TaskTracker
​ Client
​ Task

5.4MapReduce计算方法

5.4.1wordcount:

input---->map-----reduce------output

input:

会文件按行分割形成 <key,value>

这一步由 Mapreduce 框架自动完成,其中 key 是偏移量,包含了回车所占的字符数,value 是这一行的数据

map:

将分割好的 <key,value> 对交给用户定义的 map 方法处理,形成新的 < key,value > 对

得到 map 方法输出的 <key,value> 对后,Mapper 会将他们按照 key 值进行排序,得到 Mapper 的最终输出结果

reduce:

Reducer 先对从 Mapper 接受的 <key,value> 对进行 shuffle 处理

然后再交给用户自定义的 reduce 方法进行合并处理,再得到新的 <key,value> 对

最后将这个 <key,value> 对作为 wordcount 的结果输出

5.4.2MapReduce

(1)第 1 个 MapReduce
map
找出每个用户都是谁的好友,例如:
读一行 A:B,C,D,F,E,O(A 的好友有这些,反过来拆开,这些人中的每一个都是 A 的好友)
输出 <B,A> <C,A> <D,A> <F,A> <E,A> <O,A>
再读一行 B:A,C,E,K
输出 <A,B> <C,B> <E,B> <K,B>
……
reduce
key 相同的会分到一组,例如:
<C,A><C,B><C,E><C,F><C,G>…
Key:C
value: [ A, B, E, F, G ]
意义是:C 是这些用户的好友。
遍历 value 就可以得到:
A B 有共同好友 C
A E 有共同好友 C

B E 有共同好友 C
B F 有共同好友 C
输出:
<A-B,C>
<A-E,C>
<A-F,C>
<A-G,C>
<B-E,C>
<B-F,C>

(2)第 2 个 MapReduce
对上一步的输出结果进行计算。
map
读出上一步的结果数据,组织成 key value 直接输出
例如:
读入一行 <A-B,C>
直接输出 <A-B,C>
reduce
读入数据,key 相同的在一组
<A-B,C><A-B,F><A-B,G>…
输出:
A-B C,F,G,…
这样就得出了两个用户间的共同好友列表

5.5MapReduce 中的 shuffle 过程

Shuffle 是指对 Map 输出结果进行分区、排序、合并等处理并交给 Reduce 的过程,因此,Shuffle 过程又分为 Map 端的操作和 Reduce 端的操作
(1) Map 端的 Shuffle 过程
①输入数据可以是文档,也可以是二进制格式的。Map 任务接受 <key,value> 输入,映射转换为 < key,value > 输出
(输入数据和执行 Map 任务)
②Map 的输出结果首先被写入缓存,当缓存满时,就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存
(写入缓存)
③当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序(Sort)和合并(Combine),之后再写入磁盘文件。每次溢写操作会生成一个新的磁盘文件,随着 Map 任务的执行,磁盘中就会生成多个溢写文件
(溢写(分区、排序和合并))
④在 Map 任务全部结束之前,这些溢写文件会被归并(Merge)成一个大的磁盘文件,然后通知相应的 Reduce 任务来领取属于自己处理的数据
(文件归并)

5.6Reduce 端的 Shuffle 过程

Reduce 任务从 Map 端的不同 Map 机器领回属于自己处理的那部分数据,然后对数据进行归并(Merge)后交给 Reduce 处理
①“领取” 数据
②归并数据
③把数据输入给 Reduce 任务

b. MapReduce 执行过程包括哪些
(1)MapReduce 框架使用 InputFormat 模块做 Map 前的预处理,比如验证输入的格式是否符合输入定义;然后,将输入文件切分为逻辑上的多个 InputSplit(逻辑概念,并没有实际切割)
(2)RecorderReader (RR) 处理 InputSplit 中的具体记录,加载数据并转换为合适的键值对,输入给 Map 任务
(3)Map 任务根据用户自定义映射规则,输出一系列的 <key,value> 作为中间结果
(4)Shuffle(洗牌),通过排序(Sort)、合并(Combine)、归并(Merge)等操作,将无序的 <key,value> 转换为有序的 < key,value-list>
(5)Reduce 以一系列 <key,value-list> 中间结果作为输入,执行用户定义的逻辑,输出结果给 OutputFormat 模块
(6)OutputFormat 模块会验证输出目录是否已经存在以及输出类型结果类型是否符合配置文件中的配置类型,如果都满足,就输出 Reduce 的结果到分布式文件系统

6. Spark分布式内存计算模型

6.1Spark特点:

• 运行速度快:使用DAG执行引擎以支持循环数据流与内存计算

• 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以 通过Spark Shell进行交互式编程

• 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式 计算、机器学习和图算法组件

• 运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中 ,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、 Cassandra、HBase、Hive等多种数据源

6.2RDD数据封装

RDD:是Resillient Distributed Dataset(弹性分布式数据集 )的简称,是分布式内存的一个抽象概念,提供了一种高 度受限的共享内存模型

RDD 中的依赖关系分为窄依赖与宽依赖。

  1. 如果父 RDD 的一个分区只能被一个子 RDD 的一个分区使用就是窄依赖,否则就是宽依赖
  2. 从计算过程来看,窄依赖是数据以管道方式经一系列计算操作可以运行在了一个集群节点上;宽依赖则可能需要将数据通过跨节点传递后运行(如 groupByKey),有点类似于 MR 的 shuffle 过程
  3. 从失败恢复来看,窄依赖的失败恢复起来更高效,因为它只需找到父 RDD 的一个对应分区即可,而且可以在不同节点上并行计算做恢复;宽依赖则牵涉到父 RDD 的多个分区,恢复起来相对复杂些

RDD 操作的惰性机制
即在 RDD 的执行过程中,真正的计算发生在 RDD 的 “行动” 操作,对于 “行动” 之前的所有 “转换” 操作,Spark 只是记录下 “转换” 操作应用的一些基础数据集以及 RDD 生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算

6.3Spark作业

作业组成
ShuffleMapStage

ShuffleMapStage:不是最终的Stage,在它之后还有 其他Stage,所以,它的输出一定需要经过Shuffle过程,并 作为后续Stage的输入;这种Stage是以Shuffle为输出边界, 其输入边界可以是从外部获取数据,也可以是另一个 ShuffleMapStage的输出,其输出可以是另一个Stage的开始; 在一个Job里可能有该类型的Stage,也可能没有该类型 Stage;

Result Stage

ResultStage:最终的Stage,没有输出,而是直接产生 结果或存储。这种Stage是直接输出结果,其输入边界可以 是从外部获取数据,也可以是另一个ShuffleMapStage的输出。 在一个Job里必定有该类型Stage。
因此,一个Job含有一个或多个Stage,其中至少含有一个 ResultStage。

6.4Spark 的运行的流程

  1. 首先为应用构建起基本的运行环境,即由 Driver 创建一个 SparkContext,进行资源的申请、任务的分配和监控。

  2. 资源管理器为 Executor 分配资源,并启动 Executor 进程。
    3.SparkContext 根据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAGScheduler 解析成 Stage (TaskSet),把一个个 TaskSet 提交给底层调度器 TaskScheduler 处理,Executor 向 SparkContext 申请 Task,TaskScheduler 将 Task 发放给 Executor 运行,并提供应用程序代码
    4.Task 在 Executor 上运行,把执行结果反馈给 TaskScheduler,然后反馈给 DAGScheduler,运行完毕后写入数据并释放所有资源

部署方式

Standalone

类似于MapReduce1.0,slot为资源分配单位

Spark on Mesos

和Spark有血缘关系,更好支持Mesos

Spark on YARN

Spark SQL Spark Streaming Mllib(machine learning) Graphx

Spark

YARN

HDFS

6.5Spark与MapReduce的异同

Hadoop MapReduce存在如下一些缺点

表达能力有限
仅存在Map和Reduce两个算子,难以描述复杂计算过程

磁盘IO开销大
每次作业均需要从磁盘读取数据,中间结果同样写入磁盘

延迟高
MapReduce各个任务间涉及IO开销,

存在延迟
前一个任务完成前,其它任务无法开展

相比于Hadoop MapReduce,Spark主要具有如下优点:
Spark的计算模式也属于MapReduce,但不局限于Map和 Reduce操作,还提供了多种数据集操作类型,编程模型比 Hadoop MapReduce更灵活
Spark提供了内存计算,可将中间结果放到内存中,对于迭代 运算效率更高
Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制

6.6Spark 算子

Spark 的算子的分类

(1)Transformation 变换 / 转换算子:这种变换并不触发提交作业,完成作业中间过程处理。

     Transformation 操作是延迟计算的,也就是说从一个 RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。

reduceByKey, filter, groupByKey, map, flatmap

(2)Action 行动算子:这类算子会触发 SparkContext 提交 Job 作业。

     Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark 系统。

​ reduce, collect, take ,

(1)Value 数据类型的 Transformation 算子,这种变换并不触发提交作业,针对处理的数据项是 Value 型的数据。
(2)Key-Value 数据类型的 Transfromation 算子,这种变换并不触发提交作业,针对处理的数据项是 Key-Value 型的数据对。

(3)Action 算子,这类算子会触发 SparkContext 提交 Job 作业。

7. Storm流式数据计算模型

7.1Storm术语

①Storm:
一个免费的、开源的分布式实时计算系统;
Storm 可以简单、高效、可靠地处理流数据,并支持多种编程语言;
可用于许多领域,如实时分析、在线机器学习、持续计算、远程 RPC、数据提取加载转换等;
Storm 框架可方便地与数据库系统进行整合,从而开发出强大的实时计算系统。
②Tuple(元组):
Tuple 实质上是一个 <key,value> 形式的 Map 型数据结构;
在 Storm 中 Tuple 专业表述为 <Fields,Values> 是 Storm 中消息传递的基本单元。其中 Fileds 和 Value 两个字段本身可以是任意复杂的数据结构,必须满足可序列化这一基本条件。
③Streams:
(1) Stream 是 Storm 的实时处理功能的核心抽象体,是一个无限的 Tuple 序列,源源不断的 Tuple 组成了 Stream。Stream 有源头和处理流的水坝,Storm 源和水坝分别为 Spout 和 Bolt
(2) Spout 是流的源头,通常从外部数据源读取数据并转化为 Tuple。然后转发到各个 Bolt 中
(3) Bolt 是流处理节点,处理流向本 Bolt 的所有 Tuple,常见处理包括过滤、join、连接数据库
(4) 顶点与顶点之间的数据流为 Stream,数据源为 Spout,流处理节点为 Bolt,称由 Spout、Stream、Bolt 构成图为 Topology
(5) Spout 可以将 Tuple 发射到一个或者多个 Bolt,同样 Bolt 可以订阅一个或多个 Spout。
Bolt 能订阅一个或多个上层的 Bolt,即 Topology 可以有多个 Spout 和多层 Bolt。
④Spout:
Spout 表示整个 Topology 的 Stream 来源(HDFS、Hbase、JDBC 等),Storm 框架会不停的调用 Spout 里的 nextTuple () 来实时读取输入源中的数据,除非手动停止 Topology,否则永不停止。
⑤Bolts:
(1) Storm 将 Streams 的状态转换过程抽象为 Bolt。Bolt 即可以处理 Tuple,也可以将处理后的 Tuple 作为新的 Streams 发送给其他 Bolt;
(2) Bolt 可以执行过滤、函数操作、Join、操作数据库等任何操作;
(3) Bolt 是一个被动的角色,其接口中有一个 execute (Tuple input) 方法,在接收到消息之后会调用此函数,用户可在此方法中执行自己的处理逻辑
⑥Topology:
(1) Topology 由 Spout、Bolt、Stream 构成的 DAG 图。是 Storm 中运行的一个实际应用程序,类似于 MapReduce 程序,MapReduce 作业有个时间期限,而一旦提交一个 Topology,除非手动将其停止,否则这个 Topology 永远执行。
(2) Topology 里面的每一个组件都是并行运行的。

7.2典型应用场景

• 智能交通
• 个性化推荐系统
• 信贷风险监控与金融反欺诈

实时分析、在线机器学习、不停顿的计算、分布式 RPC

1、Flume用于收集日志信息; 2、结合数据传输功能可以把收集到的日志信息实时 传输到kafka集群,或保存到Hadoop hdfs中保存。 这里之所以选择kafka集群是因为kafka集群具备缓冲 功能,可以防止数据采集速度和数据处理速度不匹配 导致数据丢失,这样做可以提高可靠性。 3、使用storm实时处理数据; 4、保存storm处理的结果数据,当数据量不是特别巨 大时,可以使用MySQL存储;当数据量特别巨大时 ,可以选择hdfs存储。

5、用于实时展示处理结果。

7.3Stream Groupings

(1) 用于告知 Topology 如何在两个组件间(如 Spout 和 Bolt 之间,或者不同的 Bolt 之间)进行 Tuple 的传送。
(2) 每一个 Spout 和 Bolt 都可有多个分布式任务,一个任务在什么时候、以什么方式发送 Tuple 是由 Storm Groupings 来决定的。

目前主要有以下六种方式:
ShuffleGrouping:随机分组
FieldsGrouping:按照字段分组
AllGrouping:广播发送
GlobalGrouping:全局分组
NonGrouping:不分组
DirectGrouping:直接分组

7.4Storm具有以下主要特点:

▫ 整合性:Storm可方便地与队列系统和数据库系统进行整合 ▫ 简易的API:Storm的API在使用上即简单又方便
▫ 可扩展性:Storm的并行特性使其可以运行在分布式集群中 ▫ 容错性:Storm自动进行故障节点的重启、任务的重新分配 ▫ 可靠的消息处理:Storm保证每个消息都能完整处理
▫ 支持各种编程语言:Storm支持使用各种编程语言定义任务 ▫ 快速部署:Storm可以快速进行部署和使用
▫ 免费、开源:Storm是一款开源框架,可以免费使用

7.5Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站 中的所有动作流数据。Kafka的目的是通过并行加载机制来统一线上和离线的消息 处理,也是为了通过集群机来提供实时的消费

主要应用场景是:日志收集系统和消息系统。

7.6流式数据计算概念

​ 流式数据计算的特点及典型应用场景
​ 流式数据计算主要阶段
​ 数据实时采集
​ 数据实时计算
​ 数据实时查询
​ 流式数据计算、交互式计算、批处理计算的异同
Storm作业运行封装
​ Topology
Storm数据封装模型
​ Tuple
Storm计算模型
​ 架构
​ Zookeeper
​ Nimbus
​ Supervisor
​ Worker
​ 组件
​ Spout
​ Bolt

8. 数据分析与计算模型

8.1机器学习基本概念与任务

大数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学 习等。

分类是最常见的机器学习应用问题,比如垃圾邮件过滤、人脸检测、用户画像、文本情感分析、网页归类等,本质上都是分类问题。分类学习也是 机器学习领域,研究最彻底、使用最广泛的一个分支。

8.2Python语言基础

​ 编程工具
​ Jupyter Notebook
​ Pycharm
​ 机器学习算法包
​ Numpy
​ Matplotlib
​ Pandas
​ Sklearn
​ Pytorch
​ Tensorflow

9.1大数据处理

大数据处理的第一个步骤就是数据抽取与集成。这是因为大数据处理的数据来源类型丰富,大数据处理的第一步是对数据进行抽取和集成,从中提取出关系和实体,经过关联和聚合等操作,按照统一定义的格式对数据进行存储。现有的数据抽取和集成方法有三种,分别是基于物化或 ETL 方法的引擎、基于联邦数据库或中间件方法的引擎、基于数据流方法的引擎。这些引擎都是很重要的。

大数据处理的第二个步骤就是数据分析。数据分析是大数据处理流程的核心步骤,通过数据抽取和集成环节,我们已经从异构的数据源中获得了用于大数据处理的原始数据,用户可以根据自己的需求对这些数据进行分析处理,比如数据挖掘、机器学习、数据统计等,数据分析可以用于决策支持、商业智能、推荐系统、预测系统等。通过数据分析我们能够掌握数据中的信息。

大数据处理的第三个步骤就是数据解释。大数据处理流程中用户最关心的是数据处理的结果,正确的数据处理结果只有通过合适的展示方式才能被终端用户正确理解,因此数据处理结果的展示非常重要,可视化和人机交互是数据解释的主要技术。这个步骤能够让我们知道我们分析数据的结果。

使用可视化技术,可以将处理的结果通过图形的方式直观地呈现给用户,标签云、历史流、空间信息流等是常用的可视化技术,用户可以根据自己的需求灵活地使用这些可视化技术。而人机交互技术可以引导用户对数据进行逐步的分析,使用户参与到数据分析的过程中,使用户可以深刻地理解数据分析结果。这些都是我们所关注的内容。

9.2分析题

解决方案:

1)数据平台复制数据需要支持异构数据库、大数据量、实时性、模块化。

可以考虑初始化数据全量同步到 hdfs, 增量数据同步到 kafka。

2)复制数据放在 备份库上。一定要减轻生产库的压力。

3)为了节约网络资源,需要和备份数据库放在同一个机房。、

4)需要建立数据控制流,方便数据校验。 暂定校验数据条数、数据数量合计。

目的是支持后续业务进行数据操作回查,实现数据校验。特别是财务数据,可能需要下钻

抽取凭证级的数据。

5)需要配置多个同步通道。可以快速将数据同步到数据库,并支持增量同步的方式。

需要选取复制效率最高的产品。如可以支持多线程、多并发、特定数据格式、数据压缩技术,

以及快速数据抽取和装载技术。

9.3谈谈对 Hadoop 系统的组成及其基本工作原理的理解。

1.MapReduce 并行计算框架

MapReduce 并行计算框架是一个并行化程序执行系统。它提供了一个包含 Map 和 Reduce 两阶段的并行处理模型和过程,提供一个并行化编程模型和接口,让程序员可以方便快速地编写出大数据并行处理程序。MapReduce 以键值对数据输入方式来处理数据,并能自动完成数据的划分和调度管理。在程序执行时,MapReduce 并行计算框架将负责调度和分配计算资源,划分和输入输出数据,调度程序的执行,监控程序的执行状态,并负责程序执行时各计算节点的同步以及中间结果的收集整理。MapReduce 框架提供了一组完整的供程序员开发 MapReduce 应用程序的编程接口。

2.分布式文件系统 HDFS

HDFS(Hadoop Distributed File System)是一个类似于 GoogleGFS 的开源的分布式文件系统。它提供了一个可扩展、高可靠、高可用的大规模数据分布式存储管理系统,基于物理上分布在各个数据存储节点的本地 Linux 系统的文件系统,为上层应用程序提供了一个逻辑上成为整体的大规模数据存储文件系统。与 GFS 类似,HDFS 采用多副本(默认为 3 个副本)数据冗余存储机制,并提供了有效的数据出错检测和数据恢复机制,大大提高了数据存储的可靠性。

3.分布式数据库管理系统 HBase

为了克服 HDFS 难以管理结构化 / 半结构化海量数据的缺点,Hadoop 提供了一个大规模分布式数据库管理和查询系统 HBase。HBase 是一个建立在 HDFS 之上的分布式数据库,它是一个分布式可扩展的 NoSQL 数据库,提供了对结构化、半结构化甚至非结构化大数据的实时读写和随机访问能力。HBase 提供了一个基于行、列和时间戳的三维数据管理模型,HBase 中每张表的记录数(行数)可以多达几十亿条甚至更多,每条记录可以拥有多达上百万的字段。

4.公共服务模块 Common

Common 是一套为整个 Hadoop 系统提供底层支撑服务和常用工具的类库和 API 编程接口,这些底层服务包括 Hadoop 抽象文件系统 FileSystem、远程过程调用 RPC、系统配置工具 Configuration 以及序列化机制。在 0.20 及以前的版本中,Common 包含 HDFS、MapReduce 和其他公共的项目内容;从 0.21 版本开始,HDFS 和 MapReduce 被分离为独立的子项目,其余部分内容构成 Hadoop Common。

5.数据序列化系统 Avro

Avro 是一个数据序列化系统,用于将数据结构或数据对象转换成便于数据存储和网络传输的格式。Avro 提供了丰富的数据结构类型,快速可压缩的二进制数据格式,存储持久性数据的文件集,远程调用 RPC 和简单动态语言集成等功能。

6.分布式协调服务框架 Zookeeper

Zookeeper 是一个分布式协调服务框架,主要用于解决分布式环境中的一致性问题。Zookeeper 主要用于提供分布式应用中经常需要的系统可靠性维护、数据状态同步、统一命名服务、分布式应用配置项管理等功能。Zookeeper 可用来在分布式环境下维护系统运行管理中的一些数据量不大的重要状态数据,并提供监测数据状态变化的机制,以此配合其他 Hadoop 子系统(如 HBase、Hama 等)或者用户开发的应用系统,解决分布式环境下系统可靠性管理和数据状态维护等问题。

7.分布式数据仓库处理工具 Hive

Hive 是一个建立在 Hadoop 之上的数据仓库,用于管理存储于 HDFS 或 HBase 中的结构化 / 半结构化数据。它最早由 Facebook 开发并用于处理并分析大量的用户及日志数据,2008 年 Facebook 将其贡献给 Apache 成为 Hadoop 开源项目。为了便于熟悉 SQL 的传统数据库使用者使用 Hadoop 系统进行数据查询分析,Hive 允许直接用类似 SQL 的 HiveQL 查询语言作为编程接口编写数据查询分析程序,并提供数据仓库所需要的数据抽取转换、存储管理和查询分析功能,而 HiveQL 语句在底层实现时被转换为相应的 MapReduce 程序加以执行。

8.数据流处理工具 Pig

Pig 是一个用来处理大规模数据集的平台,由 Yahoo! 贡献给 Apache 成为开源项目。它简化了使用 Hadoop 进行数据分析处理的难度,提供一个面向领域的高层抽象语言 Pig Latin,通过该语言,程序员可以将复杂的数据分析任务实现为 Pig 操作上的数据流脚本,这些脚本最终执行时将被系统自动转换为 MapReduce 任务链,在 Hadoop 上加以执行。Yahoo! 有大量的 MapReduce 作业是通过 Pig 实现的。

9.键值对数据库系统 Cassandra

Cassandra 是一套分布式的 K-V 型的数据库系统,最初由 Facebook 开发,用于存储邮箱等比较简单的格式化数据,后 Facebook 将 Cassandra 贡献出来成为 Hadoop 开源项目。Cassandra 以 Amazon 专有的完全分布式 Dynamo 为基础,结合了 Google BigTable 基于列族(Column Family)的数据模型,提供了一套高度可扩展、最终一致、分布式的结构化键值存储系统。它结合了 Dynamo 的分布技术和 Google 的 Bigtable 数据模型,更好地满足了海量数据存储的需求。同时,Cassandra 变更垂直扩展为水平扩展,相比其他典型的键值数据存储模型,Cassandra 提供了更为丰富的功能。

10.日志数据处理系统 Chukwa

Chukwa 是一个由 Yahoo!贡献的开源的数据收集系统,主要用于日志的收集和数据的监控,并与 MapReduce 协同处理数据。Chukwa 是一个基于 Hadoop 的大规模集群监控系统,继承了 Hadoop 系统的可靠性,具有良好的适应性和扩展性。它使用 HDFS 来存储数据,使用 MapReduce 来处理数据,同时还提供灵活强大的辅助工具用以分析、显示、监视数据结果。

11.科学计算基础工具库 Hama

Hama 是一个基于 BSP 并行计算模型(Bulk Synchronous Parallel,大同步并行模型)的计算框架,主要提供一套支撑框架和工具,支持大规模科学计算或者具有复杂数据关联性的图计算。Hama 类似 Google 公司开发的 Pregel,Google 利用 Pregel 来实现图遍历(BFS)、最短路径(SSSP)、PageRank 等计算。Hama 可以与 Hadoop 的 HDSF 进行完美的整合,利用 HDFS 对需要运行的任务和数据进行持久化存储。由于 BSP 在并行化计算模型上的灵活性,Hama 框架可在大规模科学计算和图计算方面得到较多应用,完成矩阵计算、排序计算、PageRank、BFS 等不同的大数据计算和处理任务。

12.数据分析挖掘工具库 Mahout

Mahout 来源于 Apache Lucene 子项目,其主要目标是创建并提供经典的机器学习和数据挖掘并行化算法类库,以便减轻需要使用这些算法进行数据分析挖掘的程序员的编程负担,不需要自己再去实现这些算法。Mahout 现在已经包含了聚类、分类、推荐引擎、频繁项集挖掘等广泛使用的机器学习和数据挖掘算法。此外,它还提供了包含数据输入输出工具,以及与其他数据存储管理系统进行数据集成的工具和构架。

13.关系数据交换工具 Sqoop

Sqoop 是 SQL-to-Hadoop 的缩写,是一个在关系数据库与 Hadoop 平台间进行快速批量数据交换的工具。它可以将一个关系数据库中的数据批量导入 Hadoop 的 HDFS、HBase、Hive 中,也可以反过来将 Hadoop 平台中的数据导入关系数据库中。Sqoop 充分利用了 Hadoop MapReduce 的并行化优点,整个数据交换过程基于 MapReduce 实现并行化的快速处理。

14.日志数据收集工具 Flume

Flume 是由 Cloudera 开发维护的一个分布式、高可靠、高可用、适合复杂环境下大规模日志数据采集的系统。它将数据从产生、传输、处理、输出的过程抽象为数据流,并允许在数据源中定义数据发送方,从而支持收集基于各种不同传输协议的数据,并提供对日志数据进行简单的数据过滤、格式转换等处理能力。输出时,Flume 可支持将日志数据写往用户定制的输出目标。

原文地址:https://www.cnblogs.com/esllovesn/p/12196703.html