- 博客(30)
- 收藏
- 关注
原创 flink源码分析-StreamGraph的生成
前提之一:DAG理解StreamGraph的前提之一就是要对DAG有向无环图有所了解。需要知道什么是DAG的顶点和边,以及怎么通过顶点和边构建DAG。前提之二:TransformationFlink流处理中的各个算子操作会转化成一系列的Transformation对象进行存储,StreamGraph就是通过一系列的Transformation对象进行构建。Transformation类型OneInputTransformation只有一个输入的一类转化操作,如map、filter、proces
2021-12-28 10:39:22
1489
原创 Flink源码分析-Checkpoint流程
Checkpoint调用链分析JobMaster.triggerSavepointJobMaster触发savepoint的时候,会启动checkpoint。schedulerNG是调度flink jobs的接口。 @Override //方法需要两个参数:checkpoint存储路径,任务是否取消 public CompletableFuture<String> triggerSavepoint( @Nullable final String targe
2021-12-13 16:42:14
1601
原创 scala开发规范整理
格式与命名在两个方法、类、对象定义之间使用一个空白行优先考虑使用val,而非var。当引入多个包时,使用花括号,当引入的包超过6个时,应使用通配符_:在条件或循环语句表达式中,即使表达式只有一行也建议使用花括号//避免def square(x: Int) = x * x//推荐def square(x: Int) = { x * x}常量应该用全大写字母表示,并且放在伴生对象里class Configuration {}object Configuration
2021-12-08 11:05:26
856
原创 DolphinScheduler 在 Windows 本地搭建开发环境,源码启动-记录一个大坑
DolphinScheduler 在 Windows 本地搭建开发环境,源码启动DolphinScheduler官方有一个源码启动的教程,官方本地搭建开发环境教程基于1.3.6-release分支,按照这个教程是可以启动DolphinScheduler的,但是12345端口无法访问。有一个很重要的地方需要改一下才行。application-api.properties文件名称问题因为 dolphinscheduler-api这个歌module的resource文件下application-api.pr
2021-09-13 11:37:18
1263
1
原创 Flink RestClusterClient提交任务源码分析
RestClusterClient提交任务源码分析RestClusterClient和MiniClusterClientsubmitJob提交任务sendRetriableRequest方法sendRequest方法submitRequest方法RestClusterClient和MiniClusterClientMiniClusterClient负责本地提交flink任务RestClusterClient通过 HTTP REST 请求进行提交任务submitJob提交任务submitJob分为几
2021-09-10 16:30:03
1571
1
原创 flink1.13.2的FlameGraph配置及简介
火焰图是什么:火焰图是跟踪堆栈线程然后重复多次采样而生成的。每个方法的调用都会有一个长方型表示,长方型的长度和它在采样中出现的次数成正比。火焰图是基于stack信息生成的SVG 图片, 用来展示 CPU 的调用栈。y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列
2021-09-01 19:27:32
1676
原创 jvm类加载过程
类的生命周期加载加载主要做三件事:找到类文件(通过类的全限定名来获取定义此类的二进制字节流)放入方法区(将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构)开个入口(生成一个代表此类的java.lang.Class对象,作为访问方法区这些数据结构的入口)总的来讲,这一步就是通过类加载器把类读入内存。需要注意的是,第三步虽然生成了对象,但并不在堆里,而是在方法区里连接校验顾名思义,检查Class文件的字节流中包含的信息是否符合当前虚拟机的要求文件格式验证:CA FE BA
2021-06-03 15:51:09
78
原创 Flink写数据到kafka exactly-once模式下找不到序列化类的问题
flink写数据到kafka找不到序列化类的问题问题描述:使用FlinkKafkaProducer011写数据到kafka集群时,在idea测试没问题,数据可以正常写入kafka,但是打成jar包到flink集群执行就报了如下错误。Caused by: org.apache.kafka.common.config.ConfigException: Invalid value org.apache.kafka.common.serialization.ByteArraySerializer for co
2021-05-28 15:05:26
360
原创 flink sql kafka写数据到hive
step1:flink连接hive配置首先确保启动hive metastore远程服务flink安装目录下新建文件夹hive-conf,然后vi hive-site.xml,配置hive仓库地址和metastore远程服务连接地址。(此配置为了在flink集群中启动hive客户端来远程访问hive metastore服务)具体如下:新建hive-conf文件夹:hive-site.xml配置<configuration> <property> <nam
2021-05-27 18:30:08
2500
原创 Flink动态表和时态表总结
动态表动态表 是 Flink 的支持流数据的 Table API 和 SQL 的核心概念。与表示批处理数据的静态表不同,动态表是随时间变化的。可以像查询静态批处理表一样查询它们。查询动态表将生成一个 连续查询 。一个连续查询永远不会终止,结果会生成一个动态表。查询不断更新其(动态)结果表,以反映其(动态)输入表上的更改。本质上,动态表上的连续查询非常类似于定义物化视图的查询注意事项动态表首先是一个逻辑概念。在查询执行期间不一定(完全)物化动态表在流上定义的表在内部没有物化连续查询一个不会
2021-05-19 17:20:50
1837
原创 java8日期格式化-时间自动补零
java8时间自动补零从Java 8开始,java.time包提供了新的日期和时间API,以及一套新的用于取代SimpleDateFormat的格式化类型DateTimeFormatter。DateTimeFormatter和LocalDateTimeDateTimeFormatter和LocalDateTime都是被final修饰的,可保障线程安全。格式化要用的方法还是静态的,用起来比SimpleDateFormat舒服多了。public final class DateTimeFormatter
2021-04-12 11:57:23
6427
原创 docker安裝apache atlas
docker安装apache atlasatlas是apache开源的数据管理平台,提供了元数据管理和数据治理服务。由于其安装需要依赖hbase,solr,比较麻烦。使用docker安装的话就方便了很多,可以通过Dockerfile快速构建。Dockerfile文件FROM openjdk:8-jdk-alpineRUN apk add --no-cache \ bash \ su-exec \ pythonADD https://github.com/michalmi
2021-04-09 15:50:03
2476
原创 postgresql创建分区表的两种方式
postgresql按天创建分区表postgresql创建分区表由两种方式,一种是通过继承主表的方式创建,另一种通过partition of的方式创建。推荐使用partition of的方式创建,按照继承的方式创建的分区表在查询时分区字段不支持动态的条件查询。比如查询以下按照继承的方式创建的表时:select * from tbl_partition where gather_time > now() and gather_time < now() + interval 1;仍然会进行全表扫描
2021-04-02 14:11:04
6302
1
原创 数据仓库的核心要点
定义数据仓库,由数据仓库之父Bill Inmon 在1991 年出版的“Building the Data Warehouse”定义且被广泛接受的——面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。从定义上来看,数据仓库的关键词为面向主题、集成、稳定、反映历史变化、支持管理决策,而这些关键词的实现就体现在分层架构内。数仓是面向分析型的,主要集中在数据的ETL、数仓模型的建立、数据治理、数据质量的监控、数据资产的沉淀、数据指标体系的搭建,为了方便快速的达到数据获取和数据支撑的目的
2021-04-02 11:50:47
1463
原创 KafkaProducer生产者发送数据源码分析
KafkaProducer简介KafkaProducer是线程安全的,是一个不可变对象。负责将数据发送的kafka集群。生产者由一个缓冲空间池和一个后台I / O线程组成,该缓冲池保存尚未传输到服务器的记录,该I / O线程负责将这些记录转换为请求并将它们传输到集群。 使用后如果无法关闭生产者,则会泄漏这些资源。生产者发送数据时是异步的,将数据放入缓冲区使得数据可以进行批处理,以提高发送的效率。生产者为每个分区维护未发送记录的缓冲区。 这些缓冲区的大小由 batch.size 配置指定。 增大它可以进行更
2021-03-11 16:09:35
250
原创 认识Future和FutureTask
什么是FutureFuture是一个接口,在java.util.concurrent包下,官方注释解释Future表示异步计算的结果。其提供了一些方法来检查计算是否完成,等待其完成以及检索计算结果。计算完成后,只能使用方法get()方法检索结果,并在必要时阻塞,直到准备好为止。取消是通过cancel()方法执行的。提供了isCancelled()方法来确定任务是正常完成还是被取消。一旦计算完成,就不能取消计算。如果您想使用Future是为了可取消性但不提供可用的结果,则可以声明Future,并由于基础任务
2021-03-05 11:35:56
424
4
原创 flink spilt和side output分流原理分析
split和side-output分流源码分析在日常开发中,我们常常需要对数据流进行拆分处理,flink提供了split/side output方式进行分流(filter分流方式使用场景有限,不作讨论)。首先,同一个流上不能同时使用split和side-output进行分流。否则,会抛出如下异常:throw new UnsupportedOperationException("getSideOutput() and split() may not be called on the same DataSt
2021-02-24 15:48:11
724
原创 Greenplum学习笔记之二【执行计划】
1. 如何产生执行计划explain和explain analyze,都可以显示执行计划EXPLAIN ANALYZE运行语句后除了显示计划外,还有下列额外的信息:运行该查询消耗的总时间(单位毫秒)计划几点操作中涉及的segment数量查询中产生最多行的segmen的segmentID以及最大行数操作中所使用的内存从产生最多行的segment中检索第一行所花费的时间,以及从该segment中检索所有行所花费的时间explain和explain analyze的区别:explai
2021-02-04 14:28:44
2092
原创 Greenplum学习笔记之一【最佳优化实践概要】
1. 堆存储vs.追加优化存储对经常需要执行和大量并发执行update/delete/insert的表采用堆存储对于在初始装载后并且只会在大型批处理操作执行后续插入的表和分区采用追加优化存储绝不在追加优化表上执行单个update/delete/insert操作绝不在追加优化表上执行并发的update/delete操作,可以执行并发的批量insert操作堆存储是默认模型,并且是postgresql为所有数据库表使用的模型.1.创建一个堆表:CREATE TABLE foo (a int,
2021-01-30 17:37:40
1081
原创 flink JdbcCatalog使用中的一个注意事项
flink sql通过JdbcCatalog连接postgresql踩坑记录flink sql可以通过JdbcCatalog连接postgresql数据库,从而实现直接对postgresql表的相关操作,相关代码如下: StreamExecutionEnvironment bsEnv = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings bsSettings = Environ
2021-01-29 17:30:49
1548
1
原创 postgresql自动创建分区
使用触发器自动按天创建postgresql分区参考文章:https://blog.csdn.net/zhwzju/article/details/49636817原文按照月份自动分区,在此基础上做了一点小小的修改,按照天分区。按照ID创建索引。1)创建主表CREATE TABLE tbl_partition( id text, name text, data numeric, gather_time timestamp);2)创建可重用的触发器函数CREATE OR RE
2021-01-27 11:16:46
2203
4
原创 flink中Class冲突异常
flink sql任务提交时遇到的Class冲突异常在使用打包后的flink sql提交到flink集群中时,产生了如下异常:org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: Unable to instantiate java compiler at org.apache.flink.client.program.PackagedProgram.callMainMe
2021-01-21 17:40:41
2095
2
原创 记一个flink 1.11.0的bug
记录一个flink 1.11.0的bugflink sql upsert操作在1.11.0版本blink planner下的bugflink sql upsert操作在1.11.0版本blink planner下的bugflink1.11.0版本下的blink planner计划中,在使用upsert模式往数据库中sink时,报如下异常:Exception in thread “main” org.apache.flink.table.api.TableException: Provided trai
2021-01-20 15:39:15
231
原创 flink cdc捕获postgresql数据
flink cdc捕获postgresql变化数据环境准备flink cdc功能测试环境准备flink 1.11postgresql数据库,版本要大于9.4,postgresql 9.5以下版本不支持upsert。flink jar包1.flink-connector-postgres-cdc.jar2.flink-connector-jdbc_2.11-1.11.2.jar点击下载 提取码:3p16flink cdc功能测试修改postgresql配置文件vi postgres
2021-01-15 16:45:28
5559
8
原创 Flume消費kafka并获取元数据
flume消费kafka数据获取元数据信息在使用flume消费kafka的时候,在有些业务场景中,我们需要获取kafka的元数据信息来满足业务需求,文章将从flume的连接器kafkaSource的源码分析,flume在消费kafka数据时,如何获取kafka中的元数据信息。KafkaSource 源码我们知道,flume中数据是以Event进行传输的,Event在源码中是一个顶层接口,我们来看一下Event的一个实现类SimpleEvent,源码如下:public class SimpleEven
2021-01-13 18:44:29
715
原创 Flink消費kafka数据的反序列化方式
Flink中kafka数据的反序列化Flink反序列化接口二级目录三级目录Flink DataStream Api在接收kafka数据时,需要进行反序列化,以便进行后续的逻辑处理。本文根据作者的开发经验,简单介绍几种常用的kafka反序列化方式。Flink反序列化接口public interface DeserializationSchema<T> extends Serializable, ResultTypeQueryable<T二级目录三级目录...
2021-01-09 17:04:21
3754
原创 docker搭建greenplum集群
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-01-07 14:48:29
2346
3
原创 flink程序常用环境设置
public class FlinkUtils { public static StreamExecutionEnvironment getEnv(){ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //设置全局并行度,如果不设置,则默认为配置文件中配置的平行度。优先级:代码>配置文件 // env.setParall.
2020-07-21 09:47:38
1057
原创 python获取当前时间&&格式化
# -*- coding:UTF-8-*-import timeimport datetime# 返回自纪元以来的当前时间(以秒为单位)linuxnow = time.time()print(now) #1595293695.7729151now_datetime = datetime.datetime.now(None)print(now_datetime) #2020-07-21 09:08:15.772915# 格式化时间#日期类型转字符串类型str_now_date = .
2020-07-21 09:24:49
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人