spark

spark笔记 #

1. spark基础知识 #

1.1. 是什么 #

Spark是基于内存的集群计算系统,为了让数据分析更快。

Spark拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘机器学习等需要迭代的MapReduce的算法。

Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

1.2. 优势 #

  • spark中间数据放到内存中,对于迭代计算效率更高
  • spark比hadoop更通用
  • spark提供了统一的编程接口
  • spark通过checkpoint机制实现容错性
  • spark支持scala/java/python以及交互式shell,相当易用

1.3. 组件 #

  • Spark Streaming: 实时流数据处理
  • Spark SQL(DataFrames): 结构化数据查询
  • MLLib: Spark生态解决大数据机器学习问题
  • GraphX: 构建于Spark之上的图计算模型
  • SparkR

1.4. 名词解释 #

1.4.1. 什么是RDD #

RDD,全称Resilient Distributed Datasets,翻译为弹性分布式数据集,可以让用户显式地将数据存储到磁盘或者内存中,并且控制数据的分区,同时RDD有丰富的API来操作这些数据。

RDD特点:

  • RDD在集群节点上,是不可变且已经分区的集合对象
  • RDD通过并行转换的方式创建,比如map,filter,join,etc.
  • RDD失败回自动重建
  • 可以控制存储级别来进行重用
  • 必须是可序列化的数据
  • 必须是静态类型

1.4.2. RDD术语 #

DAGScheduler: 实现将Spark作业任务分解成一个或者多个Stage,每个Stage根据RDD的Partition个数,决定Task个数,然后生成相应的Task Set放到TaskScheduler中。

TaskScheduler:实现Task分配到Executor上执行

Task:运行在Executor上的工作单元

Job:SparkContext提交的具体Action操作,常和Action对应

Stage:每个Job会被拆解为多组Task,每组Task被称为Stage,也被成为TaskSet

RDD:弹性分布式数据集,是Spark最核心的模块和类

Transformation/Action: SparkAPI的两种类型,其中Transformation返回值还是一个RDD;而Action返回值不是RDD,而是一个Scala集合;所有的Transformation都是采用懒策略,如果只有Transformation提交,是不会执行计算的,只有在Action被提交时才会触发

DataFrame:带有schema信息的RDD,主要是结构化数据的高度抽象

DataSet:结合了DataFrame和RDD两者的优势,允许用户方便的操作领域对象,又具有SQL执行引擎的高效表现

1.4.3. 什么是DataFrame #

DataFrame是一种以RDD为基础的分布式数据集,类似关系行数据库的二维表。

1.4.4. 各种服务组件 #

Client:客户端进程,负责提交作业到Master Master:Standalone模式中的主控节点,负责接受Client的作业,管理Worker,并命令Worker启动分配Driver和启动Executor的资源 Worker:Standalone模式中slave节点上的守护进程,负责管理本节点资源,定期向master发送心跳,接受master的命令,启动Driver和Executer Driver:一个Spark作业运行时包括一个Driver进程,也就是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上,包括DagScheduler和TaskScheduler Executor:真正执行作业的地方,一个集群包含多个Executor,每个执行器接受Driver的命令运行Task,一个执行器可以执行多个Task

1.4.5. DSM #

DSM(distributed shared memory)

RDD只能通过粗粒度转换来创建,而DSM则允许对每个内存位置上数据的读和写。在这种定义下,DSM不仅包括了传统的共享内存系统,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式数据库等。

1.4.6. 如何获取RDD #

  1. 共享文件系统(如HDFS)
  2. 通过已存在的RDD转换
  3. 将已存在scala集合并行化,通过调用SparkContext的parallelize方法实现
  4. 改变现有RDD的持久性

1.5. Spark Streaming #