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 任务提交

通过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-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

阅读全文

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执行图的生成

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

阅读全文

学习一下 pytorch

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

阅读全文

公有云中日志收集

云环境日志收集,收集方式:直接读日志文件、log4j扩展。日志处理:写kafka、直接写共享存储、直接写s3、使用raft集群处理、使用NewSQL

阅读全文

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管理)、资源清理

阅读全文

Spark 注册数据源

DataSourceRegister注册过程,自定阅读XXRelationProvider,DataSource 查找过程,DataFrameReader,DataFrameWriter,CheckpointRDDPartition,ReliableCheckpointRDD,SparkSession内部包含的变量SparkContext、sharedState、SQLContext、RuntimeConfig

阅读全文