写在前面:此书很棒,但需要一定的编程功底,此外强烈建议买书,因为很多架构图、算子列表,我也不会摘抄下来。
第一章 简介
1.Spark执行的特点
Hadoop中包含计算框架MapReduce和分布式文件系统HDFS等。
Spark是MapReduce的替代方案,且兼容HDFS, Hive等分布式存储层,融入Hadoop的生态系统,并弥补MapReduce的不足。
①中间结果输出
Spark将执行工作流抽象为通用的有向无环图(DAG)执行计划,可将多Stage的任务串联或并行执行,而无须将Stage的中间结果输出到HDFS中,类似的引擎包括Flink, Dryad, Tez等。
②数据格式和内存布局
RDD: 支持粗粒度的写操作,但对于读操作可精确到每条记录
Spark的特性是能控制不同节点上的分区,用户可自定义分区策略
③执行策略
Spark执行过程中,不同Stage之间须进行Shuffle
Shuffle是链接有依赖的Stage的桥梁,上游Stage输出到下游Stage必须经过Shuffle
Spark Shuffle支持基于Hash或排序的分布式聚合机制。
④任务调度的开销
Spark采用了事件驱动的类库AKKA来启动人物,通过线程池的复用线程来避免系统启动和切换开销
第二章 Spark开发与环境配置
略
第三章 BDAS简介
1.Spark生态系统BDAS
BDAS是博客里大学提出的基于Spark的数据分析栈。
其框架核心是Spark,同时涵盖Spark SQL, MLBase, MLlib, GraphX, Spark Streaming, 近似查询引擎BlinkDB,内存分布式文件系统Techyon, 资源管理框架Mesos等子项目。
①SQL on Spark
AMPLab将大数据分析负载分为三类:批量数据处理、交互式查、实时流处理
据Spark峰会2014上博客里大学的Big Data Benchmark测试结果,Shark in Memory效率是Hive的100倍,即便On Disk也有10倍于Hive的效率。 作为Shark的进化版本, Spark SQL性能更优于Shark。
SQL经过查询优化其最终转化为一个执行计划树,而Spark SQL还会将这个执行计划树转化为DAG再执行。
整个Catalyst是Spark SQL的调度核心。
②Spark Streaming
Spark Streaming讲数据流以时间片为单位分割成RDD,使用RDD处理每一块数据。
每块数据(RDD)都会生成一个Spark Job进行处理,最终以批处理的方式处理每个时间片的数据。
Spark Streaming将Dstream操作转换为Dstream DAG, 对每个时间片,Dstream DAG产生一个RDD DAG。
之后的操作就回归了Spark主线,Job->JobManager->Spark DAG Scheduler, 最后发给Executor.
③GraphX
GraphX实现了大规模图计算的功能,是常见的图算法在Spark上并行化的实现,同时提供了丰富的API。
GraphX的特点是离线计算,批量处理。基于同步的BSP模型(Bulk Synchronous Parallel Computing Model, 整体同步并行计算模型),这样的优势在于可以提升数据处理的吞吐量和规模,但是会造成速度上稍逊一筹。
目前大规模图处理框架还有基于MPI模型的异步图计算模型GraphLab和同样基于BSP模型的Graph等。
现在和GraphX可以组合使用的分布式图数据库是Neo4J,Neo4J是一个高性能的、菲关系的、具有完全事务特性的、鲁棒的图数据库。
另一个数据库是Titan,Titan是一个分布式的图形数据库,特别为存储和处理大规模图形数据而优化。
GraphX的操作符介绍:本书P46-48
④MLlib
MLlib是构建在Spark上的分布式机器学习库,充分利用了Spark的内存计算和适合迭代型计算的特性,性能得到优化。
MLlib是AMPLab的在研机器学习项目MLBase的底层组件,MLBase收一个机器学习平台,MLI是接口层,提供很多结构,MLlib是底层算法实现层。
K-means 算法浅析
https://zhuanlan.zhihu.com/p/20432322
比knn稍微复杂一些,还没理解更新cluster中心点后,怎样去更新已有的cluster内数据点
(即牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个居民又去了离自己最近的布道点……)
源码直接看书
第四章 Lamda架构日志分析流水线
TODO