6 宋宇翔

北京知道创宇信息技术有限公司 - 大数据分析师

我要认证

雷厉风行,强大的责任心和coding驱动,对技术的热忱,爱自己!

等级
TA的排名 1w+

Flink 源码分析之 Flink startupMode 是如何起作用的

之前一直有个疑问,如果consumer.setStartFromLatest()以及kafkaProperties.put("auto.offset.reset", "earliest")同时存在,究竟哪一个会起作用,答案肯定是consumer.setStartFromLatest(),为什么呢?我们一起来看一下@Overridepublic void open(Configuration configuration) throws Exception {// determine th.

2020-07-31 00:40:18

Flink 源码分析之 Flink 是如何 kafka 读取数据的

首先来看一下 FlinkKafkaConsumerBase.run方法,相当于是Flink 从kafka中拉取数据的入口方法://入口方法 start a sourcepublic void run(SourceContext<T> sourceContext) throws Exception {......// from this point forward:// - 'snapshotState' will draw offsets from the f.

2020-07-31 00:39:36

Flink 源码分析之 FlinkConsumer 是如何保证一个 partition 对应一个 thread 的

我们都知道flink 连接kafka时,默认是一个partition对应一个thread,它究竟是怎么实现的呢?以及到我们自己定义 RichParallelSourceFunction 的时候如何借鉴这部分代码呢?我们一起来看一下(基于flink-1.8)看过flink kafka连接器源码的同学对 FlinkKafkaConsumerBase 应该不陌生(没有看过的也无所谓,我们一起来看就好)一起来看一下 FlinkKafkaConsumerBase 的 open 方法中关键的部分.

2020-07-31 00:38:49

Flink 源码分析之 Flink 自定义 source、sink 是如何起作用的

自从学会自定义source之后,一直都比较好奇,为什么我实现一个 *SourceFunction,我自己定义的代码就可以跟 Flink很好的整合在一起?下面以 RichParallelSourceFunction 为例,来具体看一下究竟是自定义 source 是如何执行的首先看一下 Flink中的抽象类 AbstractUdfStreamOperator,专门负责Rich*Function的 open 和close方法......// flink 提供的 Rich*Funct.

2020-07-31 00:38:09

Flink 源码分析之一文搞懂 Flink 消息全流程

我们以下面代码为例:FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("canal_monitor_order_astable", new SimpleStringSchema(), properties);consumer.setStartFromEarliest();env.addSource(consumer).flatMap(...).print()当 Flink.

2020-07-31 00:37:14

Flink 源码分析之写给大忙人看的 Flink Window 原理

Window 可以说是 Flink 中必不可少的 operator 之一,在很多场合都有很非凡的表现。今天呢,我们就一起来看一下 window 是如何实现的。window 分类Tumbling WindowSliding WindowSession WindowGlobal Windowwindow operatorevictorevictor 主要用于做一些数据的自定义操作,可以在执行用户代码之前,也可以在执行用户代码之后,更详细的描

2020-07-31 00:35:25

Flink 源码分析之 - 如何保存 offset

Flink对Offset的管理,有两种方式:1.Checkpointing disabled 完全依赖于kafka自身的API2.Checkpointing enabled 当checkpoint做完的时候,会将offset提交给kafka or zk本文只针对于第二种,Checkpointing enabledFlinkKafkaConsumerBase中的 notifyCheckpointComplete@Override//当checkpoint完成的时候,此方.

2020-07-31 00:33:36

Spark SQL之External DataSource外部数据源(二)源码分析

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的。 /**Spark SQL源码分析系列文章*/(Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例http://blog.csdn.net/oopsoom/article/details/42061077)一、Sources包核心 Spark SQL在Spark1.2中提供了...

2020-07-31 00:30:01

Spark SQL 源码分析之 In-Memory Columnar Storage 之 in-memory query

前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的。 那么基于以上存储结构,我们查询cache在jvm内的数据又是如何查询的,本文将揭示查询In-Memory Data的方式。一、引子本例使用hive console里查询cache后的src表。select value from src当我们将src表cache到了内存后,再次查询src,可以通过analyzed执行计划来观察内部调用。即parse后,会形成InMemor..

2020-07-31 00:29:17

Spark SQL 源码分析之 In-Memory Columnar Storage 之 cache table

Spark SQL 可以将数据缓存到内存中,我们可以见到的通过调用cache table tableName即可将一张表缓存到内存中,来极大的提高查询效率。 这就涉及到内存中的数据的存储形式,我们知道基于关系型的数据可以存储为基于行存储结构 或 者基于列存储结构,或者基于行和列的混合存储,即Row Based Storage、Column Based Storage、 PAX Storage。 Spark SQL 的内存数据是如何组织的? Spark SQL 将数据加载到内存是...

2020-07-30 15:53:24

Spark SQL Catalyst源码分析之UDF

在SQL的世界里,除了官方提供的常用的处理函数之外,一般都会提供可扩展的对外自定义函数接口,这已经成为一种事实的标准。 在前面Spark SQL源码分析之核心流程一文中,已经介绍了Spark SQL Catalyst Analyzer的作用,其中包含了ResolveFunctions这个解析函数的功能。但是随着Spark1.1版本的发布,Spark SQL的代码有很多新完善和新功能了,和我先前基于1.0的源码分析多少有些不同,比如支持UDF:spark1.0及以前的实现:...

2020-07-30 15:52:44

Spark SQL 源码分析之Physical Plan 到 RDD的具体实现

接上一篇文章Spark SQL Catalyst源码分析之Physical Plan,本文将介绍Physical Plan的toRDD的具体实现细节: 我们都知道一段sql,真正的执行是当你调用它的collect()方法才会执行Spark Job,最后计算得到RDD。 lazy val toRdd: RDD[Row] = executedPlan.execute() Spark Plan基本包含4种操作类型,即BasicOperator基本类型,还有就是Join、Aggregate和S...

2020-07-30 15:52:06

Spark SQL Catalyst源码分析之Physical Plan

前面几篇文章主要介绍的是spark sql包里的的spark sql执行流程,以及Catalyst包内的SqlParser,Analyzer和Optimizer,最后要介绍一下Catalyst里最后的一个Plan了,即Physical Plan。物理计划是Spark SQL执行Spark job的前置,也是最后一道计划。 如图:一、SparkPlanner话接上回,Optimizer接受输入的Analyzed Logical Plan后,会有SparkPlanner来对Opti...

2020-07-30 15:51:26

Spark SQL Catalyst源码分析之Optimizer

/**Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程、SqlParser,和Analyzer以及核心类库TreeNode,本文将详细讲解Spark SQL的Optimizer的优化思想以及Optimizer在Catalyst里的表现方式,并加上自己的实践,对Optimizer有一个直观的认识。 Optimizer的主要职责是将Analyzer给Resolved的Logical Plan根据不同的优化策略Batch,来对语法树进行优...

2020-07-30 15:50:40

Spark SQL Catalyst源码分析之TreeNode Library

/**Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程、SqlParser,和Analyzer,本来打算直接写Optimizer的,但是发现忘记介绍TreeNode这个Catalyst的核心概念,介绍这个可以更好的理解Optimizer是如何对Analyzed Logical Plan进行优化的生成Optimized Logical Plan,本文就将TreeNode基本架构进行解释。 一、TreeNode类型 ...

2020-07-30 15:49:37

Spark SQL Catalyst源码分析之Analyzer

/**Spark SQL源码分析系列文章*/ 前面几篇文章讲解了Spark SQL的核心执行流程和Spark SQL的Catalyst框架的Sql Parser是怎样接受用户输入sql,经过解析生成Unresolved Logical Plan的。我们记得Spark SQL的执行流程中另一个核心的组件式Analyzer,本文将会介绍Analyzer在Spark SQL里起到了什么作用。 Analyzer位于Catalyst的analysis package下,主要职责是将Sql Pa...

2020-07-30 15:48:43

Spark SQL Catalyst源码分析之SqlParser

/**Spark SQL源码分析系列文章*/ Spark SQL的核心执行流程我们已经分析完毕,可以参见Spark SQL核心执行流程,下面我们来分析执行流程中各个核心组件的工作职责。 本文先从入口开始分析,即如何解析SQL文本生成逻辑计划的,主要设计的核心组件式SqlParser是一个SQL语言的解析器,用scala实现的Parser将解析的结果封装为Catalyst TreeNode ,关于Catalyst这个框架后续文章会介绍。一、SQL Parser入口 Sq...

2020-07-30 15:48:05

Spark SQL源码分析之核心流程

/**Spark SQL源码分析系列文章*/ 自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几人到了几十人,而且发展速度异常迅猛,究其原因,个人认为有以下2点: 1、整合:将SQL类型的查询语言整合到 Spark 的核心RDD概念里。这样可以应用于多种任务,流处理,批处理,包括机器学习里都可以引入Sql。 2、效率:因为Shark受到hive的编程模型限制,无法再继续优化来...

2020-07-30 15:47:08

Spark详解(十四):Spark SQL的Join实现

1. 简介Join是SQL语句中的常用操作,良好的表结构能够将数据分散在不同的表中,使其符合某种范式,减少表冗余、更新容错等。而建立表和表之间关系的最佳方式就是Join操作。Join连接是大数据处理的重要手段,它基于表之间的共同字段将来自两个或多个表的行结合起来。如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的。2. Join的基本要素如下图所示,Join大致包括三个要素:Join方

2020-07-30 01:53:39

sql:谓词

谓词就是返回值为真值的函数。1.like谓词:字符串的部分一致查询取ddd开头的字符串: select * from SampleLike where strcol like 'ddd%'; %代表0字符以上的任意字符串,是通配符其中的一种2.between谓词:范围查找选取销售单价为100-1000的商品: select product_name, sale_price from Product where sal..

2020-07-29 18:33:10

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。