spark

第一章 Spark介绍

1-1 Spark简介

Spark的含义:是一个快速且通用的集群计算平台

Spark的特点:

  1. spark是快速的

    1. Spark扩充了流行的Mapreduce计算模型

    2. Spark是基于内存的计算

  2. spark是通用的

    1. 容纳了其他分布式系统拥有的功能:批处理、迭代式计算、交互查询和流处理,方便维护

    2. 优点:降低了维护成本

  3. spark是高度开放的

    1. 提供了python、java、scala、SQL的API和丰富的内置库(Scala是spark的原生语言)

    2. 和其他的大数据工具整合的很好,包括hadoop、kafka等

1-2 Spark生态介绍

  1. Spark历史
    1. 诞生于2009年,加州大学伯克利分校RAD实验室的一个研究项目,最初是基于Hadoop MapReduce
    2. 发现MapReduce在迭代式计算和交互式上抵消,引入内存存储
    3. 2010年3月份Spark开源
    4. 2011年AMP实验室在Spark上开发高级组件,像Spark Streaming
    5. 2013年转移到了Apache下,不久便成为顶级项目了。
  2. Spark的组件:

Spark包括多个紧密集成的组件

Spark组件

  1. Spark Core: 
    1. 包含Spark的基本功能,包含任务调度,内存管理,容错机制等。

    2. 内部定义了RDDs(弹性分布式数据集)

    3. 提供了很多API来创建和操作这些RDDs。

    4. 应用场景,为其他组件提供底层的服务。

  2. Spark SQL:

    1. 是Spark处理结构化数据的库,就像Hive SQL,MySQL一样。

    2. 应用场景,企业中用来做报表统计。

  3. Spark Streaming:

    1. 是实施数据流处理的组件,类似Storm。

    2. Spark Streaming提供了API来操作实施流数据。

    3. 应用场景,企业中用来从Kafka接受数据做实时统计。

  4. Mlib:

    1. 一个包含通用机器学习功能的包,Machine learning lib.

    2. 包含分类,聚类,回归等,还包括模型评估,和数据导入。

    3. Milb提供的上面这些方法,都支持集群上的横向扩展。

    4. 应用场景,机器学习。

  5. Graphx:

    1. 是处理图的库(例如,社交网络图),并进行图的并行计算。

    2. 像Spark Streaming, Spark SQL一样, 它也集成了RDD API。

    3. 它提供了各种图的操作,和常用的图算法,例如PangeRank算法。

    4. 应用场景,图计算

  6. Cluster Managers:

    1. 就是集群管理,Spark自带一个集群管理是单独调度器。

    2. 常见集群管理包括Hadoop YARN, Apache Mesos。

  7. 紧密集成的优点:

    1. Spark底层优化了,基于Spark底层的组件,也得到了相应的优化。

    2. 紧密集成,节省了各个组件组合使用时的部署,测试等时间。

    3. 向Spark增加新的组件时,其他组件,可立刻享用新组件的功能。

1-3 Spark与Hadoop的比较

  1. Hadoop应用场景
    1. 离线处理

    2. 对时效性要求不高

  2. Spark应用场景

    1. 时效性要求高的场景

    2. 机器学习等领域

  3. 比较

    Doug Cutting(Hadoop之父)的观点:
    1. 这是生态系统,每个组件都有其作用,各善其职即可。

    2. Spark不具有HDFS的存储能力,要借助HDFS等持久化数据。

    3. 大数据将会孕育出更多的新技术。

第二章 Spark安装

。。。。

第三章 Spark的RDDs

3-1 RDDs介绍

  1. Driver program:

    1. 包含程序的main()方法,RDDs的定义和操作。

    2. 它管理很多节点,我们称作executors。

  2. SparkContext:

    1. Driver programs通过SparkContext对象访问Spark。

    2. SparkContext对象代表和一个集群的连接。

    3. 在Shell中SparkContext自动创建好了,就是sc。

  3. RDDs:

    1. Resilient distributed datasets(弹性分布式数据集,简称RDDs)。

    2. 这些RDDs,并行的分布在整个集群中。

    3. RDDs是Spark分发数据和计算的基础抽象类。

    4. 一个RDD是一个不可改变的分布式集合对象。

    5. Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。

    6. 一个RDD内部有很多partition(分片)组成的。

  4. 分片:

    1. 每个分片包括一部分数据,partitions可在集群不同节点上计算。

    2. 分片是Spark并行处理的单元,Spark顺序的,并行的处理分片。

  5. RDDs的创建方法:

    1. SparkContext的parallelize()方法:

      把一个存在的集合传给SparkContext的parallelize()方法,一般测试使用;val rdd = sc.parallelize(Array(1, 2, 2, 4), 4),第1个参数:待并行化处理的集合,第2个参数:分区个数。
    2. 加载外部数据集:

      val rddText = sc.textFile("helloSpark.txt")
  6. Scala的基础知识

    1. Scala的变量声明

      1. val:变量值是不可修改的,类似java final。

      2. var:变量值定义完是可以修改的。

      3. 创建变量是val/var

    2. Scala的匿名函数和类型推断

      1. lines.filter(line => line.contains("world")),定义一个匿名函数,接受line.

      2. 使用line这个Strig类型的变量上的contains方法,并且返回结果

      3. line不需要制定类型,会自动推断

3-2 RDDs基本操作Transformation

  1. Transformations介绍

    Transformations(转换)从之前的RDD构建一个新的RDD,像map() 和 filter()。
  2. 逐元素Transformation

    1. map(): map()接收函数,把函数应用到RDD的每一个元素,返回新的RDD。

      如:
      val rdd1 = sc.parallelize(Array("hello","world","hello","scala"))
      
      val rdd2 = rdd1.map(word=>(word,1))
      
      rdd2.foreach(println)

      rdd2输出结果示例如下:

      (hello,1)

      (world,1)

      (hello,1)

      (scala,1)

    2. filter(): filter()接受函数,返回只包含满足filter()函数的元素的新RDD。

      如:
      val rdd1 = sc.parallelize(Array("hello","world","hello","scala"))
      
      val rdd2 = rdd1.filter(word=>word.contains("hello"))
      
      rdd2.foreach(println)

      rdd2输出结果示例如下:

      world
      scala

       

    3. flatMap(): flatMap()对每个输入元素,输出多个输出元素。flat压扁的意思,将RDD中的元素压扁后返回一个新的RDD。

      如:

      test.txt文件内容如下: 

      cat duck
      dog fish
      cow sheep

      执行如下代码:

      val input = sc.TextFile("test.txt")
      val flat = input.flatMap(line=>line.split(" "))
      flat.foreach(println)

      flat输出结果示例如下:

      cat 
      duck
      dog 
      fish
      cow 
      sheep

       

  3. 集合运算

    RDDs支持数学集合的计算,例如去重,并集,交集,差集等计算。
    1. 去重:rdd1.distinct()

    2. 并集:rdd1.union(rdd2)

    3. 交集:rdd1.intersection(rdd2)

    4. 差集:rdd1.subtract(rdd2)

3-3 RDDs基本操作Action

  1. Action介绍

    在RDD上计算出来一个结果。把结果返回给driver program或保存在文件系统。
  2. 常用函数

 

  1. collect(): 返回RDD的所有元素。

  2. count(): 计数。

  3. countByValue(): 返回一个map表示唯一元素出现的个数。

  4. take(num): 返回几个元素。

  5. top(num): 返回前几个元素。

  6. takeOrdered(num)(ordering): 返回基于提供的排序算法的前几个元素。

  7. takeSample(withReplacement, num, [seed]): 取样例。

  8. reduce(fun): 合并RDD中元素。

  9. fold(zero)(fun): 与reduce()相似提供zero value。

  10. aggregate(zeroValue)(seqOp, combOp): 与fold()相似,返回不同类型。

  11. foreach(fun): 对RDD的每个元素作用函数,什么也不返回

3-4 RDDs的特性

  1. Spark维护着RDDs之间的依赖关系和创建关系,叫做血统关系图;Spark使用血统关系图来计算每个RDD的需求和恢复丢失的数据。

RDDs的血统关系图:

2. 延迟计算(Lazy Evaluation):

  1. Spark对RDDs的计算是,他们第一次使用action操作的时候。

  2. 这种方式在处理大数据的时候特别有用,可以减少数据的传输。

  3. Spark内部记录metadata表明transformations操作已经被响应了。

  4. 加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去。

3. RDD.persist(): 持久化

  1. 默认每次在RDDs上面进行action操作时,Spark都重新计算RDDs,如果像重复利用一个RDD,可以使用RDD.persist()。

  2. unpersist()方法从缓存中移除。

  3. 例子RDD.persist()

3-5 RDDs的特性

  1. 创建KeyValue对RDDs:
    1. 使用map()函数,返回key/value对,例如,包含数行数据的RDD,把每行数据的第一个单词作为keys;

  2. KeyValue对RDDs的Transformations:

    1. reduceByKey(fun): 把相同Key的结合。

    2. groupByKey(): 把相同的key的values分组。

    3. combineByKey(): 把相同key的结合,使用不同的返回类型。

    4. mapValues(fun): 函数作用于pairRDD的每个元素,key不变

    5. flatMapValues(fun): 符号化的时候使用

    6. keys: 仅返回keys

    7. values: 仅返回values

    8. sortByKey(): 按照key排序的RDD

  3. combineByKey(createCombiner, mergeValue, mergeCombiners, partitioner):

    1. 最常用的基于key的聚合函数,返回的类型可以与输入类型不一样,许多基于key的聚合函数都用到了它,如groupByKey();

    2. 原理:遍历partition中的元素,元素的key,要么之前见过的,要么不是。如果是新元素,使用我们提供的createCombiner()函数,如果是这个partition中已经存在的key,就会使用mergeValue()函数,合计每个partition的结果的时候,使用mergeCombiners()函数

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值