自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 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 31

原创 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 31

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

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

2020-07-31 00:38:49 15

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

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

2020-07-31 00:38:09 38

原创 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 28

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

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

2020-07-31 00:35:25 26

原创 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 22

原创 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 18

原创 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 12

原创 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 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 15

原创 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 15

原创 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 21

原创 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 26

原创 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 15

原创 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 22

原创 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 15

原创 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 22

原创 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 21

原创 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 17

原创 关系代数运算符

关系代数运算符集合运算符运算符 含义 英文 ∪ 并 Union − 差 Difference ∩ 交 Intersection × 笛卡尔积 Cartesian Product 比较运算符运算符 含义 > 大于 ≥ 大于等于 < 小于 ≤ 小于等于 = 等于 ≠ 不等于 专门的关系运算符运算符 含义 英文 σ

2020-07-29 17:23:02 63

原创 使用clickhouse遇到的问题

连接ck服务器提示 ' ClickHouse exception, code: 210'原因:ck默认的配置不支持远程访问。解决方案:设置ClickHouse远程访问1.创建ClickHouse通用配置文件vi /etc/metrika.xml,在文件中添加如下内容:<yandex><networks><ip>::/0</ip></networks></yandex>2.打开ClickHouse用户配置文

2020-07-28 21:01:30 512

原创 网格搜索(GridSearch)及参数说明,实例演示,决策树超参数

网格搜索(GridSearch)及参数说明,实例演示一)GridSearchCV简介网格搜索(GridSearch)用于选取模型的最优超参数。获取最优超参数的方式可以绘制验证曲线,但是验证曲线只能每次获取一个最优超参数。如果多个超参数有很多排列组合的话,就可以使用网格搜索寻求最优超参数的组合。网格搜索针对超参数组合列表中的每一个组合,实例化给定的模型,做cv次交叉验证,将平均得分最高的超参数组合作为最佳的选择,返回模型对象。二)sklearn.model_selection.GridSearch

2020-07-28 14:10:19 66

原创 Flink 1.11 SQL 使用攻略

7 月 6 日,Apache Flink 1.11 正式发布。从 3 月初进行功能规划到 7 月初正式发版,1.11 用将近 4 个月的时间重点优化了 Flink 的易用性问题,提升用户的生产使用体验。SQL 作为 Flink 中公认的核心模块之一,对推动 Flink 流批一体功能的完善至关重要。在 1.11 中,Flink SQL 也进行了大量的增强与完善,开发大功能 10 余项,不仅扩大了应用场景,还简化了流程,上手操作更简单。其中,值得注意的改动包括: 默认 Plann...

2020-07-27 23:00:49 178

原创 spark 读取 hdfs 数据分区规则

下文以读取 parquet 文件 / parquet hive table 为例:hive metastore 和 parquet 转化的方式通过 spark.sql.hive.convertMetastoreParquet 控制,默认为 true。如果设置为 true ,会使用 org.apache.spark.sql.execution.FileSourceScanExec ,否则会使用 org.apache.spark.sql.hive.execution.HiveTableScanExec。

2020-07-27 19:16:03 55

原创 有关用户留存模型的一种设计方法

没错,我的工种就是属于那种史上被人吐槽为最没技术含量、最打杂的工种——数据仓库开发工程师。即使这样,我们也没有放弃理想啊,每天都在思考怎么把工作做的更好,即使打杂,也要打的优雅~~今天分享一个用户留存模型的设计1、抛出问题用户留存是用户分析中最常用到的指标之一。我们常常接到这样的需求:~我们要看1天、2天、3天、4天 … 7天的留存~~我们要看1天、2天、3天、4天 … 28天的留存~还有一些不按套路出牌的:~我们要看第33天的留存~...

2020-07-26 18:32:20 38

原创 数据仓库之拉链表(原理、设计以及在Hive中的实现)

全文由下面几个部分组成:先分享一下拉链表的用途、什么是拉链表。 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别。 举一个具体的应用场景,来设计并实现一份拉链表,最后并通过一些例子说明如何使用我们设计的这张表(因为现在Hive的大规模使用,我们会以Hive场景下的设计为例)。 分析一下拉链表的优缺点,并对前面的提到的一些内容进行补充说明,比如说拉链表和流水表的区别。0x01 什么是拉链表拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记

2020-07-25 23:25:54 77

原创 orc与parquet格式的选择

对于orc与parquet这两种列式存储格式,网上能找到大量的介绍以及对比,此处简单总结一下:orc VS parquet:orc存储压缩率比parquet要高;一般来说,orc读取效率比parquet要高;parquet支持嵌套数据格式,orc原生不支持嵌套数据类型(但可通过复杂数据类型如map<k,v>间接实现,此处情况即对应第二条中的“特例”,影响性能);parquet支持字段扩展,orc原生不支持字段扩展(但可手动重写读取方法实现,此处也对应第二条中的“特例”);应用场景:

2020-07-25 23:11:10 49

原创 文件操作中file.seek()方法

摘要:file.seek()可以将文件游标移动到文件的任意位置,本文具体的file.seek()文件游标移动操作方法、file.seek()方法标准格式是:seek(offset,whence=0)offset:开始偏移量,也就是代表需要移动偏移的字节数。whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。代码:f = open('111.py','rb')print(f.tell...

2020-07-25 20:17:20 45

原创 向量化与编译执行浅析

 向量化执行和编译执行是目前主流的两种数据库执行引擎优化手段,本文从以下几个方面对向量化执行和编译执行进行浅析。一、以当代CPU主要特性为背景,引出数据库执行引擎的主要优化方向。二、分别解析向量化执行和编译执行的原理,并进行对比(结论主要来自2018VLDB论文[1])。三、介绍了以ROF[2]为代表的向量化与编译执行融合的技术。当代CPU特性  了解CPU特性可以让我们真正理解各种数据库执行引擎优化技术的动机。影响数据库执行引擎执行效率的CPU特性主要有以下几点:超标量流水线与乱序执行、分支

2020-07-25 20:07:30 58

原创 spark Streaming 自定义source产生随机数据进行测试

1,因业务需要,需要自己定义数据源,来一直产生数据,需要继承 Receiver类import org.apache.spark.storage.StorageLevelimport org.apache.spark.streaming.receiver.Receiver/** * @Author: wpp * @Date: 2020/5/4 23:36 * *///自定义数据源class CustomSourceReceiver(host: String, port:...

2020-07-25 15:53:22 29

原创 Spark Streaming自定义Receiver

一 背景Spark社区为Spark Streaming提供了很多数据源接口,但是有些比较偏的数据源没有覆盖,由于公司技术栈选择,用了阿里云的MQ服务ONS,要做实时需求,要自己编写Receiver二 技术实现1.官网的例子已经比较详细,但是进入实践还需要慢慢调试,官方文档。2.实现代码,由三部分组成,receiver,inputstream,util3.receiver代码import java.io.Serializableimport java.util.Properti

2020-07-25 15:52:43 18

原创 Spark Streaming 运行日志 、 任务监控 Web UI 、Kafka 、Listener 邮件短信通知

任务监控一、 Spark Web UI对于 Spark Streaming 任务的监控可以直观的通过 Spark Web UI ,该页面包括 Input Rate, Scheduling Delay、Processing Time 等,但是这种方法运维成本较高,需要人工不间断的巡视。这其中包括接受的记录数量,每一个batch内处理的记录数,处理时间,以及总共消耗的时间。在上述参数之中最重要的两个参数分别是Porcessing Time 以及 Scheduling DelayPorc...

2020-07-25 15:51:18 46

原创 SparkSQL基于DataSourceV2自定义数据源

SparkSQL基于DataSourceV2自定义数据源版本说明:Spark 2.3前言:之前在SparkSQL数据源操作文章中整理了一些SparkSQL内置数据源的使用,总的来说SparkSQL支持的数据源还是挺丰富的,但业务上可能不拘束于这几种数据源,比如将HBase作为SparkSQL的数据源,REST数据源等。这里主要讲一下在Spark2.3版本之后推出的DataSourceV2,基于DataSourceV2实现自定义数据源1 DataSourceV1 VS DataSourceV2自S

2020-07-25 15:50:29 62

原创 IDEA升级到2019.3.1 编译Flink 1.10 Error:java: 无效的标记: --add-exports=java.base/sun.net.util=ALL-UNNAMED

解决办法:调出Maven侧边栏,取消勾选java11

2020-07-22 22:57:34 73

原创 MySQL对时间的处理总结

1、to_days函数查询今天的数据:select * from 表名 where to_days(时间字段名) = to_days(now());  to_days函数:返回从0000年(公元1年)至当前日期的总天数2、DAYOFWEEK(date) ,返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。3、WEEKDAY(date) ,返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。4、DAYOFMONTH(date)

2020-07-22 22:46:45 23

原创 MySQL5.7:of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘userinfo.

only_full_group_by说明:only_full_group_by : 使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好...

2020-07-22 20:19:27 49

原创 通过SparkListener监控spark应用

监控spark应用的方式比较多,比如spark on yarn可以通过yarnClient api监控。这里介绍的是spark内置的一种监控方式如果是sparkStreaming,对应的则是streamingListenerpackage cn.com.kong;import org.apache.spark.SparkConf;import org.apache.spark.scheduler.*;import org.apache.spark.sql.SaveMode;impor

2020-07-22 00:53:26 42

原创 Spark 自定义外部数据源2

Data Source APIBasic InterfacesBaseRelation:展示从DataFrame中产生的底层数据源的关系或者表。定义如何产生schema信息。或者说是数据源的关系。 RelationProvider:获取参数列表,返回一个BaseRelation对象。 TableScan:对数据的schame信息,进行完整扫描,返回一个没有过滤的RDD。 DataSourceRegister:定义数据源的简写。ProvidersSchemaRelationProv

2020-07-21 23:17:01 53

原创 spark自定义RDD

一、为什么需要自定义RDD1. spark提供了很多方法读数据源,比如我们当前可以从hdfs文件、jdbc、mongo、hbase等等将数据包装成RDD供我们后续进行处理。如果我们想要读memcache中的数据恐怕就没有现成的了,需要我们自己实现自己的RDD。2. RDD是一种弹性分布式数据集,本质就是对数据的封装与抽象。讲道理我们可以将任何我们想要的数据按照我们的业务情况将数据进行分片,而不是对spark的API深度依赖。二、搭建项目本demo完成功能:...

2020-07-21 17:32:05 40

提示
确定要删除当前文章?
取消 删除