Flink 状态管理

状态管理类图,都是继承 State 的,通用的包括MapState,ValueState,BroadcastState等,还有InternalKvState 接口内部使用。根据DataStream数据集是否基于key 分组,操作分为:KeyedState 类型、OperatorState 类型。 KeyedStateBackend,通过SPI 技术用loader加载工厂类,再创建对应的后端,如:HeapKeyedStateBackend 、RocksDBKeyedStateBackend。StateTable抽象类,实现包括CopyOnWriteStateTable、NestedMapsStateTable。OperatorState 状态管理后端:OperatorStateBackend、RawKeyedStateInputs,所有算子的状态数据都只能存储在JVM堆内存中。StateBackend包括:MemoryStateBackend、FsStateBackend、RocksDBStateBackend。Checkpoint的执行过程分为三个阶段:启动、执行、确认完成。通过job-manager触发,下游算子对齐barrier事件,触发算子checkpoint操作,并继续发送到下游和返回ack,直到所有sink完成checkpoint,job-manager通知所有task,完成此次checkpoint操作
flink_3/1.jpg flink_3/2.jpg flink_3/3.jpg flink_3/4.jpg flink_3/5.jpg flink_3/6.jpg flink_3/7.jpg flink_3/8.jpg+18

阅读全文

Flink 集群管理

先由 ClusterClientFactory 创建 ClusterDescriptor、然后通过 ClusterDescriptor 创建 ClusterClientProvier、最终基于 ClusterClientProvier 实例获取 ClusterClient。支持容器化部署的 AbstractContainerizedClusterClientFactory、不支持容器化部署的 StandaloneClientFactory。通过YarnClient提交应用,YarnClusterClient跟JobManager交互,通过YarnResouceManager来启动YarnTaskExecutorRrunner–>TaskExecutor。TaskExecutor 是内部执行组件,负责真正的执行,以及 状态管理、checkpoint、slots 等;由fabric8 API提交到 api-server,再提交configmap,创建resource-manager pod,再创建出 task-manager pod
flink_2/30.jpg flink_2/31.jpg flink_2/32.jpg flink_2/33.jpg flink_2/34.jpg flink_2/35.jpg flink_2/36.jpg flink_2/37.jpg+2

阅读全文

Flink 任务提交

通过CLIFrontend 提交应用,不同类型的集群对应不同的PipelineExecutor实现类(SPI方式加载),包括remote、yarn、k8s工厂类;支持离线批计算的ExecutionEnvironment、支持流计算的StreamExecutionEnvironment。StreamGraphGenerator 将 Transformation 集合转换为 ,在PipelineExector中将StreamGraph对象转换成JobGraph数据结构,在JobManager服务中将JobGraph转换为ExecutionGraphStreamGraph,将具体的Task部署到TaskManager中进行调度和执行。一些组件:Dispatcher、JobManagerRunner、JobMaster、SlotPool资源管理。TaskManager中根据TaskDeploymentDescriptor的信息启动Task实例,Task成功添加至taskSlotTable,会立即启动Task线程 。Task 的主要逻辑在 doRun()中, 通过反射来触发 StreamTask 内部的 Operator 执行。使用了Mail box 方式处理任务。StreamElement分类:StreamRecord数据、Watermark事件。Task重启策略:固定延时重启(fixed-delay)、按失败率重启(failure-rate)、无重启(none)。容错:重启全部,重启部分
flink_2/1.jpg flink_2/2.jpg flink_2/3.jpg flink_2/4.jpg flink_2/5.jpg flink_2/6.jpg flink_2/7.jpg flink_2/8.jpg+23

阅读全文

Flink-DataStraem

StreamOperator,AbstractStreamOperator:各种算子都会继承这个类、包含了各种内部实现。AbstractUdfStreamOperator:StreamFlatMap 继承了这个类,StreamFilter也是(内部会调用userFunction.filter()执行自定义的算子逻辑)。OneInputStreamOperator,可以输入一个算子、TwoInputStreamOperator,可以输入两个算子、通过不断叠加 二元输入,就可以实现多个算子输入。RichFunction、Function、SourceFunction 和 SinkFunction、支持端到端一致性的 TwoPhaseCommitSinkFunction。执行过程:SourceStreamTask#run(继承Thread) –> StreamSource#run() –> SimpleSource;StreamSink#processElement() –> MySink#invoke()。ProcessFunction:低级别API,提供细粒度控制。 KeyedProcessFunction,Watermark,TimerService
5 21 22 23 24 25 26 27+7

阅读全文

Flink架构

架构:flink-program 优化后通过 Actor-System提交到 JobManager(调度,checkpoint)并跟TaskMnager交互,分发任务,同时检查心跳,statistics、任务状态、TaskManager中包括了内存、I/O manager。 Application集群,Session集群。启动流程:还会创建其他一些组件、create RPC service、JMX service、blob server、delegationTokenManager、metricRegistry、haServices、heartbeatServices。ResourceManager内部包含了:JobManagerGateway、WebMonitorEndpoint、ResourceManagerGateway、DispatcherGateway、TaskExecutorGateway
flink_3/15.jpg 34 35 36 37 38 40+14

阅读全文

Flink执行图的生成

StreamGraph,会根据 stream、batch 做转换,流的转换为 StreamGraph,批的转换为 OptimizedPlan,最后统一转换为 JobGraph,将算子链接在一起,之后根据并行度生成ExecutionGraph,最后做物理执行。StreamNode、StreamEdge、StreamGrapgh。Plan 继承 Visitor,后面对 Plan 做优化可以用访问者模式遍历。JobGraph和相关的类:JobVertex、JobEdge、IntermediateDataSet
17 19 1 2 3 4 5 6+7

阅读全文

学习一下 pytorch

numpy,tensor(创建、检查属性、reshap、基本运算、index & sliceing、for deep learning、Converting Between NumPy & Tensor;jupyter,Torchvision;MNIST 数据集是一个著名的手写数字数据集,训练模型,评估模型,加载模型,虚拟化展示;图像裁剪,RGB,图像翻转,像素取平均值,模型微调;卷积,Padding,空洞卷积。 一个深度学习项目包括了:模型的设计、损失函数的设计、梯度更新的方法、模型的保存与加载、模型的训练过程等。模型梯度:从输入层、隐藏层、再到输出层,导数。可视化工具:tensorboard、visdom,分布式训练
1 2 3 4 5 6 7 8+9

阅读全文

BTrace 的学习

btrace的一个例子,arthas 的retransform,jdb 调试。以及其他一些分析工具,如 JDK 内置的、分布式监控工具、火焰图、jfr、visualvm、jprofiler、MAT 等等

阅读全文

YARN原理分析

RPC协议,客户端<->RM,RM<->NM,RM<->AM,AM<->NM,ADMIN<->RM。使用了reactor模式,类似tomcat和jetty,也使用了异步事件处理模式。RM 内部的模块:用户交互的Web服务模块、NM管理模块、AM管理模块、application管理模块、状态机管理模块、安全管理模块、资源分配模块;其中包括ApplicationMasterService、AMLivelinessMonitor;状态机包括:RMApp 状态机、RMAppAttempt 状态机、RMContainer 状态机、RMNode 状态机。 资源调度体系:FIFO、Capacity Scheduler、Fari Scheduler;第一层,RM 中的资源调度器将资源分配给各个 AM、第二层,AM 再进一步将资源分配给它内部的各个任务;资源抢占流程、资源计算方式。层级管理方式:子队列,可以嵌套、最少容量,可以使用父队列的容量比、调度器有限选择当前资源使用率最低的、最大容量、用户权限管理。NodeManage内部模块:NodeStatusUpdater、ContainerManager、ContainerExecutor、NodeHealthCheckerService、DeletionService、Security、WebServer。分布式缓存,将应用所需的资源下载到本地再运行:public、private、application三个可见性;应用结束后会自动上传日志到HDFS,之后由JobHistory 负责清理。NM内部包括:Application 状态机、Container 状态机、LocalizedResource 状态机。container启动包括:资源本地化、启动(LinuxContainerExecutor cgroup管理)、资源清理
+47

阅读全文

最近文章

分类

归档

标签

RSS