摘要:
1、KeyBy 操作后,只有当 Key 的数量大于算子的并发实例数才能获得较好的计算性能。 A.而若Key 的数量比实例数量少,就会导致部分实例收不到数据,这些实例就得不到执行,这些实例的计算能力得不到充分发挥。 ~~B.当Key个数多余并行实例数时,由于同一个 Key 对应的所有数据都能发送到同一 阅读全文
摘要:
逻辑计划 logicGraph或者jobGraph,其端点为operator,edge为数据流向。 operator往往代表一个函数。 同一个分区内的具有连续上下游关系的函数组成operator-chain,同一个operator-chain内的数据,在流动过程中不会出现序列化和分区间的网络通信。 阅读全文
该文被密码保护。 阅读全文
摘要:
0、背景:在由于不想在小项目中引入SpringSecurity这种重量级安全框架,我自定义了一个LoginFilter来处理认证+授权逻辑。对于认证或授权失败的情况,最初是在filter中抛出异常,并携带401状态码,然后利用Spring的ControllerAdvice全局捕获这些异常并转换后返回 阅读全文
摘要:
1. Stream接口,它 直接负责 字节流的传输。 2. Reader/Writer接口,它本身 不能读直接读写数据 ,而是以Stream接口为内部核心,在外围装饰增强,负责字符流的读写。字符和字节的转换过程必须指定 字符编码 方式。 3. 为了提高Reader/Writer接口的效率,又在外围装 阅读全文
摘要:
在早期版本的Spark中,shuffle过程没有磁盘读写操作,是纯内存操作,后来发现效率较低,且极易引发OOME,较新版本的Shuffle操作都加入了磁盘读写进行了改进。 1、未经优化的HashShuffleManager:上一个stage中每一个task会对下一个stage的每一个task写一份数 阅读全文
摘要:
1、Spark组件之间使用RPC机制进行通信。RPC的客户端在本地编写并调用业务接口,接口在本地通过RPC框架的动态代理机制生成一个对应的实现类,在这个实现类中完成soket通信、远程调用等功能的逻辑包装,而在RPC的服务端既编写业务接口也编写了具体的业务实现类,通过RPC框架以接口的方式暴露出来, 阅读全文
摘要:
1. spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据量大,且会随着计算的进行会发生实时变化,所以Executor的内存管理才分析的重点。 2. 在执行 阅读全文
摘要:
1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(RedisDB) 对内存中的redis全量数据进行 时点快照 并序列化,以文 阅读全文
摘要:
1、常见的三种数据的集群存储模式 1. full mirror:全量镜像模式,单纯备份模式,各个节点数据相同,都包含了全量数据,仅主节点可写,保证了数据冗余和读的负载均衡。数据安全性高,横向扩展能力差,资源利用率不高。 2. pure sharding:数据分片,每个节点的数据不相同,所有节点中数据 阅读全文