分布式数据存储





Hadoop MapReduce学习笔记1

Hadoop MapReduce是比较经典的Master/Slave架构设计,系统主要包括两大模块:

  • JobTracker : 也就是我们所说的Master, 包括资源管理功能和作业调用功能;
  • TaskTracker : Slave模块,或者称为Worker,任务执行的节点;

JobTracker中资源管理

  1. Hadoop以slot(槽位)代表计算资源,包括一定的内存和cpu核,具体细分为Map Slot和Reduce Slot,一个Task可占用多个slots;一个TaskTracker可划分多个slots(可配置), slots间的资源隔离目前hadoop做的不是太好;
  2. TaskTracker作为具体的执行单元,采用pull的的方式拉取任务,TaskTracker会定期的向JobTracker发送心跳,心跳的信息包括:我还活着,TaskTracker中运行的task的状态,如果有空闲的slots的话,向JobTracker表明我有空闲资源,JobTracker以心跳应答的方式向TaskTracker分配新的Task;
  3. JobTracker不会主动的和TaskTracker联系,只会接收心跳,然后再应答中向TaskTracker发送指令,如启动Task, 杀死Task;如果长时间未收到TaskTracker的心跳,表明TaskTracker可能已宕机,则会重启TaskTracker上已经分配的任务到其他的TaskTracker中;
  4. 任务的调度策略:默认简单任务调度策略FIFO,可用户自定义任务的调度策略;

JobTracker中的作业控制

  1. Hadoop将作业分为三个层次:
    • 作业: 用户提交的作业,使用JobInProgress控制作业的运行状态,包含多个Tasks
    • Tasks: 包括Map Task 和 Reduce Task: 使用TaskInProgress控制任务的运行状态,可能包含多个Task Attempt.
    • Task Attempt : 某个Task的运行一次尝试,这里采用的类似two-phase commit的协议,因为jobtracker可能会针对同一Task启动两个Attempt(谁先执行完,使用谁的计算结果,并把另外一个杀掉),然后才会提交task attempt的结作为Task的计算结果,在TaskTracker中执行.
  2. JobTracker会从TaskTracker的心跳汇聚TaskAttempt的运行状态,然后调度未完成的task,分配给TaskTracker.






redis源码分析资料

最近闲来无事,看看redis源码,看看redis为何如此高效~
下面是redis代码分析的资料,记录下:

比较全面但不太详细的分析:Redis: under the hood

简单的读和写的完整处理过程:More Redis internals: Tracing a GET & SET (同时也是一个挺好的GDB调试研究源码的实例教程)

关于虚拟内存:Virtual memory

其它资料:http://redis.io/documentation

那就先从redis最原始的1.0版本开始看吧,这里需要说明下,一般学习开源软件代码,最初的版本代码量比较少,看起来不是很费劲,而且基本上能够体现软件的架构信息。

有关本站redis的内容请点击这里