Spark入门

Posted _TIM_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark入门相关的知识,希望对你有一定的参考价值。

spark的特性:

响应速度快、易用性、通用性、兼容性(可以运行在各种模式下: stadnAlone,yarn,mesos和local模式)

spark的主要架构模块:

  • sparkCore:核心模块,最底层的支持,支持上层的各种其他的模块稳定运行。可以用于做数据清洗,格式的转换等等,可以替代掉mr
  • sparkSQL:处理结构化的数据的模块,用于结构化的数据分析,可以替代掉hive
  • sparkStreaming:用于实时处理的模块,可以替代掉storm
  • graphx:图计算 ,主要用于分析一些用户的关系图
  • MLib:机器学习模块
  • 任务资源调度平台:spark可以自身做任务调度,也可以将任务调度交给第三方平台去做,例如yarn或mesos

Hadoop就剩下唯一的作用:数据存储,还有一个功能就是yarn

spark的主要架构:

  • master:主节点,主要用于集群的管理,任务资源的分配,以及接受客户端提交的任务
  • worker:从节点,主要是负责执行任务
  • executor:进程,启动一些进程来准备执行任务,是资源分配的工具
  • task:线程,任务执行的最小粒度单位
  • application:运行一个main方法,就是一个application
  • job:一个application里面可能包含多个job
  • client:客户端,主要用于提交任务。
  • Driver:驱动程序,主要是负责DAG划分,stage划分,以及task的分解等等

standAlone模式

spark集群运行。由多台服务器组成spark的集群,需要启动master以及worker进程

slaves文件:主要是用于配置从节点在哪些服务器上面

spark on yarn两种模式

clinet模式:适用于测试环境,显示最终执行的结果。Driver运行在client客户端

cluster模式:适用于生产环境,不会显示最终执行的结果。Driver运行在applicationMaster里面

Spark的Shell

运行spark-shell进入local模式,实现单词计数统计

scala> sc.textFile("file:///export/servers/sparkdatas/wordcount.txt").flatMap(x => x.split(" ")).map(x => (x,1)).reduceByKey((x:Int,y:Int) => x + y).collect

sc.textFile("file:///export/servers/sparkdatas/wordcount.txt").flatMap(x => x.split(" ")).map(x => (x,1)).reduceByKey((x:Int,y:Int) => x + y).collect

使用下划线代替简写

sc.textFile("file:///export/servers/sparkdatas/wordcount.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect

RDD的基本概念

弹性:数据优先装在内存当中进行处理,如果内存不够用了,就将数据放到磁盘上面去处理

分布式:一个完整的文件,分布在不同的服务器上面

数据集:可以简单的理解为就是一个集合

特点:rdd不可变,可分区,里面的元素可以被并行的计算

为什么会产生RDD

第一代计算引擎:MR,使用代码来实现数据分析处理等等。缺点,需要使用大量代码,复杂性太高

第二代计算引擎:hive,使用hql来实现数据分析,摆脱了mr的繁琐的代码。缺点:执行效率慢

第三代计算引擎:以spark,impala,等等为首的内存计算框架。将数据尽量都放到内存当中进行计算

RDD的五大属性

  • 分区列表
  • 作用在每一个文件切片上面的函数
  • RDDs 依赖于其他的一些RDD
  • 可选项:对于key,value对的rdd,有分区函数
  • 可选项:数据的位置优先性来进行计算。移动计算比移动数据便宜

如果文件在哪一台服务器上面,就在哪一台服务器上面启动task进行运算,尽量避免数据的拷贝

RDD的弹性:

  1. 自动进行内存以及磁盘文件切换
  2. 基于血统lineage的高效容错性。lineage记录了rdd之间的依赖关系
  3. task执行失败自动进行重试
  4. stage失败自动进行重试
  5. checkpoint实现数据的持久化保存

RDD的特点:

  • 分区
  • 只读:rdd当中的数据是只读的,不能更改
  • 依赖:rdd之间的依赖关系
  • 缓存:常用的rdd我们可以给缓存起来
  • checkpoint:持久化,对于一些常用的rdd我们也可以试下持久化

RDD的创建三种方式

  • 从文件当中创建
  • 从一个集合当中创建
  • 从其他的rdd转化而来

对RDD的操作各种算子介绍:

flatMap,map,reduceByKey,saveAsTextFile . collect 等等这些都是spark当中常用的算子,算子又分为两大类:

transfermation:转换的算子,对数据做进一步的转换

action:动作算子,触发整个任务去执行

transfermation的算子全部都是懒执行的,如果在代码当中调用了transfermation算子,不会马上去执行,只是记录了血统关系。等到真正的调用action的时候,才会触发整个任务去执行

transfermation算子介绍:

  • map:将分区里面每一条数据取出来,进行处理
  • mapPartitions :一次性将一个分区里面的数据全部取出来。效率更高
  • partitionBy:重新分区,注意:有可能会产生shuffle过程
  • rdd.partitionBy(new HashPartitioner(2)) ==> 重新分区,分区数我们自己手动指定的。分区可能变多也可能变少,而且partitionBy还会产生shuffle过程
  • coalesce:缩减分区数到指定的值,分区的个数只能减少,不能变多。不会产生shuffle过程,适用于一些大的数据集filter过滤之后,进行缩减分区,提高效率
  • repartition:数据重新随记分发,会产生shuffle过程

重新分区总结:

partitionBy:重新分区,按照我们指定的规则进行重新分区,分区数有可能变多,也有可能变少。会产生shuffle过程

coalesce:只能缩减分区,不会产生shuffle过程

repartition:重新分区。随机洗牌冲洗分区,没有任何规则,可以将分区数变大,或者变小,会产生shuffle的过程

reduceByKey:效率更高,会对数据提前进行部分的聚合,减少数据的key的shuffle

groupByKey:效率低下,尽量不要用

以上是关于Spark入门的主要内容,如果未能解决你的问题,请参考以下文章

Spark内存管理详解(下)——内存管理

Spark RDD理解

Spark入门

Spark入门

spark-使用总结-大数据基础入门

Spark入门——什么是Hadoop,为什么是Spark?