架构师训练营 1 期 - 第 十三周总结(vaik)
本周概述
本周主要讲解大数据计算引擎 spark,以及其核心编程模型 RDD;然后讲解是的流计算框架 Flink,Storm,Spark Streaming;接着是大数据基准测试工具 HiBeach ,用于测试大数据框架的性能;然后是大数据分析的可视化,大屏展示面板的相关技术;最后是大数据的应用及案例:1,网名排名算法 PageRank 2,分类和聚类算法 3,推荐引擎算法,4 机器学习与神经网络算法
我的规划:本章的内空较多,想短时间学好学透有些困难,特别是自己在实际中应用大数据的机会较少,后续要作为重点扩展阅读和主题学习。
大数据计算引擎 Spark
Spark 为什么更快
DAG 切分的多阶段计算过程更快
使用内存储中间计算结果更高效
RDD 的编程模型更简单
我的思考:其实人们在使用工具的过程自然会去追求更高性能,更方便快速的方式,Spark 能够迅速取代 MapReduce 正是解决相关的痛点。
编程模型 RDD
RDD 是 Spark 的核心概念,是弹性分布式数据集(Resilient Distributed Datasets)的缩写。RDD 既是 Spark 面向开发者的编程模型,也是 Spark 自身架构的核心元素。
可以理解 Spark 的 RDD 是面向对象编程,而 MapReduce 可以理解为面向过程的编程
我的思考:又是一个好熟悉的场景,从过程的方式到面向对象的方式,从更高的抽象来看,这是符合人类思维模式的一种自然发展,编程是人在编程,肯定会符合思维逻辑的发展方式。
作为数据分片的 RDD
RDD 的转换操作分两种,
一种是不生产生新的分片的 RDD,如 map,filter,这种操作并不会在物理上生成一个新的 RDD,物理上,只有产生分片的 RDD,才会在物理上真正生成一个 RDD,这种特性被称作惰性计算。
另一种会产生新的分片,如 reduceByKey,来自不同分片的相同 Key 必须聚合在一起进行操作,这样就产生了新的 RDD
Spark 的计算阶段
Spark 根据应用的复杂程度,分割成更多的计算阶段(stage),这些计算阶段组成一个有向无环图(DAG),Spark 任务调度可以根据 DAG 的依赖关系执行计算阶段。
这个 DAG 对应的 Spark 程序伪代码如下
rddB = rddA.groupBy(key)
rddD = rddC.map(func)
rddF = rddD.union(rddE)
rddG = rddB.join(rddF)
负责 Spark 应用 DAG 生成和管理的组件是 DAGScheduler,DAGScheduler 根据程序代码生成 DAG,然后将程序分发到分布式计算集群,按计算阶段的先后关系高度执行。
Spark 的作业管理
Spark 的 RDD 函数有两种
一种是转换函数,调用以后得到的还是一个 RDD
一种是 action 函数,调用之后不再返回 RDD
Spark 的 DAGScheduler 在遇到 shuffle 的时候,会生成一个计算阶段,在遇到 action 函数的时候,会生成一个作业。
Spark 的执行过程
首先,Spark 应用程序启动在自己的 JVM 进程里,即 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 反射加载后开始执
行。
Spark 生态体系
几种流计算框架
Storm 实时的 Hadoop
低延迟
高性能
分布式
可伸缩
高可用
Storm 的基本概念
Nimbus:负责资源分配和任务调度
Supervisor:负责接受 Nimbus 分配的任务,启动和停止属于自己的管理的 Worker 进程
Worker:运行具体处理组件逻辑的进程。
Task:Worker 中每一个 Spout/Bolt 的线程称为一个 Task
Topology:Storm 中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
Spout:在一个 Topology 中产生源数据流的组件。通常情况下 Spout 会从外部数据源中读取数据,然后转换为 Topology 内部的源数据。Spout 是一个主动的角色,其接口中有个 nextTuple() 函数,Storm 框架会不停地调用此函数,用户只要在其中生成源数据即可。
Bolt:在一个 Topology 中接受数据然后执行处理的组件。Bolt 可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt 是一个被动的角色,其接口中有个 execute(Tuple input) 函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
Tuple:一次消息传递的基本单元。本来应该是一个 key-value 的 map,但是由于各个组件间传递的 tuple 的字段名称已经事先定义好,所以 tuple 中只要按序填入各个 value 就行了,所以就是一个 value list.
Stream:源源不断传递的 tuple 就组成了 stream
我的思考:面对这些莫生的概念,其实不必惊慌,随着不断的学习,反复的理解,慢慢的这些新名字和概念就会在脑子生根发芽,最后会像非常熟悉的老朋友一样熟悉它们,了解它们,知道它们的好外,也明白不好的地方在哪。
Storm 应用场景
Storm 被广泛用来进行实时日志处理,出现在实时统计、实时风控、实时推荐等场景中。
一般来说,我们从类 Kafka 的 metaq 或者基于 HBase 的 TimeTunnel 中读取实时日志
消息,经过一系列处理,最终将处理结果写入到一个分布式存储中,提供给应用程序访
问。
Spark Streaming
Flink
flink 流处理计算
flink 批处理计算
大数据基本测试工具 HiBeach
HiBench 是 Intel 开放的一个 Hadoop Benchmark Suit,包含 9 个典型的 Hadoop 负载
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
主页是:https://github.com/intel-hadoop/hibench
大数据分析与可视化
数据大屏
互联网运营常用数据指标
新增用户数
用户留存率= 留存用户数 / 当期新增用户数
用户流失率 = 1 - 用户留存率
活跃用户数
PV
GMV
转化率= 有购买行为的用户数 / 总访问用户数
数据可视化图表与数据监控
折线图
散点图
热力图
漏斗图
评论