1.Hadoop 的产生与发展
在大数据时代,数据面临着爆炸式的增长,据IDC公司统计2013年,全球产生3.5ZB的数据,预计到2020年,这个数据将超过10 倍增长,1ZB等于10亿TB,大数据的价值在于挖掘,挖掘就是分析,但是如何存储和分析这些数据成为一个重要难题。在传统计算机体系中,存储空间正面临着严重挑战,存储数据的成本越来越高。在存储领域,出现的技术更多的增加到存储的速度,但是增加硬盘容量的技术却发展的非常慢,现在很多厂商已经意识到大容量硬盘同样是一个巨大的市场但技术研发需要时间,但远水解不了近渴,存在的问题是,存储的读取速度提升有限,磁盘的存储空间严重不足。
Hadoop 提供了一个可靠的共享存储和分析系统:HDFS 实现存储,而MapReduce实现分析处理。
这两种构成了Hadoop系统的核心
Hadoop的主要技术特点:
1.扩容能力:能可靠地存储和处理千兆字节(PB)数据
2.成本低:通过普通机器组成的服务器集群来分发以及处理数据
3.可靠性:Hadoop能自动维护数据的多份副本,并且在任务失败后能自动部署计算任务
2.Hadoop的定义与组成
Hadoop由Pig,Chukwa,Hive,HBase,MapReduce,HDFS,Zookeeper,Core,Avro九部分,其中最核心是MapReduce和HDFS
其中部分子项目的作用如下表所示:
Pig 一种用于探索大型数据的脚本语言
Chukwa 展示,监控和分析已收集的数据
Hive 提供类似Oracle的数据添加,查询,修改,删除
Hbase 提供可靠的,可扩展分布式数据库
Zookeeper 为分布式文件系统提供一致性服务
Core 提供了一个分布式文件系统(HDFS)和支持MapReduce的分布式计算序列化,提供分布式出书效率
MapReduce 计算框架:
作业完成时间取决于最慢任务完成时间
(1)一个作业由若干个Map任务和Reduce任务构成
(2)因硬件老化软件bug等,某些任务可能运行非常慢
推测运行机制:
(1)发现某个任务运行
速度远慢与任务平均速度就拖后腿
任务启动一个备份任务,同时进行
(2)谁先运行先,则采用谁得结果
不能启用推测执行机制:
任务间存在严重的负载倾斜
特殊任务,比如任务向数据库中写东西
Hadoop与关系型数据库的比较
随着近些年企业数据量的爆发式增长,原有关系型数据库在成本和效率上的先天不足就日益显露出来,这时新的分布式处理技术Hadoop 就应运而生
比较项 | 传统关系型数据库 | MapReduce |
数据大小 | GB | PB |
访问 | 交互式和批处理 | 批处理 |
更新 | 多次读写 | 一次写入多次读取 |
结构 | 静态模式 | 动态模式 |
集成度 | 高 | 低 |
伸缩性 | 非线性 | 线性 |
那么问题来了???
为什么不能使用关系型数据库加上更多的磁盘来做大规模的批量分析?为什么需要MapReduce?
这个问题的答案来源于磁盘驱动器的另一个发展趋势:寻址时间的提高速度远远慢与传输速率的提高速度
如果数据的访问模式受限于磁盘的寻址,势必会导致它花更长时间来读或者写大部分数据;
另一方面,在更新一小部分数据库记录的时候,传统的B树效果很好。但是在更新大部分数据库数据时,B树的效率就没有就没有
MapReduce的效率高,因为它需要使用排序/合并来重建数据库
在许多情况下,MapReduce被视为一种关系型数据库管理系统的补充。MapReduce很适合处理那些需要分析整个数据集的问题,
以批处理的方式,尤其是自主或者及时分析。RDBMS 适用于点查询和更新(其中,数据集已经被索引以提供低延迟的检索和短时
间的少量数据更新).MapReduce适合数据写入和多次读取的应用,而关系型数据库更适合持续更新的数据集。
MapReduce和关系型数据库之间的另一个区别是它们操作得数据集中的结构化数据的数量。结构化数据拥有准确定义的实体化数
据,具有XML文档或者数据库表定义的格式,格式特定的预定义模式。这就是RDBMS包括的内容。另一方面,半结构化数据比较
宽松,虽然可能有模式,但经常被忽略,所以只能用作数据结构指南。非结构化数据没有特别的内部结构,例如纯文本或者图像数
据。MapReduce 对于非结构化或者半结构化数据非常有效,因为它被设计为处理时内解释器。换句话说:MapReduce输入的键值
和值并不是数据固有的属性,它们是由分析数据的人来选择的。
关系型数据往往是规范的,以保持其完整性和冗余性。WEB服务器日志时记录集的一个很好的非规范化例子(例如,客户端主机每次
都以全名来指定,即使同一客户端可能会出现很多次),这也是MapReduce非常适用于分析各种日志文件的原因之一了。
MapReduce 是一个线性可伸缩的编程模型。程序猿编写两个函数——map函数和reduce函数——每个都定义一个键/值对映射到另一
个。这些函数无视数据的大小或者他们正在使用的集群特征,这样就可以原封不动的应用到小规模数据集或者大的数据集上。更重要
的是,如果放如两倍的数据量,运行时间会少于两倍。