zoukankan      html  css  js  c++  java
  • 离线批处理之Spark

    Spark简介

        Spark是基于内存的分布式批处理系统,它把任务拆分,然后分配到多个的CPU上进行处理,处理数据时产生的中间产物(计算结果)存放在内存中,减少了对磁盘的I/O操作,大大的提升了数据的处理速度,在数据处理和数据挖掘方面比较占优势。

    Spark应用场景

    • 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。
    • 迭代计算(Iterative Computation):支持迭代计算,有效应对复杂的数据处理逻辑。
    • 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持多种数据挖掘和机器学习算法。
    • 流式处理(Streaming Processing):支持秒级延迟的流处理,可支持多种外部数据源。
    • 查询分析(Query Analysis):支持SQL的查询分析,同时提供领域特定语言(DSL)以方便操作结构化数据,并支持多种外部数据源。

    Spark对比MapReduce

    • 性能上提升了100倍。
    • Spark的中间数据放在内存中,对于迭代运算的效率更高;进行批处理时更高效,同时有着更低的延迟。
    • Spark提供更多的数据集操作类型,编程模型比MapReduce更灵活,开发效率更高。
    • 更高的容错能力(血统机制)。

    RDD

    RDD是分布式弹性数据集,可以理解一个存储数据的数据结构。Spark会把所要操作的数据,加载到RDD上,即RDD所有操作都是基于RDD来进行的。RDD是只读和可分区。要想对RDD进行操作,只能重新生成一个新的RDD。

    • 从HDFS输入创建,或从与Hadoop兼容的其他存储系统中输入创建。
    • 从父的RDD转换的到新的RDD。
    • 从数据集合转换而来,通过编码实现。

    RDD的存储:

    • 用户可以选择不同的存储级别缓存RDD以便重用。
    • 当前RDD默认是存储于内存,但当内存不足时,RDD会溢出到磁盘中。

    Shuffle

    Shuffle 是划分 DAG 中 stage 的标识,同时影响 Spark 执行速度的关键步骤

    • RDD 的 Transformation 函数中,分为窄依赖(narrow dependency)和宽依赖(wide dependency)的操作.
    • 窄依赖跟宽依赖的区别是是否发生Shuffle(洗牌) 操作。

    窄依赖

    窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用。 表现为: 一个父RDD的每一个分区对应于一个子RDD分区。

    宽依赖

    宽依赖是指父RDD的每个分区都可能被多个子RDD分区所使用。 表现为: 父RDD的每个分区都被多个子RDD分区使用

    Transformation

    Transformation是RDD的算子类型,它的返回值还是一个RDD。

    Transformation操作属于懒操作(算子),不会真正触发RDD的处理计算。

    变换方法的共同点:

    • 不会马上触发计算。
    • 每当调用一次变换方法,都会产生一个新的RDD。

    例如:map(func),flatMap(func)

    Action

    Action是RDD的算子,它的返回值不是一个RDD。Action操作是返回结果或者将结果写入存储的操作。Action是Spark应用启动执行的触发动作,得到RDD的相关计算结果或将RDD保存到文件系统中。

    SparkConf

    SparkConf是用来对Spark进行任务参数配置的对象。 是通过键值对的形式,设置Spark任务执行时所需要的参数。 Spark读取任务参数的优先级是: 代码配置>动态参数>配置文件。

    SparkContext

    SparkContext是Spark的入口,相当于应用程序的main函数。

    SparkContext表示与Spark集群的连接,可用于在该集群上创建RDD,记录计算结果和环境配置等信息。

    SparkSession

    Spark2.0中引入了SparkSession的概念,为用户提供了一个统一的切入点来使用Spark的各项功能。

    封装了SparkConf和SparkContext对象,方便用户使用Spark的各种API。

    SparkSQL简介

    SparkSQL是Spark用来处理结构化数据的一个模块,可以在Spark应用中直接使用SQL语句对数据进行操作。

    SQL语句通过SparkSQL模块解析为RDD执行计划,交给SparkCore执行。

    通过SparkSession提交SQL语句。任务像普通Spark应用一样,提交到集群中分布式运行。

    JDBC:

    • 应用加载JDBC驱动,然后统一提交到集群的JDBCServer执行。
    • JDBCServer是单点服务,会成为任务执行的瓶颈,不能处理海量数据和高并发任务。

    DataSet:

    • DataSet是一个由特定域的对象组成的强类型集合,可通过功能或关系操作并行转换其中的对象
    • DataSet以Catalyst逻辑执行计划表示,并且数据以编码的二进制形式存储,不需要反序列化就可以执行sort、filter、shuffle等操作。
    • Dataset是“懒惰”的,只在执行action操作时触发计算。当执行action操作时,Spark用查询优化程序来优化逻辑计划,并生成一个高效的并行分布式的物理计

    SparkSQL使用场景

    适合: 结构化数据处理。 对数据处理的实时性要求不高的场景 需要处理PB级的大容量数据。

    不适合: 实时数据查询。

  • 相关阅读:
    ssh图示+hibernate图示
    spring Transactional
    Spring datasource
    sqlloader导入数据
    Spring Aop Annotation(@Pointcut)
    ajax传输文件+检验
    Spring Aop Annotation
    JDK的动态代理
    nginx代理gitlab
    python相关
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/14279946.html
Copyright © 2011-2022 走看看