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
- complete 全量数据
- append 本次新增
- update
StreamExeution 持续查询
- 通过source.getOffset()获取最新的offsets,即最新的数据进度。
- 将offsets写入offsetLog (WAL)用作故障恢复。
- 构造本次逻辑计划logisPlan
3.1 将预定义的逻辑计划成员变量制作一个副本
3.2 根据source.getBatch(offset)收到的数据用Dataset/DataFrame表示。 - 触发执行计划的优化
4.1 逻辑优化:通过Catalyst优化器完成。
4.2 物理计划的生成与选择:可以直接用于执行的RDD DAG - 将执行结果DataSet/DataFrame 交给 sink。
- 计算完成进行commit.即 source.commit()告知完成处理,垃圾回收。将本次执行的id写入到batchCommit Log中。
另外,引入了全局范围的高可用的StateStore。
增量计算:
每次执行时,从StateStore里restore上次执行后的状态。然后加入本次执行的新数据,再计算。
如何保证end-to end exactly -once-guarantees
- offset tracking in WAL
- state management
- fault-tolerant sources and sinks.
网友评论