Hadoop vs Spark:

Hadoop:更多地是一个分布式数据基础设施,能够当巨大的数据集分发到多个计算机组成的集群中的多个节点,比有计算处理的功能。

spark:用来对那些分布式数据进行计算处理的平台。 容错性更高,运行更快,更加通用。

   组件:spark core spark SQL spark Streaming MLLIb Graphx

 

SPark 服务器 spark服务器干嘛的_数据

 

 

 

1、基本概念:

  spark:基于内存快速、通用可扩展的大数据处理集群计算平台

  用户程序:基于spark的用户程序

  驱动(driver):运行程序的main() 函数并创建sparkContext。(管理,调度)

    功能:负责向集群申请资源,向资源管理器(master,yarn)注册信息,负责了作业的调度,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler

  执行单元(executor):(执行计算的)工作节点上的一个进程,负责运行task,并且负责将数据存到内存中或者磁盘中

  集群管理器(cluster manager):在集群上获得资源的外部服务 (local,standlone 独立模式,yarn,mesos)

  RDD:弹性分布式数据集,是spark底层分布式存储的数据结构,Spark API都是基于RDD的。弹性表示的是,当数据丢失的时候,数据可以重建。

  Master和worker(资源调度):在使用yarn时,不存在master和worker

 

2、运行原理:

  在提交一个作业后,作业会启动一个对应的驱动 进程,驱动进程会执行main函数并创建sparkContext。驱动进程会向集群管理器申请资源(根据不同的模式,会有不同的集群管理器)。在申请到资源后,驱动进程会开始调度和执行我们写的代码。首先会根据job逻辑执行图(依赖关系)将job划分为多个stage,并为每一个stage创建一批task,这里的task执行的逻辑是一样的,只是处理的数据不一样。一个stage的所有任务都执行成功后,得到中间结果,然后会调度运行下一个stage。下一个stage的输入就是上一个stage的输出的中结果。

  任务划分:Application、job、stage、task

    一个action会生成一个job

    遇到suffle,划分stage

    一个stage里,最后一个rdd有多少个分区就有多少个task (一个stage为一个任务集)

 

3、数据倾斜:

  发生情况:在suffle时,去要从各个节点中取相同的key到同一个节点中,如果过一个key值对应的数据量很大,就会发生数据倾斜(reduceByKe,groupByKey, distinct,join,partitionBy

  定位:

    定位算子:reduceBykey

    结合任务管理界面,查看task运行时间与数据量

    采样,查看key的分布

   处理方法:

    (1)对数据进行预处理:比如HDFS中文件的进行清洗,去重,重建分区等

    (2)过滤掉没有必要并导致倾斜的数据

    (3)提高并行度,插入并行参数,减少每个任务需要处理的数据。

    (4)聚合场景:局部聚合 + 全局聚合 (加前缀)

    (5)小表Join大表, 将小标广播 变成map

    (6)采样倾斜key并拆分Join操作:将key对应数据多的值,形成单独的RDD

 

SPark 服务器 spark服务器干嘛的_数据_02

 

 

 

4、函数式编程:代码更简洁,数据不可变,函数可以接受函数为输入和输出。

 

5、DataFream:

以列(列名,列类型,列值)的形式构成的分布式的数据集,按照列赋予不同的名称。提供了schama视图,可以当做一个表来对待

  DataReam:当类来用

 

6、RDD缓存

  cache() //调用persist(memory_only),只放到内存中

  persist(storageLevel) //默认将rdd序列化存在jvm堆空间

 

7、分区器

  hash分区,

  range分区:key值必须可以排序,所以很少使用

  自定义分区:numPatitions,getPartition(key: Any):Int

8、广播变量,累加器

  广播变量:分布式只读变量

  累加器:分布式只写变量

 

 9、spark 运行模式

  local(本地模式):常用于本地开发测试,本地还分为local单线程和local-cluster多线程;