摘要:
Spark学习(二):RDD详解 RDD API 一般来说有三种创建RDD的方式 由外部存储系统的数据集创建(比如本地的文件系统,同时兼容所有Hadoop支持的数据集):sc.textFile 通过已有的RDD通过算子转换生成新的RDD:rdd1.flatMap(_.split(" ")) 通过一个 阅读全文
摘要:
Spark学习(一):概述 上周六面试腾讯时被问到是否了解Spark,彼时对Spark毫无接触故答不了解,面试结束后了解到Spark与MapReduce渊源颇深,去年夏天学习MIT6.824分布式系统设计时曾深入学习过MapReduce(分布式学习:MapReduce - pinoky - 博客园 阅读全文
摘要:
网络IO 典型的一次IO两个阶段是:数据准备和数据读写 在数据准备阶段,根据系统IO操作的准备状态,分为两种 阻塞:比如int size = recv(sockfd, buf, 1024, 0);如果sockfd没有数据的话,当前线程会阻塞在此处,数据可读时唤醒 非阻塞:比如以上的语句把sockfd 阅读全文
摘要:
IO多路复用源码分析 select源码分析 select函数可以同时监听多个文件描述符,当某个文件描述符就绪时,select函数返回,程序可以通过遍历文件描述符集合来确定哪些文件描述符已经就绪,随后可进行相应的操作 fd_set rfds; FD_ZERO(&rfds_storage); //清空位 阅读全文
摘要:
Raft算法 一致性算法的要求: 安全性,网络延迟、分区、丢包、重复和乱序等错误需要保证正确 可用性:集群中只需要大多数机器即可运行 不依赖时序保证一致性 三种状态:follower,candidate,leader 任期:逻辑时钟的作用,每一段任期从一次选举开始 分票可能会导致一个任期没有lead 阅读全文
摘要:
MapReduce的设计 MapReduce 是一种用于处理大规模数据集的编程模型和处理框架,它执行的三个阶段: map阶段:master将输入数据分成M个独立数据块,并将每一个数据块交给一个map-worker来执行map任务(将输入数据转换为键值对的形式,然后对每个键值对执行某种操作,生成中间结 阅读全文
摘要:
数据类型与底层原理 数据结构 哈希表 redis使用链式哈希来解决哈希冲突,其Hash表实质上是一个二维数组,其中每一项就是一个指向哈希项(dictEntry)的指针 typedef struct dictht { dictEntry **table; //二维数组 unsigned long si 阅读全文
摘要:
主从库与切片集群机制 主从复制源码剖析 redis的主从复制主要包括全量复制RDB文件,增量复制,长连接同步,使用了基于状态机的设计思想,来实现不同状态和状态间的跳转 基于状态机实现的话,在开发程序时只需要考虑不同状态下具体要执行的操作,以及状态之间的跳转条件即可 四大阶段 初始化阶段:将实例A设置 阅读全文
摘要:
高可用架构 主备一致 基本原理 M-S架构:客户端的读写都直接访问A库,直到切换时把客户端读写切换给B库,A变成备库 备库设置为readonly状态:防止切换过程出现双写,可以用readonly状态判断节点的角色 基本原理:主库A和备库B之间维持一个长连接,主库内部有一个线程专门用于服务B的这个长连 阅读全文
摘要:
日志系统 redo log重做日志 redo log为InnoDB引擎特有的物理日志,记录了:“在某个数据页上做了什么修改” 的操作,循环写入,具备着占用空间小、顺序写磁盘的优点 write pos作为当前记录的位置,一边写一边顺时针移动;checkpoint作为当前要擦除的位置,一边擦出一边顺时针 阅读全文