Spark初识

1 Spark的背景、定义、特点

  • 背景
    • MapReduce框架局限性
      • 仅支持Map和Reduce两种操作,提供给用户的只有这两种操作
      • 编程复杂度略高,学习和使用成本略高。
      • 处理效率低效
      • Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据
      • 任务调度和启动开销大
      • 在机器学习、图计算等方面支持有限,性能效率表现比较差。
      • mapreduce的机器学习框架,称为mahout。
  • 定义
    • 专为大规模数据处理而设计的快速通用的计算引擎,并形成一个高速发展应用广泛的生态系统。
  • 特点
    • 速度快
      • 内存计算下,Spark 比 Hadoop 快100倍
    • 易用性
      • 80多个高级运算符
      • 跨语言:使用Java,Scala,Python,R和SQL快速编写应用程序。
    • 通用性
      • Spark 提供了大量的库,包括SQL、DataFrames、MLib、GraphX、Spark Streaming。
      • 开发者可以在同一个应用程序中无缝组合使用这些库。
  • 支持多种资源管理器
    • Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
  • 生态组件丰富与成熟

    • spark streaming:实时数据处理
    • shark/sparkSQL:用sql语句操作spark引擎
    • sparkR:用R语言操作Spark
    • mlib:机器学习算法库
    • graphx:图计算组件

      2 在hadoop生态圈中位置

  • 在hadoop生态圈位置

1 spark初识 - 图1

  • spark生态圈

1 spark初识 - 图2

  • Spark Core:包含Spark的基本功能;尤其是定义RDD(弹性分布式数据集,resilient distributed dataset)的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
  • Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
  • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
  • MLib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
  • GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
  • SparkR是一个提供从R中使用Spark的轻量级前端的R包。在Spark1.6以后,SparkR提供了分布式数据框架,它支持selection,filtering,aggregation等操作。也支持使用MLib分布式机器学习。

    3 版本发展与就业前景

  • 版本发展

    • 重要里程碑

1 spark初识 - 图3

  • 稳定版本一览( 2016年至今)
    • Spark 3.1.2 (06.11 2021)
    • Spark 2.4.8 (05.17 2021)
    • Spark 3.1.1 (03.02 2021)
    • Spark 2.4.7 (12.12 2020)
    • Spark 3.0.0 (06.16 2020)
    • Spark 2.4.6 (06.05 2020)
    • Spark 2.4.4 (08.31 2019)
    • Spark 2.4.0 (11.02 2018)
    • Spark 2.3.2 (09.25 2018)
    • Spark 2.3.1 (Jun 08 2018)
    • Spark 2.3.0 (Feb 28 2018)
    • Spark 2.2.2 (Jul 02 2018)

1 spark初识 - 图4
较经典的版本为1.x中的1.6.2版本和2.x中的2.3.2,成熟稳定,市占率高。

  • spark1.x与2.x的优缺点对比
    • 优点
      • API抽象更高级、更统一,包括在spark-core,sparksql,sparksession等方面,学习更简单,开发效率更高,执行效率综合提升明显。
      • 统一DataFrames和DataSets为DataSets,API进行了全部统一,简化学习和编程复杂度。
      • 基本定位是低层API编程延用RDD,高级API编程均为DataSets,而大多数情况下用DataSets均可以解决问题。
      • spark-streaming基于spark sql进行了API更高级抽象,即structured streaming(结构化流式编程),易用性和性能提高。
      • 对诸多组件中的旧的rdd计算逻辑用DataFrame或DataSet进行了重写优化,并扩充了更多的算法。
    • 缺点
      • 对以前版本不是完全兼容,只是绝大部分兼容。
      • 相对于1.6.x来讲,稳定性略差, bug不断。
    • 结论
      • 鉴于版本的迭代逐渐成熟化,我们本次授课定版为2.3.2版本。
  • 就业前景
    • 成熟度相比于hadoop还差一些,但自身迭代和生态圈发展很快。
    • 业务对实时性要求日渐增高,各大公司和小公司都在积极调研转向spark,都需要懂spark、用spark的人
    • Spark特别适合于迭代运算比较多的机器学习算法,而机器学习正在如火如荼发展中。
    • Spark未来可能会取代MapReduce,但与Hadoop仍会友好共生。
    • 基于内存计算是最大优势,而内存瓶颈会越来越少,故Spark的爆发点还有很大空间。
    • 总结:岗位需求量和发展前景都很广阔,是未来3-5年的技术应用最大热门。