走进Spark

  • 什么是Spark
    • 是一个基于内存的,用于大规模数据处理(离线计算、实时计算、快速查询(交互式查询))的统一分析引擎,因为是基于内存的所以可以更快的完成任务
      • 离线计算:离线计算一般存储在HDFS中使用MapReduce或Hive处理,离线计算启动进程,处理完成后销毁进程
      • 实时计算:实时计算一般存储在消息队列中,使用Spark(DStream)或者Storm、Flink等其他实时计算框架,进程7*24小时运行都在
  • 应用场景
    • 大规模数据处理和分析
    • 流处理 : Spark Streaming可以处理实时数据流,并将其转换为可供分析和存储的批处理数据。
    • 机器学习 :Spark提供了机器学习库,可以支持各种机器学习算法和模型训练。
  • 特点
    • 快: Spark 计算速度是 MapReduce 计算速度的10-100倍
    • 易用: MapReduce 支持1种计算模型,Spark 支持更多的计算模型
    • 通用: Spark 能够进行离线计算、交互式查询(快速查询)、实时计算、机器学习、图计算
    • 兼容性:Spark 支持大数据中的 Yarn 调度,支持 mesos。可以处理 hadoop 计算的数据。
  • 架构组件
    • Spark Core: Spark 核心功能均由 Spark Core 模块提供,是 Spark 运行的基础。
    • Spark SQL:Spark 的 SQL 查询和分析引擎,它可以将结构化数据转换为 RDD 数据集,然后使用 Spark 的优化算法来执行查询。
    • Spark Streaming:Spark 的流处理引擎,它可以处理实时数据流并将其转换为 RDD 数据集,然后使用 Spark 的优化算法来执行查询。
    • Spark MLlib:机器学习库,它提供了一组 API,用于训练和部署机器学习模型。
    • Spark GraphX:的图计算库,它提供了一组 API,用于处理图数据
  • 工作原理
    • 应用程序初始化:Spark 应用程序首先在 driver 中初始化 SparkContext
    • 数据分区:Spark 将数据分成多个分区,然后在集群中的不同节点上并行处理这些分区。
    • 任务调度:Spark 的任务调度器将任务分配给可用的执行器。
    • 数据传输:Spark 将数据传输到执行器以进行处理。
    • 数据处理:执行器使用 RDD API 对数据进行处理。
    • 结果返回:执行器将结果返回到驱动程序。
  • 基本概念
    • RDD:弹性分布式数据集,是一种容错的、可以被并行操作的元素集合,是 Spark 对所有数据处理的一种基本抽象。
    • DAG:有向无环图,是 Spark 中最重要的一个概念之一,它描述了数据的依赖关系。
    • Transformation:转换操作,是 Spark 中最常用的一种操作,包括 map、filter、flatmap 等。
    • Action:动作操作,是 Spark 中最基本的一种操作,包括 count、collect、saveAsTextFile 等。
  • 常踩的坑
    • SparkSQL查询优化:SparkSQL是Spark的一个模块,它提供了一种标准化的查询语言,可以轻松操作存储在各种存储系统中的数据。但是,如果查询优化不当,也会影响程序的运行效率
    • 整合Hive报错: 解决方法是在spark-submit命令中添加上hive-site.xml配置文件。
    • 数据倾斜问题: Spark SQL 的执行过程中,由于某些 key 的数据量过大,导致这些 key 对应的 partition 中的数据量过大,从而使得这些 partition 的计算时间过长,从而影响整个查询的执行效率
      • 分区键的设计
      • 分桶
      • 哈希算法和随机数解决
    • Spark SQL 数据类型不匹配

你可能感兴趣的:(spark,大数据,分布式)