[Spark] 01 - What is Spark

大数据


云计算概念

1、课程资源

厦大课程:Spark编程基础(Python版)html

优秀博文:Spark源码分析系列(目录)node

 

2、大数据特色

大数据4V特性

Volumn, Variety, Velocity, Value。sql

 

思惟方式

经过数据发现问题,再解决问题。数据库

全样分析,精确度的要求下降。编程

 

3、分布式方案

分布式存储

    • 分布式文件系统:GFS/HDFS
    • 分布式数据库:BigTable/HBase
    • NoSql

 

分布式处理

    • map/reduce【面向批处理】
    • Spark【面向批处理】
    • Flink

 

4、大数据计算模式

(1) 批处理计算网页爬虫

(2) 流计算架构

S4, Flume, Storm 框架

(3) 图计算分布式

GIS系统,Google Pregel, 有专门图计算的工具。ide

(4) 查询分析计算

Google Dremel, Hive, Cassandra, Impala等。

 

5、大数据服务

SaaS, PaaS, IaaS

 

6、大数据分析环境 

流程:ETL (Spark) --> Dataware house (HDFS, Cassandra, HBase) --> Data analysis (Spark) --> Reporting & visualization

Lambda 架构:同时处理“实时”和“离线”的部分。

 

   

生态系统

1、Hadoop 生态系统

Tez 构建有向无环图。
Hive 数据仓库,用于企业决策,表面上写得是sql,实际转换为了mapReduce语句。
Pig 相似sql语句的脚本语言,能够嵌套在其余语言中。(提供轻量级sql接口)
Oozie 先完成什么,再完成什么。
Zookeeper 集群管理,哪台机器是什么角色。
Hbase 面向列的存储,随机读写;HDFS是顺序读写。
Flume 日志收集。
Sqoop 关系型数据库导入Hadoop平台。主要用于在Hadoop(Hive)与传统的数据库间进行数据的传递
Ambari 部署和管理一整套的各个套件。

 

2、Spark 生态系统

 

3、Flink

Java派别的Spark竞争对手。

基于“流处理”模型,实时性比较好。

Goto: 第一次有人把Apache Flink说的这么明白!

 

4、Beam

翻译成Flink or Spark的形式,相似于 Keras,试图统一接口。

Goto: Apache Beam -- 简介

 

 

引入 Spark

1、年轻

 

2、代码简洁

// 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()

 

 

 

 

Spark的设计与运行原理


原理分析

1、基本概念

(1) RDD 数据抽象

RDD: 弹性分布式数据集(内存中),存储资料的基本形式

分区数量能够 动态变化

 

(2) DAG 有向无环图

 

(3) 运行在Executor上的工做单元 - Task

“进程”派生出不少“线程”,而后完成每个任务。

Executor进程,驻留在每个work node上的。

 

(4) 做业 - Job

一个做业包含多个RDD。

一个做业分解为多组任务,每一组的集合就是 Stage。

 

(5) Applicaiton

用户编写的spark程序。

 

2、鸟瞰图

基本运行框架。其中,Cluster Manager: spark自带的、Yarn等等。

 

3、申请资源过程

  1. 主节点 Spark Driver (指挥所, 建立sc即指挥官) Cluster Manager (Yarn) 申请资源。
  2. 启动 Executor进程,而且向它发送 code 和 files。
  3. 应用程序在 Executor进程 上派发出线程去执行任务。
  4. 最后把结果返回给 主节点 Spark Driver,写入HDFS or etc.

 

4、运行基本流程

SparkContext解析代码后,生成DAG图。

 

 

 

DAG Scheduler

1、 Resilient Distributed Dataset (RDD)

(1) 高度受限 - 只读

本质是:一个 "只读的" 分区记录集合。

Transformation 过程当中,RDD --> RDD,期间容许“修改”。

 

(2) 两种“粒度”操做

* Action类型。(触发计算获得结果)
* Transformation类型。(只是作了个意向记录)

"细粒度" 怎么办?例如:网页爬虫,细粒度更新。

由于提供了更多的操做,这些 “操做的组合” 也能够作“相同的事情“。

 

(3) 更多的"操做"

好比:map, filter, groupBy, join

之因此”高效“,是由于管道化机制。因此不须要保存磁盘,输入直接对接上一次输出便可。

 

(4) 自然容错机制

数据复制,记录日志(关系数据库),但,这样开销太大了。

Spark是自然容错性:DAG,能够根据先后节点反推出错误的节点内容。

 

2、RDD优化

根据 “宽依赖” 划分 “阶段” 的过程。

“宽依赖” 是啥

一个父亲对多个儿子。

例如:groupByKey, join操做。

要点:如果宽依赖,则可划分为多个”阶段“。

 

“阶段” 如何划分

由于这样符合优化原理。

 

为什么要划分 “阶段”

(a) 窄依赖:不要”落地“,比如不用”写磁盘“,造成管道化的操做。

本来的 "窄依赖" 操做流程。

优化后的操做流程。

 

(b) 宽依赖:就会遇到shuffle操做,意味着“写磁盘”的一次操做。

 

划分阶段实战

“窄依赖”:多个父亲对应一个儿子,不会阻碍效率。

 

 

 

 

内存有限的状况下 Spark 如何处理 T 级别的数据?


Ref: https://www.zhihu.com/question/23079001

 

 

/* implement */

 

 

End.

相关文章
相关标签/搜索