现在是一个大数据的年代,每天全球已电子方式存储数据的数据总量非常大。下面是部分例子:
1,facebook存储这约100亿张照片,越1PB存储容量
2,The Internet Archive(互联网档案馆)存储这约2PB数据,并以每月至少20TB的速度增长
3,瑞士日内瓦附近的大型强子对撞机每年产生15PB数据
我们有了大量的数据,可以从中分析出我们有用的信息,如单个用户浏览网页内容的偏好,发现潜在用户等,还有很多用于科学技术上的用处。
那么数据怎么存放呢?这么大的数据量,首要解决的是数据读写速度,数据安全性,硬件故障等问题,要有高可用的方案。而hadoop就提供了这样的解决办法:hadoop提供了一个可靠的共享存储和分析系统。HDFS实现存储,而MapReduce实现分析处理。
关系型数据库和MapReduce:
数据库系统只更新一部分记录,比mapreduce有优势。但是,如果更新大量数据时,效率就要比mapreduce低很多,因为需要使用“排序/合并”来重建数据库。mapreduce比较适合以批处理方式处理需要分析整个数据集的问题;而RDBMS适用于“点查询”和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。mapreduce适合一次写入,多次读取数据的应用,而关系型数据库更适合持续更新的数据集。
另一个区别在于它们所操作的数据集的结构化程度。结构化数据是具有既定格式的实体化数据,如xml文档等。半结构化数据比较松散,虽可能有格式,但也可以被忽略,所以他只能用作对数据结构的一般指导,如一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。非结构化数据没有什么特别的内部结构,例如纯文本等。mapreduce对于非结构化或半结构化数据非常有效,因为在处理数据时才对数据进行解释。而关系型数据都是规范的,以保证数据的完整性且不含冗余。规范化给mapreduce带来了问题,因为它使记录读取成为异地操作,不能进行高速的流式读写,而使用mapreduce的核心前提就是他可以进行高速的流式读写操作。
分布式计算:
1,mapreduc会尽量在计算节点上存储数据,以实现数据的本地快速访问,从而获得良好的性能,降低使用的网络带宽。
2,mapreduce让程序员无需考虑系统部分失效问题,因为自身系统实现难能够检测到失败的map或reduce任务,并让正常运行的机器重新执行这些失败的任务,即各个任务之间彼此独立。
hadoop的设计目标:
服务于那些只需数分钟或数小时即可完成的作业,并且运行于内部通过高速网络连接的单一数据中心内,并且该数据中心内的计算机需要由可靠的,定制的硬件构成。
常见的hadoop相关项目:
mapreduce:分布式数据处理模型和执行环境,运行于大型商用集群
hdfs:分布式文件系统,运行于大型商用集群
hive:一个分布式,按列存储的数据仓库。hive管理hdfs中存储的数据,并提供基于sql的查询语言用以查询数据。
hbase:一个分布式,按列存储数据库。hbase使用hdfs作为底层存储,同时支持mapreduce的批量式计算和点查询
zookeeper:一个分布式,可用性高的协调服务。zookeeper提供分布式锁之类的基本服务用于构建分布式应用