厦大课程:Spark编程基础(Python版)html
优秀博文:Spark源码分析系列(目录)node
Volumn, Variety, Velocity, Value。sql
经过数据发现问题,再解决问题。数据库
全样分析,精确度的要求下降。编程
(1) 批处理计算网页爬虫
(2) 流计算架构
S4, Flume, Storm 框架
(3) 图计算分布式
GIS系统,Google Pregel, 有专门图计算的工具。ide
(4) 查询分析计算
Google Dremel, Hive, Cassandra, Impala等。
SaaS, PaaS, IaaS
流程:ETL (Spark) --> Dataware house (HDFS, Cassandra, HBase) --> Data analysis (Spark) --> Reporting & visualization
Lambda 架构:同时处理“实时”和“离线”的部分。
Tez | 构建有向无环图。 |
Hive | 数据仓库,用于企业决策,表面上写得是sql,实际转换为了mapReduce语句。 |
Pig | 相似sql语句的脚本语言,能够嵌套在其余语言中。(提供轻量级sql接口) |
Oozie | 先完成什么,再完成什么。 |
Zookeeper | 集群管理,哪台机器是什么角色。 |
Hbase | 面向列的存储,随机读写;HDFS是顺序读写。 |
Flume | 日志收集。 |
Sqoop | 关系型数据库导入Hadoop平台。主要用于在Hadoop(Hive)与传统的数据库间进行数据的传递 |
Ambari | 部署和管理一整套的各个套件。 |
Java派别的Spark竞争对手。
基于“流处理”模型,实时性比较好。
Goto: 第一次有人把Apache Flink说的这么明白!
翻译成Flink or Spark的形式,相似于 Keras,试图统一接口。
Goto: Apache Beam -- 简介
// word count.
rdd = sc.textFile("input.csv") wordCounts = rdd.map(lambda line: line.split(",")) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda x, y: x+y).collect()
(1) RDD 数据抽象
RDD: 弹性分布式数据集(内存中),存储资料的基本形式。
分区数量能够 动态变化。
(2) DAG 有向无环图
(3) 运行在Executor上的工做单元 - Task
“进程”派生出不少“线程”,而后完成每个任务。
Executor进程,驻留在每个work node上的。
(4) 做业 - Job
一个做业包含多个RDD。
一个做业分解为多组任务,每一组的集合就是 Stage。
(5) Applicaiton
用户编写的spark程序。
基本运行框架。其中,Cluster Manager: spark自带的、Yarn等等。
SparkContext解析代码后,生成DAG图。
(1) 高度受限 - 只读
本质是:一个 "只读的" 分区记录集合。
Transformation 过程当中,RDD --> RDD,期间容许“修改”。
(2) 两种“粗粒度”操做
* Action类型。(触发计算获得结果)
* Transformation类型。(只是作了个意向记录)
"细粒度" 怎么办?例如:网页爬虫,细粒度更新。
由于提供了更多的操做,这些 “操做的组合” 也能够作“相同的事情“。
(3) 更多的"操做"
好比:map, filter, groupBy, join
之因此”高效“,是由于管道化机制。因此不须要保存磁盘,输入直接对接上一次输出便可。
数据复制,记录日志(关系数据库),但,这样开销太大了。
Spark是自然容错性:DAG,能够根据先后节点反推出错误的节点内容。
根据 “宽依赖” 划分 “阶段” 的过程。
一个父亲对多个儿子。
例如:groupByKey, join操做。
要点:如果宽依赖,则可划分为多个”阶段“。
由于这样符合优化原理。
(a) 窄依赖:不要”落地“,比如不用”写磁盘“,造成管道化的操做。
本来的 "窄依赖" 操做流程。
优化后的操做流程。
(b) 宽依赖:就会遇到shuffle操做,意味着“写磁盘”的一次操做。
“窄依赖”:多个父亲对应一个儿子,不会阻碍效率。
Ref: https://www.zhihu.com/question/23079001
/* implement */
End.