spark 提交
通过spark提交到集群上时,Driver会再我们初始化sparkcontext时创建DAG Scheduler,和Task Scheduler
DAG会进行stage划分,然后通过创建TaskSet将Task提交到Task Scheduler上
当创建对象完成后,Driver会向集群的Master阶段发送Application任务
Master接受到任务的时候,会进行相关任务调度,找到对应的Worker,当workder接收到任务时,会创建对应的executor,
当executor成功的时候会反向注册到Driver
当第一个action算子触发的时候,开始提交任务
当task secheduler进行任务体提交的时候会进行对用的task分配
task任务进入会从线程池中获取到对应的线程,开始质心任务
从hdfs上读取数据
spark宽窄依赖
宽
同一个分区会分配到不同下游分区中去,存在shuffle
窄依赖
同一个分区只会分配到一个下游分区中,会存在多个上游分区分配到同一个下游分区中国,不存在shuffle。
hbase架构
存在client Hmaster-》负责组要HregionServer分配hregion
HRegionServer 负责维护HRegion,处理对应的io请求,负责切分Hregion
HRegionServer内部维护了HRegion,HLog->负责恢复数据,Hregion时hbase中表的一部分
HRegion中会维护store对象,store是表中的列簇,store内部有memoryStore,当向列簇中写数据时会协议到momorystore中,当写满的时候会
刷写成为StoreFile,而storeFile是底层存储到hdfs中的数据结构是Hfile。
kafka架构
kafka存在生产者和消费者,生产者会将数据写入到kafka的topic中,而topic内部会进行分区,内部也会存在备份
数据会被推送到消费中,消费者消费的数对应的offset再0.9前会被保存到zk中,但是如读取数据会大量读取zk,会造成zk压力过大
再0.9以后会将对应信息保存到kafka集群中取。
kafka工作流程
kafka中的消息是以topic进行分类的,生产者生产消息,消费者都是面对topic的,
kafka中的topic中会对应多个partition,每一个分中都对应一个log文件,log文件总存储的是具体的数据,producer数据会不断追加到log文件的末尾,
并且每一条数据存在一个offset,每当消费者消费数据都会记录这个offset,防止出错。
kafkaack
ack参数配置--acks
0:生产者producer不等待broker的ack,提供了最低演出,broker一接收到还没有写入磁盘就会返回,当broker故障就可能丢失数据
不管是否写完,直接发送消息。
1:producer等待broker的ack,partition中的leader落盘成功后返回ack,如果在follower同步成功自启leader故障那么就会丢失数据。
只等待leader写完就行。不管follower是否写完
-1:producer等待broker的ask,partition的leader和isr中的follower全部落盘成功后才返回ack,如果leader在follower同步完成后
但是ask还未发送时,leader发生故障,那么就会数据重复。
kafka两阶段提交
数据进入后,开启一个kafka事务,正常写入到kafka标记为未提交,这是预提交
jobmanager触发checkpoint操作,barrier从source开始向下游传递,遇到barrier的算子将状态保存到状态后端,并通知jobmanager。
sink接收到barrier,保存当前状态,保存到checkpoint,通知jobmanager,开启下一段事务,用户提交下一个检查点的数据
jobmanager接收到所有任务的通知,发出确认消息,表示checkpoint完成
sink收到该消息正式提交该数据。
外部kafka关闭该事务,就可以消费数据了。
flink架构
jobManager ->控制程序的主进程,会接收到应用程序,然后向resourcemanager请求程序必要的资源,TaskManager上的slot。
当获取到足够的资源,就会将执行图分发到运行他们的taskmanager上,执行过程中会负责所有需要中央协调操作,
检查点操作
TaskManager->每一个taskManager中包含者slots,他限制了TaskManager执行任务的数量,启动后会向resourcemanager的插槽数目;
收到resourcemanager的指令后,会将插槽提供给jobmanager调。
resourcemanager ->负责管理TaskManager的slot。jobmanager申请插槽的时候resourcemanager会将空闲的插槽的TaskManager分配给
jobmanager,如果没有空闲的插槽,他还会向资源提供平台发起会话,以提供七档taskManager进程的容器