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

阅读全文

Spark Core相关-2

调度过程,RDD的主要函数,DAGScheduler将各个RDD划分到不同stage,每个Stage包含若干个TaskSet,交给内部的并发队列处理事件;TaskScheduler有点像 YARN队列,创建调度池和本地性判断,之后交给SchedulerBackend;MemoryAllocator负责分配内存,包括off-heap和on-heap,其中的MemoryBlock包含了obj指向heap的对象、以及offset和length;TaskMemoryManager负责task的内存管理,MemoryConsumer的实现类负责消费这些内存;Task包括:ShuffleMapTask、ResultTask,TaskContext 会启动新线程运行Task;AppendOnlyMap类似HashMap但做了优化,shuffle和spill的几个类:ExternalSorter、ExternalAppendOnlyMap、ShuffleExternalSorter、UnsafeExternalSorter;ShuffleWriter和实现类体系负责写磁盘,ShuffleReader主要由ShuffleBlockFetcherIterator 去抓取数据,以及管理他们的ShuffleManager;Executor 调用 launchTask,在新线程中启动 TaskRunnerTaskRunner 又会启动 Task;Master和选举;Driver调度过程,Executor分配过程,尽可能跨Worker;集群模式下TaskSchedulerImpl->StandaloneSchedulerBackend->StandaloneAppClinet,跟Master通讯。Master调用launchExecutor给Wroker,Worker拼接ProcessBuilder启动新进程,CoarseGrainedExecutorBackend会跟Worker通讯。YARN cluster和client模式

阅读全文

Spark Core相关-1

SparkContext、存储体系、RPC、Web-UI。 存储体系,BlockManager和BlockManagerMaster、MemoryManager、MemoryStore、DiskBlockManager、DiskStore。监控体系:MapOutputTracker、MapOutputTrackerMaster、MapOutputTrackerWorker。 Web-UI体系:对应的层级结构为: SparkUI -> WebUITab -> WebUIPage。执行环境:安全体系(SecurityManager、用于设置 yarn,hadoop 的 secret key);SparkContext 会附带初始化:Metrics 体系、Listener、SparkUI、RPC 整套体系、BlockManager,storage 体系、Executor 体系、Heartbeater、KVStore、SerializerManager,还有度量类、日志体系。 PRC 体系:MessageLoop 中维护了 Inbox 的链表、每个Inbox 中为了 InboxMessage 的链表,InboxMessage包含很多实现类,如 HeartbeatReceiver ,包括了 receiveAndReply。RPC中用到了 netty的通讯体系,根据发送地址,选择对应的 Outbox,每个 Outbox维护一个 OutboxMessage的链表,再通过netty 的 NettyChannel 发送出去

阅读全文

k8s 网络

覆盖网络,Flannel 的 UDP模式、xvlan模式、host-gw,Calico 采用了BGP做三层转发,为防止退化为 IPIP,需要设置 BGP 的跳数。 使用 Network Policy 做网络隔离,k8s 的网络本质都是连通的,像是弱多租户。CNI 插件 的网络插件。Service 是由 kube-proxy 组件,加上 iptables 来共同实现的;所谓 Ingress,就是 Service 的“Service”。 调度:根据 etcd 的变化选择合适的 Node 做调度,Priorities为节点打分;Pod 调度失败的情况(抢占、优先级);K8S 中两个不可替代的组件:kube-apiserver、kubelet;核心是循环控制器检查,容器运行时:CRI,除了docker还有containerd,基于虚拟化的:Kata Containers、gVisor

阅读全文

ozone

ozone的三个角色Ozone Manager (OM),Storage Container Manager (SCM),DataNode,三个角色的具体存储内容,datanode中数据存储在 container中,按照offset保存数据的位置,recon 提供管理界面,ozone mager和 SCM 的高可用:使用 rocksdb + raft 实现的,这里用的是:ratis。整合spark,flink,presto/trino,doris 都比较容易

阅读全文