美文网首页
Spark基础

Spark基础

作者: 不务正业的coder | 来源:发表于2019-04-25 12:23 被阅读0次

    Spark 1.x 和Spark 2.x 区别

    Spark 2.x 只保留SparkSession作为程序的入口。以DataSet和DataFrame作为用户的API,同时满足structured data 、streaming data 、machine learing,graph等应用场景。

    val spark=SparkSession.bulider().master("").getOrCreate()
    val lines=spark.readSream.textFile("...")

    Spark 1.x的RDD 更多时候表示一维,只有行的概念,如RDD[Person],而Spark2.x的DataSet和DataFrame是个二维的数据集。

    备注:Spark1.x 也有DataSet/DataFrame概念,但仅限于SparkSQL,到了2.0时代,已经是全局API了。

    DataSet和DataFrame区别

    DataSet是类型安全的type-safe ,及编码编译时就可能提醒错误。在存存储方面没有多大区别。

    数据源转化

    支持JAVA/JSON/关系数据库表转化为DataSet和DataFrame

    Structured Streaming 无限增长的表格

    Output Mode

    1. complete 全量数据
    2. append 本次新增
    3. update

    StreamExeution 持续查询

    1. 通过source.getOffset()获取最新的offsets,即最新的数据进度。
    2. 将offsets写入offsetLog (WAL)用作故障恢复。
    3. 构造本次逻辑计划logisPlan
      3.1 将预定义的逻辑计划成员变量制作一个副本
      3.2 根据source.getBatch(offset)收到的数据用Dataset/DataFrame表示。
    4. 触发执行计划的优化
      4.1 逻辑优化:通过Catalyst优化器完成。
      4.2 物理计划的生成与选择:可以直接用于执行的RDD DAG
    5. 将执行结果DataSet/DataFrame 交给 sink。
    6. 计算完成进行commit.即 source.commit()告知完成处理,垃圾回收。将本次执行的id写入到batchCommit Log中。

    另外,引入了全局范围的高可用的StateStore。

    增量计算:

    每次执行时,从StateStore里restore上次执行后的状态。然后加入本次执行的新数据,再计算。

    如何保证end-to end exactly -once-guarantees

    1. offset tracking in WAL
    2. state management
    3. fault-tolerant sources and sinks.

    相关文章

      网友评论

          本文标题:Spark基础

          本文链接:https://www.haomeiwen.com/subject/urbagqtx.html