Flink
文章平均质量分 56
优优我心
这个作者很懒,什么都没留下…
展开
-
Iceberg实战之小文件合并
Flink版本:代码Spark版本:代码Spark的api功能相对更加丰富一些,现在用spark版本的更合适一些。详细flink的api也会尽快跟进的。原创 2021-04-02 15:40:38 · 1607 阅读 · 0 评论 -
Flink源码阅读之JDBC Connector
JDBC connector的入口JdbcDynamicTableFactory,提供了source和sink的支持,详细内容参考官网。Source在Factory类中通过createDynamicTableSource来创建JdbcDynamicTableSource,并将需要的所有参数传递过去。jdbc作为source有两种用途:1.数据源使用Scan 2.维表关联使用Lookup。Scan通过JdbcRowDataInputFormat来实现数据读取,同时支持了列裁剪,limit下推。注意原创 2021-02-18 16:56:53 · 1818 阅读 · 1 评论 -
Flink源码阅读之SPI在Flink中的应用
SPISPI是Service Provider Interface的缩写,是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。有关SPI的详细内容请自行百度,这里不赘述。使用SPI需要遵循的规范:当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;接口实现类所在的jar包放在主程序的classpath中;主程序通过java.util.ServiceLoder动态装载实现模块,它通过原创 2021-02-10 15:30:18 · 797 阅读 · 2 评论 -
Flink源码阅读系列之Kafka Connector
本文基于Flink 1.12版本,目前这个版本已经不需要再指定具体的kafka版本了。本文从Sql角度分析一下,创建一个kafka的table之后,flink是如何从kafka中读写数据的。入口依然是通过SPI机制找到kafka的factory(KafkaDynamicTableFactory),Flink中大量使用了SPI机制,有时间再整理一篇SPI在Flink中的应用。话不多说,进入正题。Source通过createDynamicTableSource方法创建 kafka source,这里主原创 2021-02-08 17:57:27 · 732 阅读 · 0 评论 -
Flink实战之Parquet写复杂类型
上一篇Flink实战之Parquet支持读复杂类型说了如何扩展读复杂类型,本篇作为其姊妹篇介绍下如何扩展写复杂类型。现状StreamingFileSink在写parquet文件时,通过ParquetWriteSupport中的ParquetRowDataWriter来写的,在writersupport中会将Flink内部的 rowType类型转换为Parquet识别的MessageTypeprivate MessageType schema = convertToParquetMessageType原创 2021-02-03 11:31:36 · 1202 阅读 · 0 评论 -
java.io.IOException: Got error, status message , ack with firstBadLink
写HDFS任务时不时发送Checkpoint超时,查看了日志发下如下异常:location:org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1495)throwable:java.io.IOException: Got error, status message , ack with firstBadLink as ip:portat org.apache.原创 2021-01-10 00:10:37 · 1310 阅读 · 1 评论 -
Flink实战之Parquet支持读复杂类型
背景前面写过几篇关于flink入库的文章,但是还有个通点一直未解决,那就是小文件问题。好在1.12版本已经支持了小文件合并,但是在使用时发现问题了,parquet居然不支持读复杂类型,这就有点蛋疼了。那么我们就来尝试解决他。1.11现状使用parquet读filesystem依赖于ParquetFileSystemFormatFactory#createReader来创建InputFormat,目前的实现是其内部类ParquetInputFormat,更进一步是使用ParquetColumnarRow原创 2020-12-25 15:39:02 · 964 阅读 · 0 评论 -
Flink实战之写Hive性能问题
上一篇中写了Kafka to Hive的样例,在实际测试过程中,发现性能比较差。问题1我使用的是Flink1.11.1版本,这个版本有个性能上的问题,见FLINK-19121。该问题已经在1.11.3版本中修复,在HiveTableSink中沿用了FileSystemTableSink的TableRollingPolicy,再该policy中每条数据都会调用@Override public boolean shouldRollOnEvent( PartFileInfo<String原创 2020-11-27 01:14:05 · 1436 阅读 · 0 评论 -
Flink实战之Kafka To Hive
背景传统的入库任务一般借助于MapReduce或者Spark来写hive表,一般都是天级别最多小时级别的任务。随着实时性要求越来越高,传统的入库不太能满足需求。Flink完全基于流式处理,同时也支持了写Hive表。本文介绍一下如果通过FlinkSQL实现kafka数据入库hive,并能够实时可查。Hive Catalog由于写hive表必须基于hive catalog,所以需要注册hive catalog。同时可以在一个job内切换catalog,如果我们不想把kafka的source table注册原创 2020-11-24 20:23:02 · 1904 阅读 · 0 评论 -
Flink实战之合并小文件
背景Flink的filesystem connector支持写入hdfs,同时支持基于Checkpoint的滚动策略,每次做Checkpoint时将inprogress的文件变为正式文件,可供下游读取。由于并行度设置、数据量大小、Checkpoint配置的不同、分区的选择,都有可能导致产生大量的小文件,这对hdfs产生很大影响。但是可以通过一些手段来减少小文件,本文主要探讨一些filesystem connector支持的partition commit policy,通过自定义policy来合并小文件原创 2020-11-20 01:42:33 · 5034 阅读 · 5 评论 -
Flink实战之Flink必须依赖Hadoop2.7+?
====原创 2020-10-22 20:51:46 · 4779 阅读 · 0 评论 -
Flink源码阅读之FileSystem Connector
代码在flink-table-runtime-blink模块,用户指南参考官网.目前是旧的实现方式,将会按FLIP-95重新实现FLINK-19336入口类FileSystemTableFactory,如何做Factory discover的可以参考之前的博文,这里就不赘述了。Sink构造FileSystemTableSink对象,传入相关属性参数public TableSink<RowData> createTableSink(TableSinkFactory.Context con原创 2020-10-21 00:51:33 · 1119 阅读 · 1 评论 -
Flink实战之扩展JDBC Dialect
前言Flink jdbc connect已经为依赖于jdbc进行操作的数据库系统提供了非常完善的功能。对于扩展只需要扩展其Dialect即可。具体步骤定义CustomizedDialect类,具体可参考MySQLDialect修改点:TIMESTAMP_PRECISIONDECIMAL_PRECISIONdialectName()canHandle() → “jdbc:xxx:” 如:“jdbc:clickhouse:”getRowConverter() → 定义CustomizedR原创 2020-09-30 16:35:46 · 1096 阅读 · 2 评论 -
Flink源码编译命令
mvn clean package -T 4 -Dfast -Dmaven.compile.fork=true -DskipTests -Dscala-2.11原创 2020-09-15 16:46:51 · 246 阅读 · 0 评论 -
Flink实战之Flink SQL connector支持并行度配置
背景目前flink sql是不支持source/sink并行度配置的,flink sql中各算子并行度默认是根据source的partition数或文件数来决定的,比如常用的kafka source topic的partition是100,那么fink sql任务的并发就是100。但有时任务相对简单,比如datax任务,没有逻辑根本不需要很大的并发,100并发显然会造成资源的严重浪费。那么就有必要扩展connector使其支持并发度配置。如何做一、首先,需要在ddl的with参数中支持并发的配置,比如原创 2020-09-13 01:24:32 · 6462 阅读 · 0 评论 -
Flink源码阅读之Sql-Client的执行原理
前言sql-cli相信大家都用过,通过sql-client.sh embedded启动就会进入交互界面,每条sql都可以单独执行。在功能调试时非常方便,还有进入界面的那个大松鼠相当可爱。脚本先上脚本代码#!/usr/bin/env bash################################################################################# Licensed to the Apache Software Foundation (ASF原创 2020-09-12 01:48:48 · 965 阅读 · 0 评论 -
Flink实战之Flink SQL中的Map、Array、Row
Flink sql支持Map、Array、Row类型,这几种类型在DDL中如何定义、如何获取、如何构造,本文做个总结。以如下数据作为样例:{ "id":1238123899121, "name":"asdlkjasjkdla998y1122", "date":"1990-10-14", "obj":{ "time1":"12:12:43Z", "str":"sfasfafs", "lg":2324342345 },原创 2020-08-19 16:31:35 · 21717 阅读 · 12 评论