Spark的一些优化

web-ui观察 executor指标:失败,shuffle,cache,CPU,内存,RDD数量,GC;stage关注 DAG,也是shuffle等数据,还有 Event Timeline。shuffle优化方式:增加并行度,group by变成局部聚合+全局聚合;转为 BHJ,大表 join 大表的 外表加盐,内表复制N份,再去盐gourp原始id,最后聚合;shuffle原理,HashShuffleManager(废除),SortShuffleManager。 with 缓存优化,查询下推,自动倾斜join优化,LIMIT大数量优化,bucked join,4表join转为2个2个join增加并行度。RSS,向量化, AQE

阅读全文

DataX和Canal相关

DataX:读写插件,Job任务拆分,Task和Task Group,transform(filter,substr,replace,可自定义),流控,脏数据,数据库冥等写入,ETL架构。Canal:Server(服务端-客户端模式,嵌入式模式),多个instance,包括:eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)、eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)、eventStore (数据存储)、metaManager (增量订阅&消费信息管理器)

阅读全文

微服务架构

五种暗能量:Simple components、Team autonomy、Fast deployment pipeline、Multiple technology stacks、Segregate by characteristics、;Service collaboration patterns:Saga 模式、CQRS 模式、;Communicate、MessagingAPI composition;一些重要的设计:、Database per Service pattern、API Gateway pattern、Circuit Breaker、Access token。可观测性模式:Log aggregation、Application metrics、Audit logging、Distributed tracing、Exception tracking、Health check API、Log deployments and changes。Testing patterns:Service Component Test、Service Integration Contract Test。UI 模式:Server-side page fragment composition、Client-side UI composition

阅读全文

Kafka架构

producer, broker, consumer,consumer group消费对应的partition数据,partition 包括多个 log segment,当一个达到阈值后,变成read only,再生成一个新的;每次都是head或者tail读,以及append写,速度很快,另外用了page cache会将数据写先到缓存再刷新;每个分区都有一个leader,副本只用于备份不做读写处理;副本如果能跟上leader就会放到 ISR集合中,ISR集合中最小的读确认offset 就是高水位,低水位是下次写的offset;producer 用 ack=0、1、all来表示副本节点是否接受了消息;ZK 后面迁移到了 Z-Raft 了,还有分层存储;kafka balance 是 NP问题,kafka connect,kafka streams;未来发展:完全基于云的kafka,用C++重写的kafka,数据存储在S3上的 statefulness 的kafka

阅读全文

scala总结

高阶函数、函数柯里化、隐式转换(类型,对象),lazy延迟计算、最后一行默认返回return。内置的可变 不可变集合、自动类型推导、操作符重载、模式匹配、内部函数、对象的apply和unapply、None和Some以及Option。foldLeft ,增强的for 循环,协变、逆变,上界 和 下界

阅读全文

大数据上云

大数据平台上云的问题:集群管控方式变了,YARN调度系统变了;安全性问题、DDos、数据治理问题;成本问题,计费策略;存储迁移,HDFS -> S3 语义的变化;多云高可用方案;混合云方案;适配其他业务线

阅读全文

Parquet for Spark

Spark执行Delta的过程,通过自定义的format格式,到DataFrameWriter.saveToV1Source,在是到DeltaDataSource#createRealation,写入做优化事务处理,再用FileFormatWriter创建多个Task并行写入,之后就是到Parquet内部执行阶段。Parquet包含Row Groups,往下是Column Chunk,再往下是Page,文件尾部包含Footer和一些元数据信息。Spark是按行写入的,一次写一行,每行写对应的 column。Parquet编码包括Dictionary Encoding、Run Length Encoding (RLE)、Delta Encoding。读取的主要类是VectorizedParquetRecordReader执行一批读取,调用VectorizedColumnReaders(对应每个column),再调用VectorizedValuesReader(读取一个column中的一段数据),返回由上层应用消费 。

阅读全文

Spark-Streaming 原理

spark streaming的基本原理,包括MicroBatchExecution,ContinuousExecution,通过IncrementalExecution + 状态实现micro-batch 并复用了spark 的所有查询逻辑;Source接口支持 getOffset,commit,可以自定义各种扩展实现;Sink包括:FileStreamSink、KafkaSink、DeltaSink、、ForeachBatchSink,ForeachWriteTable;Stateful将信息存如StateStoreRDD,保存到 HDFSBackedStateStoreProvider、RocksDBStateStoreProvider 中;Stream-Stream Join使用了StreamingSymmetricHashJoin,需要保证状态;Session Window同样也是通过插入一些流相关的算子 + 状态保存实现的

阅读全文