为什么不实用数据库加上磁盘而采用Map-Reduce?
因为寻址时间的提高速度远远慢于传输速率的提高速度.寻址就是将磁头移动到特定的位置进行读写操作的工序.特点是磁盘操作有延迟,人传输速率相对应于磁盘的带宽
关系数据库和Map-Reduce的比较
RDBMS | Map Reduce | |
数据大小 | GB | PB |
访问 | 交互型和批处理 | 批处理 |
更新 | 多次读写 | 一次写入多次读取 |
结构 | 静态模式 | 动态模式 |
集成度 | 高 | 低 |
伸缩性 | 非线性 | 线性 |
Map Reduce是一种线性可伸缩编程模型
Map Reduce Job是客户端执行的单位.它包括输入数据,Map Reduce程序和配置信息.Hadoop把作业分成若干个小任务(task)来工作.其包括两种类型的任务:map任务和reduce任务.有两种类型的节点控制着作业执行过程:job tracker和多个task tracker.job tracker通过调度任务在task tracker中运行来协调所有运行在系统上的作业.Task tracker运行任务的同时,把进度报告传送到job tracker.Job tracker记录着每项任务的整体进展状况,若其中的一个任务失败,job tracker可以重新调度任务到另一个task tracker.Hadoop把输入数据划分成等长的小数据发送到MapReduce中,称为输入分片(input split).Hadoop为每个分片创建一个map任务,由他来运行用户定义的map函数来分析每个分片中的记录.一个理想的分片打消是一个HDFS块的大小.默认是64MB.
Hadoop允许用户声明一个combiner运行在map的输出上.该函数作为redcue函数的输入
Hadoop流使用Unix标准流作为Hadoop程序之间的接口,所以可以使用任何语言.只要编写的MapReduce程序能够读取标准输入并写到标准输出.map的输入数据把标准输入流传输到map函数.其中是一行一行的传输,然后再把行写入标准输出.一个map输出的键值对是以单一的制表符分隔的行来写入的.reduce函数的输入具有相同的格式,通过制表符来分隔的键值对,传输标准输入流.reduce函数从标准输入流读取行,然后为保证结果的有序性用键来排序,最后将结果写到标准输出中.
Hadoop把网络看作一棵树,两个节点间的距离是距离他们最近的共同祖先的总和.该树中的等级是没有被预先设定的.但它相当于数据中心,框架和一直运行的节点的等级是共同的.
Hadoop Archives通过使用archive工具根据一个文件集合创建而来.这些工具运行一个Map Reduce作业并行处理输入文件.因此需要一个Map Reduce集群去运行使用.HAR文件以.har结尾,它由两个部分组成:两个索引文件和部分文件的集合.这些部分文件包含了一些已经链接在一起的大量原始的文件的内容,并且所以使我们可以查找那些包含归档文件的部分分拣,包括他的起始点和长度.对于HAR文件,创建一个归档文件会创建原始文件的一个副本.需要于原始文件同样的磁盘空间.但目录不支持档案压缩.一旦创建,Archives便不可改变,要增加或移除文件,必须重新归档文件.