自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

METON的博客

专注大数据处理技术

  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spark On YARN启动流程源码分析

1、spark-submit入口介绍一般的spark作业都是通过命令行spark-submit相关的指令来进行提交,使用--master yarn来指定提交到对应的yarn集群上,如下:./bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory

2021-04-04 00:56:53 1293

转载 Calcite Sql解析

Calcite自定义SQL解析(经常使用的方法和配置)(mvn版本:1.21.0)1、config.fmpp(calcite模板配置)data: { parser: { # Generated parser implementation package and class name. # 生成解析器实现类包和名称 包名 实体类名 package: "com.meton.flink.sql.parser", class: "MetonSqlParserIm

2021-01-20 11:22:12 2741

转载 Calcite JavaCC简单介绍及使用

JavaCC 使用递归降低语法解析,LL(k)。其中,第一个L表示从左到右扫描输入;第二个L表示每次都进行最左推导(在推导语法树的过程当中每次都替换句型中最左的非终结符为终结符。相似还有最右推导);k表示的是每次向前探索(lookahead)k个终结符语法描述文件options { JavaCC的选项}PARSER_BEGIN(解析器类名)package 包名;import 库名;public class 解析器类名 { 任意的Java代码}PA...

2021-01-19 16:26:54 1107 1

原创 Flink CheckPoint的状态保存及恢复

检查点状态的保存 在上文中已经提到过barrier算子的流动,其是从上游算子向下游算子流动,在下游的Task任务算子中,针对barrier的接收是委托给CheckpointBarrierHandler.getNextNonBlocked()来获取的,因而在CheckpointBarrierHandler获得CheckpointBarrier后可以及时地进行checkpoint相关的操作。其最终会调用StreamTask#performCheckpoint()方法来触发该barrier的向下游...

2021-01-07 16:33:28 3252

原创 Flink CheckPoint的触发过程

CheckpointCoordinator的转换及调度1、转换过程在Flink JobMaster中有用于协调和触发checkpoint机制的协调管理器CheckpointCoordinator,其是Flink分布式快照的核心管理控制组件,其主要维护的功能如下:发起checkpoint触发的消息,并接收不同task对checkpoint的响应信息(Ack) 维护Ack中附带的状态句柄(state-handle)的全局视图其针对checkpoint的配置及最终触发调度主要集中在两个转换过程中:

2021-01-07 16:23:05 2252

原创 Flink CheckPoint机制简介

FlinkCheckPoint是程序故障恢复以及数据一致性的效果的基础,checkpoint是一种分布式快照:对一个Flink作业的所有task做一个快照且将快照保存在memory/file system等存储系统中。这样,在任务进行故障恢复的时候,就可以还原到任务故障前最近一次检查点的状态,从而保证数据的一致性。当然,为了保证exactly-once/at-least-once的特性,还需要数据源支持数据回放。概述flink的checkpoint 机制基于 chandy-lamda ...

2020-12-09 16:02:27 1220

转载 主键索引和辅助索引的区别(MyISAM和InnoDB)

1. MyISAM索引实现:概述:MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。1)主键索引:MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM主键索引的原理图:这里设表一共有三列,假设我们以Col1为主键,图myisam1是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数

2020-11-16 20:22:38 1105

转载 Flink 双流Join

支持的join类型 Apache Flink目前支持INNER JOIN和LEFT OUTER JOIN(SELF 可以转换为普通的INNER和OUTER)。在语义上面Apache Flink严格遵守标准SQL的语义 CROSS INNER OUTER SELF ON WHERE Apache Flink N Y Y Y 必选 可选 双流Join的分类:Join大体分类只有两种:Window ...

2020-11-13 09:12:25 1441

原创 Flink Task的生命周期

一个FlinkJob提交到集群中运行时,会被调度为不同的Task。在前面的文章中,已经介绍了Flink如何根据用户的编写的程序生成调度用的执行图,如何为Task分配计算资源,以及Task之间如何进行数据交换。在这篇文章中,将跟踪一个Task的完整的生命周期,进一步加深对Flink执行过程的理解。Task和OperatorChain 在前面介绍如何生成JobGraph的文章中,已经了解到Flink会尽可能把能够chaining到一起的算子串联在一起,形成Operat...

2020-11-04 20:02:04 1199

原创 Flink 流量控制及反压

流量控制 Flink在两个Task之间建立Netty连接进行数据传输,每一个Task会分配两个缓冲池,一个用于输出数据,一个用于接收数据。当一个Task的缓冲池用尽之后,网络连接就处于阻塞状态,上游Task无法产出数据,下游Task无法接收数据,也就是我们所说的“反压”状态。这是一种非常自然的“反压”的机制,但是过程也相对比较粗暴。由于TaskManager之间的网络连接是由不同Task复用的,一旦网络处于阻塞状态,所有Task都无法向TCP连接中写入数据或者从中读取数据,即便其它Tas...

2020-11-03 23:28:09 1626

原创 Flink Task的数据交换分析

本地数据交换 如果一个InputChannel和其消费的上游ResultPartition所属Task都在同一个TaskManager中运行,那么它们之间的数据交换就在同一个JVM进程内不同线程之间进行,无需通过网络交换。我们已经了解到,ResultSubpartition中的buffer可以通过ResultSubpartitionView进行消费。LocalInputChannel正是用来进行同一JVM进程中不同线程之间的数据交换:public class LocalInputCh...

2020-11-03 21:21:43 492

原创 Flink Task的输入和输出源码分析

Task的输入和输出Task的输出 Task产出的每一个ResultPartition都有一个关联的ResultPartitionWriter,同时也都有一个独立的LocalBufferPool负责提供写入数据所需的buffer。ResultPartion实现了ResultPartitionWriter接口:public class ResultPartition implements ResultPartitionWriter, BufferPoolOwner { /** T...

2020-11-03 20:32:24 611

原创 Flink Task的数据交换机制概述

Flink的数据交换机制在设计时遵循两个基本原则:数据交换的控制流(例如,为初始化数据交换而发出的消息)是由接收端发起的 数据交换的数据流(例如,在网络中实际传输的数据被抽象为IntermediateResult的概念)是可插拔的数据交换也涉及到了一些角色,包括:JobManager:master节点,负责任务调度,异常恢复,任务协调,并且通过ExecutionGraph这样的数据结构来保存一个作业的全景图。 TaskManagers:工作节点,负责将多个任务并行的在线程中执行,每个TM中包含

2020-11-03 17:30:10 1201 1

原创 Flink State状态管理

State概述Keyed State和Operator StateFlink中的状态分为两类,Keyed State和Operator State。Keyed State是和具体的Key相绑定的,只能在KeyedStream上的函数和算子中使用。Opeartor State则是和Operator的一个特定的并行实例相绑定的,例如Kafka Connector中,每一个并行的Kafka Consumer都在Operator State中维护当前Consumer订阅的partiton和offset。由于

2020-11-02 21:43:05 1251

原创 Flink 内存管理

TaskManager的内存布局 Flink内部并非直接将对象存储在堆上,而是将对象序列化到一个个预先分配的MemorySegment中。MemorySegment是一段固定长度的内存(默认32KB);也是Flink中最小的内存分配单元。MemorySegment提供了高效的读写方法,它的底层可以是堆上的byte[],也可以是堆外(off-heap)ByteBuffer。可以把MemorySegment看作Java NIO中的ByteBuffer,Flink还实现了Java的java.io...

2020-11-01 23:38:57 1641

原创 Flink JobManager中Slot的计算资源管理

JobManager中Slot的管理 相比于TaskExecutor和ResourceManager,JobManager中资源管理的部分可能要相对更为复杂一下,这主要是由于Flink允许通过SlotSharingGroup和CoLocationGroup约束使得多个子任务在相同的的slot中运行。在JobMaster中,主要通过SlotPool和ResourceManager及TaskExecutor进行通信,并管理分配给当前JobMaster的slot;而具体到当前Job的所有子任务的...

2020-11-01 20:57:04 1676

原创 Flink ResourceManage中Slot的计算资源管理

ResourceManage中Slot的管理ResourceManager资源管理器其继承了FencedRpcEndpoint实现了RPC服务,其内部组件主要包含管理所有TaskExecutor上报的slot资源、申请(SlotManager) 为每个job任务选择出对应ha可用的JobMaster,并将该job任务分配该JobMaster服务(JobLeaderIdService)、高可用leader选举服务leaderElectionService等 心跳管理器taskManagerHear

2020-11-01 20:04:33 977

原创 Flink TaskExecutor中Slot的计算资源管理

Task Slot的基本概念 在Flink启动模式中,以集群模式开启而非MiniCluster模式开启的话,每个TaskManager都是独立运行的一个单独的JVM进程,并且在一个TaskManager中可能运行多个子任务,这些子任务都在各自独立的线程中运行。为了描述控制一个TaskManager中可以运行的任务的数量,引入了Task Slot的概念。 每一个Task Slot代表了TaskManager所拥有的计算资源的一个固定的子集。其可以共享对应的TaskManag...

2020-11-01 18:52:13 3384

转载 HBase 内核深度剖析

HBase相关算法与数据结构基础知识跳跃表暂时先不说跳跃表是什么,在 Java 里面有一个 Map 叫:ConcurrentSkipListMap,通过对 HBase 的源码跟踪我们发现在这些地方使用了它: 简单的列了几个,但是观察这几个类所在的模块就可以发现,HBase 从客户端,到请求处理,到元数据再到文件存储贯穿 HBase 的整个生命周期中的各个重要环节,都能看到它的身影,Map 那么多,为何偏偏 HBase 选择了这个,接下来我们仔细分析下。 在算法概念里面...

2020-10-13 00:58:34 381

原创 Flink 源码解析--Async IO的实现

在使用Flink处理实时数据流时,经常需要和外部系统进行交互。例如,在构建实时数据仓库的时候,通常需要将消息和外部维表进行关联,以获得额外的维度数据。由于外部系统的响应时间和网络延迟可能会很高,如果采用同步调用的方式,那么外部调用的高延迟势必会影响到系统的吞吐量,进而成为系统的瓶颈。这种情况下,我们需要采用异步调用的方式。异步调用相比于同步调用,不同请求的等待时间可以重叠,从而提升了吞吐率。Async I/O的使用方式 在Flink中使用Async I/O的话,需要有一...

2020-10-12 22:40:27 517

转载 Zookeeper之ZAB协议详解

ZAB协议 1、ZAB协议是专门为zookeeper实现分布式协调功能而设计。zookeeper主要是根据ZAB协议是实现分布式系统数据一致性。 2、zookeeper根据ZAB协议建立了主备模型完成zookeeper集群中数据的同步。这里所说的主备系统架构模型是指,在zookeeper集群中,只有一台leader负责处理外部客户端的事物请求(或写操作),然后leader服务器将客户端的写操作数据同步到所有的follower节点中。 ZAB的协议核心是在整...

2020-10-09 15:52:59 3654 3

转载 Paxos算法原理与推导

Paxos是什么 Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。 Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。虽然Mike Burrows说得有点夸张,但是至少说明了Paxos算法的地位。然而,Paxos算法也因为晦涩难懂而臭名昭著。本文的目的就是带领大家深入浅出理解Paxos算法,不仅理解它的执行流程,还要理解算法的推导过...

2020-10-09 14:59:05 227

原创 分布式事务之两阶段提交(2PC)、三阶段提交(3PC)

分布式事务及两阶段提交、三阶段提交一、分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。1、什么是数据一致性 在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突,造成事实上的数据不一致。2、CAP定理CAP理论认为在分布式的环境下设计和部署系统时,有3个核心的需求:Co...

2020-10-09 11:47:37 861 1

转载 基于Apache Curator框架的ZooKeeper基本用法详解

简介 Apache Curator是一个比较完善的ZooKeeper客户端框架,通过封装的一套高级API 简化了ZooKeeper的操作。通过查看官方文档,可以发现Curator主要解决了三类问题:封装ZooKeeper client与ZooKeeper server之间的连接处理 提供了一套Fluent风格的操作API 提供ZooKeeper各种应用场景(recipe, 比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列等)的抽象封装Curator主要从以下几个...

2020-10-09 00:13:01 479

转载 zookeeper的原理和应用

zookeeper是什么 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。zookeeper提供了什么简单的说,zookeeper=文件系统+通知机制。1、文件系统Zookeeper维护一个类似文件系统的数据结构: 每个子目录项如 ...

2020-10-08 23:23:35 436

原创 Flink 心跳服务机制

心跳机制是用于检测客户端或者服务端是否存活的一种机制,通过定期向对方发送请求方法,常见的心跳检测有两种:socket 套接字SO_KEEPALIVE本身带有的心跳机制,定期向对方发送心跳包,对方在收到心跳包后会自动回复; 应用自身实现心跳机制,同样也是使用定期发送请求的方式; Flink对各组件服务状态的监控统一使用心跳服务来管理,如同其上诉2实现机制一样,其主要也是调用方通过周期性定时发送心跳请求,接收方接收到心跳请求后作出对应的心跳响应;其内部实现是通过RPC相互调用的方式,并重置...

2020-10-08 15:53:51 3539

原创 Flink 集群启动流程

MiniCluster的启动流程: 首先来看最简单的本地模式MiniCluster的启动流程,以此来分析Flink的具体启动流程以及内部各组件之间的交互形式。MiniCluster可以看做是内嵌的Flink运行时环境,所有的组件都在独立的本地线程中运行。MiniCluster的启动入口在LocalStreamEnvironment#execute(jobName)中。其基本的相关的主要类图和actor模型如下:在MiniCluster#start启动源码中,启动流程大...

2020-10-07 00:11:30 3467

原创 Flink rpc实践

Flink的RPC服务是基于Akka Remote实现的一个简单的Akka Remoting ActorSystem的配置如下(基于akka 2.6.0版本):服务端配置及代码:application_server.confakka { actor { provider = remote allow-java-serialization = on serializers { jackson-json = "akka.serialization.jackson

2020-10-06 14:06:31 979

原创 Flink 源码解析--Stream、Job、ExecutionGraph的生成示例

应用程序示例2:public class SocketTextStreamWordCount { public static void main(String[] args) throws Exception { if (args.length != 2){ System.err.println("USAGE:\nSocketTextStreamWordCount <hostname> <port>");

2020-09-27 22:23:02 786

原创 Flink 源码解析3--ExecutionGraph的生成

针对前面程序的transformation操作转化分析过程,能够得到StreamGraph、JobGraph的划分、具体生成过程以及链路形式,这两个执行图的转化生成都是在client本地客户端。而最终flink Job运行时调度层核心的执行图-ExecutionGraph是在服务端(JobManager)中生成的。Client向JobManager提交JobGraph后,JobManage就会根据JobGraph来创建对应的ExecutionGraph,并以最终生成的ExecutionGr...

2020-09-27 21:13:07 567

原创 Flink 源码解析2--JobGraph的生成

上一节介绍了StreamGraph的生成,这个实际上只对应 Flink 作业在逻辑上的执行计划图。Flink 会进一步对 StreamGraph 进行转换,得到另一个执行计划图,即JobGraph。然后将JobGraph发送到server端进行ExecutionGraph的解析。主要的JobGraph的源码对象如下(其最主要的是Map<JobVertexID, JobVertex> taskVertices任务对象):public class JobGraph impl...

2020-09-27 20:52:35 416

原创 Flink 源码解析1--StreamGraph的生成

1. 先来简单看一下入门的WordCount程序1、首先数据源会产生随机的数字数据流(0-10内的数字)形式,然后通过flink的transformation将数据进行单词计数,再print输出// wordcount 计数demo代码public class WordCountDemo { public static void main(String[] args) throws Exception { // conf设置,避免调试的时候心跳超时 Co

2020-09-26 22:52:32 482

原创 Flink parallelism和Slot介绍

什么是parallelism? 一个Flink程序是由多个任务组成(source、transformation和sink)。一个任务由多个并行的实例(线程)来执行,一个任务的并行实例(线程)数目就被称为该任务的并行度。 并行的意思,在Flink中代表每个任务的并行度,适当的提高并行度可以大大提高job的执行效率,比如当你的job消费kafka的速度过慢,适当调大就消费正常了。在flink配置文件中可以看到其默认并行度是1。如何设置并行度?命令行:./bin/fli...

2020-09-11 00:35:09 1339

原创 Flink time概念

Flink time概念 Flink在流程序中支持不同的Time概念,就比如有Processing Time、Event Time和Ingestion Time。Event Time:数据源产生的事件时间 Event Time 是事件发生的时间,一般就是数据本身携带的时间。这个时间通常是在事件到达 Flink 之前就确定的,并且可以从每个事件中获取到事件时间戳。在 Event Time 中,时间取决于数据,而跟其他没什么关系。Event Time 程序必须指定如何生成 Event Time ..

2020-09-10 23:56:26 251

转载 Flink框架和工作流程简介

概述 Apache Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model),能够支持流处理和批处理两种应用类型。由于流处理和批处理所提供的SLA(服务等级协议)是完全不相同, 流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理,所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。比较典型的有:实现批处理的开...

2020-09-10 23:42:55 2641 1

原创 SparkStreaming源码剖析2-JobGenerator任务的生成与执行流程

在上一节中的StreamingContext.start()方法中,其主要就是调用scheduler.start()来启动对应的JobScheduler,在scheduler.start()方法中,其会创建并启动两个最重要的组件为:ReceiverTracker和JobGenerator。上文中分析了ReceiverTracker流式数据产生与接收的基本工作及原理,接下来分析JobGenerator的基本工作与原理。JobGenerator:主要用来生成对应的Batch Job,并提交生...

2020-09-02 10:22:39 410

原创 SparkStreaming源码剖析1-Receiver数据接收流程

根据上文所展示的Spark Streaming的socketTextStream应用示例,来从源码的角度来看下其是怎么工作运行的。1、初始化StreamingContextStreamingContext是SparkStreaming程序的主要入口,其构造函数如下:class StreamingContext private[streaming] ( _sc: SparkContext, _cp: Checkpoint, _batchDur: Duration ).

2020-09-02 00:31:28 317 1

原创 Spark Streaming运行流程及基本使用

Spark Streaming介绍 Spark Streaming是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafk、Flume、Twitter、ZeroMQ、Kinesis以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和现场仪表盘。在“One Stack rule them all”的基...

2020-08-31 21:25:55 2546

原创 Kafka+Spark Streaming保证exactly once语义

在Kafka、Storm、Flink、Spark Streaming等分布式流处理系统中(没错,Kafka本质上是流处理系统,不是单纯的“消息队列”),存在三种消息传递语义(message delivery semantics),分别是:at least once:每条消息会被收到1次或多次。例如发送方S在超时时间内没有收到接收方R的通知(如ack),或者收到了R的报错,就会不断重发消息直至R传回ack。 at most once:每条消息会被收到0次或1次。也就是说S只负责向R发送消息,...

2020-08-31 09:29:14 272

转载 Spark Scheduler内部原理剖析

Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。分布式运行框架 Spark可以部署在多种资源管理平台,例如Yarn、Mesos等,Spark本...

2020-08-31 08:50:35 266

stm32 定时器程序

stm32 通用定时器程序 各个比较输出,pwm 捕获输入等等模板

2014-05-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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