写点什么

架构师训练营第 1 期 - 第 13 周学习总结

用户头像
Anyou Liu
关注
发布于: 2020 年 12 月 20 日

本周学习了大数据计算引擎 Spark、流处理计算、大数据基准测试工具、大数据分析与可视化、网页排名算法 PageRank、分类和聚类算法、推荐引擎算法、机器学习与神经网络算法

一、大数据计算引擎 Spark

Spark 特点

  • DAG 切分的多阶段计算过程更快速

  • 使用内存存储中间计算结果更高效

  • RDD 的编程模型更简单

作为编程模型的 RDD

  • RDD 是 Spark 的核心概念,是弹性分布式数据集(Resilient Distributed Datasets)的缩写。RDD 既是 Spark 面向开发者的编程模型,又是 Spark 自身架构的核心元素。

  • Spark 直接针对数据进行编程,将大规模数据集合抽象成一个 RDD 对象,然后在这个 RDD 上进行各种计算处理,得到一个新的 RDD,继续计算处理,直到得到最后的结果数据。Spark 可以理解成是面向对象的大数据计算。在进行 Spark 编程的时候,思考的是一个 RDD 对象需要经过什么样的操作,转换成另一个 RDD 对象,思考的重心和落脚点都在 RDD 上。

  • RDD 上定义的函数分 2 种,一种是转换函数,这种函数的返回值还是 RDD,另一种是执行函数,这种函数不返回 RDD

作为数据分片的 RDD

  • 跟 MapReduce 一样,Spark 也是对大数据进行分片计算,Spark 分布式计算的数据分片、任务调度都是以 RDD 为单位展开的,每个 RDD 分片都会分配到一个执行进程去处理。

  • RDD 上的转换操作分成 2 种,一种转换操作产生的 RDD 不会出现新的分片,比如 map、filter 等,Spark 只有在产生新的 RDD 分片时候,才会在物理上真的生成一个 RDD,Spark 的这种特性也叫做惰性计算。

  • 另一种转换操作产生的 RDD 则会产生新的分片,比如 reduceByKey,来自不同分片的相同 key 必须聚合在一起进行操作,这样会产生新的 RDD 分片。

Spark 的计算阶段

  • 和 MapReduce 一个应用一次只运行一个 map 和一个 reduce 不同,Spark 可以根据应用的复杂程度,分割成更多的计算阶段,这些计算阶段组成一个有向无环图 DAG,Spark 任务调度器可以根据 DAG 的依赖关系执行计算阶段。

  • Spark 作业调度执行的核心就是 DAG,有了 DAG,整个应用就被切分成哪些阶段,每个阶段的依赖关系也就清楚了。之后再根据每个阶段要处理的数据量生成相应的任务集合(TaskSet),每个任务都分配一个任务进程去处理,Spark 就实现了大数据的分布式计算。

  • 负责 Spark 应用 DAG 生成和管理的组件是 DAGScheduler,DAGScheduler 根据程序代码生成 DAG,然后将程序分发到分布式计算集群,按计算阶段的先后关系调度执行。

Spark 的作业管理

  • Spark 里面的 RDD 函数有 2 种,一种是转换函数,调用以后得到的还是一个 RDD,RDD 的计算逻辑主要通过转换函数完成。

  • 另一种是 action 函数,调用以后不再返回 RDD,比如 count()函数、saveAsTextFile(path)等

  • Spark 的 DAGScheduler 在遇到 shuffle 的时候,会生成一个计算阶段,在遇到 action 函数的时候,会生成一个作业(job)。

Spark 的执行过程

  • 首先,Spark 应用程序启动 Driver 进程,启动后调用 SparkContext 初始化执行配置和输入数据。SparkContext 启动 DAGScheduler 构造执行的 DAG 图,切分成最小的执行单位也就是计算任务。

  • 然后 Driver 向 Cluster Manager 请求计算资源,用于 DAG 的分布式计算。Cluster Manager 收到请求后,将 Driver 的主机地址等信息通知给集群中所有的计算节点 Worker。

  • Worker 收到信息以后,根据 Driver 的主机地址,跟 Driver 通信并注册,然后根据自己的空闲资源向 Driver 通报自己可以领用的任务数。Driver 根据 DAG 图开始向注册的 Worker 分配任务。

  • Worker 收到任务后,启动 Executor 进程开始执行任务。Executor 先检查自己是否有 Driver 的执行代码,如果没有,从 Driver 下载执行代码,通过 Java 反射机制加载后开始执行。

二、流处理计算

Storm

实时计算系统

  • 低延迟

  • 高性能

  • 分布式

  • 可伸缩

  • 高可用

Storm 的基本概念

  • Nimbus :负责资源分配和任务调度

  • Supervisor :负责接受 Nimbus 分配的任务,启动和停止属于自己管理的 Worker 进程

  • Worker :运行具体处理组件逻辑的进程

  • Topology :Storm 中运行的一个实时应用程序,根据各个组件间的消息流动形成逻辑上的一个拓扑结构

  • Spout :在一个 Topology 中产生源数据流的组件。通常情况下 Spout 会从外部数据源中读取数据,然后转换为 Topology 内部的源数据。Spout 是一个主动的角色,接口中有个 nextTuple()函数,Storm 框架会不停地调用此函数,用户只要在其中生成源数据即可。

  • Bolt :在一个 Topology 中接收数据然后执行处理的组件。Bolt 可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt 是一个被动的角色,接口中有个 execute(Tuple input)函数,在接收到消息后会调用此函数,用户可以在其中执行自己想要的操作。

Storm 的 Stream Grouping

Stream Grouping 定义了一个流在 Bolt 任务间该如何被切分。有 6 个 Stream Grouping 类型:

  • 随机分组(Shuffle grouping)

  • 字段分组(Fields grouping)

  • 全部分组(All grouping)

  • 全局分组(Global grouping)

  • 无分组(None grouping)

  • 直接分组(Direct grouping)

  • 还可以实现 CustomStreamGrouping 接口定制自己需要的分组

Spark Streaming

Sparking Streaming 在 Spark Engine 之前增加了一个 Spark Streaming 组件,这个组件接受流式输入的数据,根据时间间隔比如每 1 秒钟收集流式数据,得到一批一批的数据,然后发送给 Spark 引擎处理,可以把流式数据理解成很小很小的一批批数据,只要批足够小,就跟流式数据一样。

Flink

Flink 有流处理计算和批处理计算。流处理计算的输入是流式数据,批处理计算的输入是批数据。

三、大数据基准测试工具

HiBench 是一个开源的 Hadoop Benchmark Suit,可以用来对以下场景进行基准测试:

  • Micro Benchmarks :有 Sort、WordCount、TeraSort

  • HDFS Benchmarks :有 DFSIO

  • Web Search Benchmarks :有 Nutch indexing、PageRank

  • Machine Learning Benchmarks :有 Mahout Bayesian Classification、Mahout K-means Clustering

  • Data Analytics Benchmarks : 有 Hive Query Benchmarks

四、大数据分析与可视化

互联网运营常用数据指标

  • 新增用户数

  • 用户留存率

  • 活跃用户数

  • PV

  • GMV

  • 转化率

数据可视化图表与数据监控

  • 折线图

  • 散点图

  • 热力图

  • 漏斗图

五、网页排名算法 PageRank

互联网中包含数以万亿计的网页,每个网页都是一个超链接,如何对这些网页进行排名呢,Google 采用了 PageRank 算法进行网页排名。

基本的思想是根据网页中的超链接来投票,如果一个网页被其他网页作为超链接引用,那么引用的越多,说明这个网页越重要,那么排名就越高。

那么如何进行投票呢?

假设有 4 个网页,A、B、C、D,网页 B、C、D 都包含超链接指向 A,那么 A 的 PR(PageRank)值是 B、C、D 的 PageRank 值的总和

这里的分子 L(B)、L(C)、L(D)代表的是超链接的数量,就是每个投票的页面的 PageRank 值要根据超链接数把权重平分出去然后投给链接到的页面。

如何解决循环链接?

网页只有对自己的出链,或者几个网页的出链接形成一个循环圈,那么在不断迭代的过程中,PR 值将只增不减,这个是有问题的。我们可以采用随机浏览的方式,假设用户浏览网页的时候,他可能点击网页中的超链接,或者也可能直接在浏览器中输入跳转的网页,直接在浏览器中输入网页是随机的,那么上面 A、B、C、D 的公式是:


这里 d 是一个随机数,默认是 0.85

那么通用公式可以表示为:


互利网上的网页数量数以万亿计,需要利用大数据计算来进行排名计算。

六、分类和聚类算法

KNN 分类算法

KNN 算法也叫 K 近邻(K Nearest Neighbour)算法,对于一个需要分类的数据,将其和一组已经分类标注好的样本集合进行比较,得到距离最近的 K 个样本,K 个样本最多归属的类别,就是这个需要分类数据的类别。

数据的距离算法

对于数据 xi 和 xj,若其特征空间为 n 维实数向量空间 Rn,即 xi=(xi1,xi2,...,xin),xj=(xj1,xj2,...xjn),那么可以根据欧氏距离计算公式

或者余弦相似度计算公式

提取文本的特征值 TF-IDF 算法

TF 是词频(Term Frequency),表示某个单词在文档中出现的频率

IDF 是逆文档频率(Inverse Document Frequency),表示这个单词在所有文档中的稀缺程度


贝叶斯分类算法

K-means 聚类算法

  • 第 1 步,随机在图中取 K 个种子点

  • 第 2 步,求图中所有点到这 K 个种子点的距离,假如一个点离种子点 X 最近,那么这个点属于 X 点群

  • 第 3 步,对已经分好组的 K 组数据,分别求其中心点

  • 第 4 步,重复第 2 步和第 3 步,直到每个分组的中心点不再移动。这时候,距每个中心点最近的点数据聚类为同一组数据

七、推荐引擎算法

有以下推荐场景:

  • 基于人口统计的推荐

  • 基于商品属性的推荐

  • 基于用户的协同过滤推荐

  • 基于商品的协同过滤推荐

八、机器学习与神经网络算法

机器学习系统架构

  • 根据样本数据,利用学习算法进行训练,得到一个机器学习模型,然后把预测数据作为输入,根据机器模型得到输出,就是预测结果

  • 样本,就是通常我们常说的训练数据,包括输入和输出 2 部分

  • 模型,就是映射样本输入和样本结果的函数,可能是一个条件概率分布,也可能是一个决策函数。一个具体的机器学习系统所有可能的函数构成了模型的假设空间

  • 算法,就是要从模型的假设空间中寻找一个最优的函数,使得样本空间的输入 X 经过该函数的映射得到的 f(X),和真实的 Y 值之间的距离最小

机器学习的数学原理

给定模型类型,也就是给定函数类型的情况下,如何寻找使结构风险最小的函数表达式。由于函数类型已经给定,实际上就是求函数的参数。

感知机

感知机是一种比较简单的二分类模型,将输入特征分类为+1、-1 两类。

神经网络

类似于大脑的神经网络,感知机就是神经元,感知机的输出就是突触,连接着其他感知机的输入,就是树突,把很多个感知机通过输入和输出连接起来,形成网络,就像人脑的神经网络一样进行思考,进化成真正的人工智能

用户头像

Anyou Liu

关注

还未添加个人签名 2019.05.24 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第 13 周学习总结