该文被密码保护。 阅读全文
posted @ 2020-02-20 19:03 JaxYoun 阅读(803) 评论(0) 推荐(0) 编辑
摘要: 0、背景:在由于不想在小项目中引入SpringSecurity这种重量级安全框架,我自定义了一个LoginFilter来处理认证+授权逻辑。对于认证或授权失败的情况,最初是在filter中抛出异常,并携带401状态码,然后利用Spring的ControllerAdvice全局捕获这些异常并转换后返回 阅读全文
posted @ 2020-02-20 19:00 JaxYoun 阅读(770) 评论(0) 推荐(0) 编辑
摘要: 1. Stream接口,它 直接负责 字节流的传输。 2. Reader/Writer接口,它本身 不能读直接读写数据 ,而是以Stream接口为内部核心,在外围装饰增强,负责字符流的读写。字符和字节的转换过程必须指定 字符编码 方式。 3. 为了提高Reader/Writer接口的效率,又在外围装 阅读全文
posted @ 2020-02-20 18:58 JaxYoun 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 在早期版本的Spark中,shuffle过程没有磁盘读写操作,是纯内存操作,后来发现效率较低,且极易引发OOME,较新版本的Shuffle操作都加入了磁盘读写进行了改进。 1、未经优化的HashShuffleManager:上一个stage中每一个task会对下一个stage的每一个task写一份数 阅读全文
posted @ 2020-02-20 18:56 JaxYoun 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 1、Spark组件之间使用RPC机制进行通信。RPC的客户端在本地编写并调用业务接口,接口在本地通过RPC框架的动态代理机制生成一个对应的实现类,在这个实现类中完成soket通信、远程调用等功能的逻辑包装,而在RPC的服务端既编写业务接口也编写了具体的业务实现类,通过RPC框架以接口的方式暴露出来, 阅读全文
posted @ 2020-02-20 18:54 JaxYoun 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 1. spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据量大,且会随着计算的进行会发生实时变化,所以Executor的内存管理才分析的重点。 2. 在执行 阅读全文
posted @ 2020-02-20 18:52 JaxYoun 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 1、Redis数据持久化的必要性 由于redis是基于内存的数据库,面临数据掉电易失的风险,要避免数据丢失,最好将内存数据持久化到磁盘等永久存储介质上。服务重启时,会先加载磁盘文件内的数据到内存,完成数据恢复。 2、RDB(RedisDB) 对内存中的redis全量数据进行 时点快照 并序列化,以文 阅读全文
posted @ 2020-02-20 18:51 JaxYoun 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 1、常见的三种数据的集群存储模式 1. full mirror:全量镜像模式,单纯备份模式,各个节点数据相同,都包含了全量数据,仅主节点可写,保证了数据冗余和读的负载均衡。数据安全性高,横向扩展能力差,资源利用率不高。 2. pure sharding:数据分片,每个节点的数据不相同,所有节点中数据 阅读全文
posted @ 2020-02-20 18:49 JaxYoun 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 1. 满足高可用,唯一的办法是副本镜像方案。 2. 满足可伸缩,唯一的办法是分片方案。 3. 业界实践证明,先将全量数据分片,再对分片做多副本镜像这样的组合方案,在资源利用率、可用性、伸缩性各方面都很均衡。如HDFS、RedisCluster、RocketMQ等都是采用这种组合方案来存储数据的。 4 阅读全文
posted @ 2020-02-20 16:00 JaxYoun 阅读(609) 评论(0) 推荐(0) 编辑
摘要: HDFS架构(Master Slave) 几个进程的角色 1. nameNode(master):用于保存、管理、持久化文件的元数据(文件名、文件副本数、文件块大小、文件块列表),同时还要接收客户端的文件读写请求。 2. secondaryNameNode:用于实时同步文件元数据,给nameNode 阅读全文
posted @ 2020-02-20 15:50 JaxYoun 阅读(313) 评论(0) 推荐(0) 编辑