架构师训练营第 1 期 - 第 13 周学习总结
本周学习了大数据计算引擎 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 两类。
神经网络
类似于大脑的神经网络,感知机就是神经元,感知机的输出就是突触,连接着其他感知机的输入,就是树突,把很多个感知机通过输入和输出连接起来,形成网络,就像人脑的神经网络一样进行思考,进化成真正的人工智能
评论