【大数据】Spark

spark是一个快速的通用的集群计算平台。

特点:

  • 快速:比hadoop快出100倍,hadoop框架mapreduce计算需要落地。map任务结束后将结果输出到磁盘或者hdfs,reduce从hdfs读取数据,计算结果又放到 hdfs上,涉及到i/o。同时shuffle机制也需要i/o,伴随数据迁移。耗费时间。
  • spark相对而言,将mapreduce的计算过程需要的数据尽量的放到内存,当达到一定阈值才往磁盘里写;
  • 另外spark计算引擎会根据RDD的依赖关系,生成DAG,由于对RDD的计算是惰性的,在Spark实际执行任务的时候,才会去加载数据,就能做到数据在被需要时加载。

应用场景: 各种实时处理,离线处理, 各种推荐系统
能将各种类型的数据源转换成统一的RDD格式,通过RDD的格式进行各种数据操作。

Spark原理:
   master:负责资源的调度和分配
   worker:负责资源分配和Executor的启动执行任务及对executor的监控
   Executor:负责创建线程启动任务,执行。
   Driver;就是一个驱动类,这个驱动类是启动main进程(main是整个程序的入口)
 

Spark生态圈:

RDD:

     RDD是一个分布式的,弹性的数据集,是spark应用中最基本的统一的数据格式单位
     RDD分区就是一段连续的数据片

不同的数据源,要统一格式,而这个统一的格式就是RDD。

由RDD1转换为RDD2,再到RDD3,计算过程中并不直接计算具体的数据,只是计算这个代表而已。而这种转换关系就叫依赖关系。
     依赖关系:包括宽依赖和窄依赖
         宽依赖:父RDD是和子RDD一对一的关系
         窄依赖:父RDD是和子RDD多对多的关系
     RDD是可以读取的,RDD是不可以修改的,只能对RDD进行转换,转换成新的RDD。
     DAG有向无环图
      每一个这样的图就是一个DGA有向无环图
      遇到宽依赖及断开,这样就形成一个stage
      每个DGA转换我spark当中的Job
      每个作业Job划分出多个stage
      每个stage对应一个task的集合TaskSet
      每个task会在每个分区执行一个实例

spark开发编程就是创建rdd,转rdd,计算生成结果的过程。    
     创建我们的上下文内容
     通过上下文内容进行创建RDD
RDD的创建方式:
     通过parallelize并行化创建(parallelize一般用于自己开发测试使用)
     通过textFile()读取外部数据创建RDD
     map():就是将每个数据进行函数操作
     foreach:就是对每个对结果数据进行操作,它是行动算子,触发操作
     collect:行动算子,触发操作  
     saveAsTextFile:行动算子,触发操作  
RDD算子:两类
   转换操作-->懒操作只是将RDD转换成新的RDD
   行动操作-->Action操作或触发操作,生成结果。
   转换算子:
     map  filter mapValues keys values persist
     reduceByKey groupByKey sorteByKey  经常发生shuffer
   行动算子:
     collect count take first saveAsTextFile foreach
   共享变量:
     广播变量:定义后不用原理的变量,使用广播变量
               广播变量可以在多个任务之间使用,可以在不同的服务器之间使用。
               避免多个服务器数据重复
               取值使用value
     累加器: 使用上下文变量sparkContext对象sc调用accumulator方法创建累加器。
              使用累加器对象调用add方法,对数据进行累加。
              累加器可以在不同的任务之间使用,可以在不同的服务器之间使用。
              取值方式使用value

猜你喜欢

转载自blog.csdn.net/Qmilumilu/article/details/104677910
今日推荐