Hadoop权威指南(第三版)学习笔记之一初识Hadoop

来源:互联网 发布:学服装设计软件 编辑:程序博客网 时间:2024/06/05 20:16

第1章 初识Hadoop

1.1 数据!数据!

大数据1ZB=1000EB=10^6^PB=10^9^TB=10^21^ 字节,相当于世界上每个人一个硬盘驱动器所能容纳数据的数量级。推荐系统中“大量数据胜于好的算法”。

1.2 数据存储与分析

1TB硬盘,按其传输熟读约为100MB/s来算,读取整个硬盘数据需要约2.5h,但是将相同内容存放在100个硬盘中,每个存储1%,并行读取,用时不超过2min。实际情况下,可以存储100个数据集,每个1TB,实现共享硬盘的访问,可以大大缩短数据分析时间(统计角度来看,用户的分析工作时间不同,干扰不大)。

 问题1-1:实现多个硬盘的并行读写,需解决问题?

(1)硬件故障。需要对数据进行备份:系统保存数据的冗余副本,发生故障会,可以使用数据的另一可用复本。例如,Hadoop的文件系统,HDFS也是其中一类。
(2)大多数任务需要结合大部分数据共同完成。各种分布式系统允许结合多个来源的数据实现分析,但保持正确性是一个重要问题。

MapReduce提出了一个编程模型,将上述硬盘读写问题进行抽象,转换为对一个数据集(键值对形式)的计算,只有map和reduce这两部分提供对外的接口。Hadoop提供了一个可靠的共享存储和分析系统。核心:HDFS实现存储和MapReduce实现分析处理。

1.3 相较与其他系统的优势

MapReduce:每个查询需要处理整个数据集(或大部分),是一个批量查询处理器,而且能够在合理的时间范围内处理针对整个数据集的即时查询(用时短)。

1.3.1 关系型数据库管理系统

 问题1-2:为什么不能用数据库来对大量硬盘上的大规模数据进行批量分析?
(1)因为寻址时间的提高远慢于传输速率的提高。寻址:是将磁头移动到特定硬盘位置进行读写操作的过程。它是导致硬盘操作延迟的主要原因,而传输速率取决于带宽。
(2)如果数据访问模式中包含大量的硬盘寻址,必然会耗费大量时间(相较于流数据读取模式,流读取主要取决于传输速率)。

类型 传统关系型数据库 MapReduce 数据大小 GB PB 访问 交互式和批量处理 批处理 更新 多次读/写 一次写入,多次读取 结构 静态模式 动态模式 完整性 高 低 横向扩展 非线性 线性

表1-1关系型数据库和MapReduce比较

关系型数据库和MapReduce差异性如下,MapReduce适合批处理需要分析整个数据集的问题,尤其是动态分析,RDBMS是用于与点查询和更新;二者另一个区别是他们操作的数据集的结构化程度。

 问题1-3:数据集有几种结构化程度?
(1)结构化数据:具有既定格式的实体化数据,如XML文档。
(2)半结构化数据:比较松散,容易被忽略,只能用在对数据结构的一般指导,如一张电子表格
(3)非结构化数据:没有特别内部结构,如纯文本或属相数据。

MapReduce对非结构化数据和半结构化数据非常有效,因为在处理数据时才对数据进行解释,即MapReduce输入的键和值并不是数据固有属相,而是由分析人员选择的。关系型数据往往是规范的,规范化不适应MapReduce,因为它使记录读取成为本地操作,而MapReduce是进行高速的流读写操作。Web服务器日志是典型的非规范化数据记录,因此MapReduce非常适用分析各种日志文件。

MapReduce是一种线性的可伸缩模型,其中包括map函数和reduce函数,每个函数定义一个键值对集合到另一个键值对集合的映射。

1.3.2 网格计算

高性能计算和网格计算,主要使用类似于消息传递接口的API(MAPI)。高性能计算是将将作业分散到集群的各台机器上,适用于计算密集型作业,如果节点需要访问的数据更庞大,很多计算机节点就会被网络带宽所影响。

MapReduce在计算节点上存储数据,以实现数据本地的快速访问。数据本地化是MapReduce的核心特征。另外,MapReduce通过显示网络拓扑结构来保留网络带宽(网络带宽是数据中心最珍贵的资源),但这种排列方式并没有降低MapReduce对计算密集型数据进行分析的能力。

MapReduce 的无共享框架使系统能够检测到并重新执行那些失败的map或reduce任务(各任务是彼此独立的),因此不必担心系统部分失效问题。

 问题1-4:MapReduce任务彼此独立性的理解? MapReduce系统控制着mapper输出结果传给reducer的过程。这种情况下,重新运行reducer比重新运行mapper要小心,因为reducer运行需要获取必要的mapper,如果没有,必须再次运行对应的mapper,重新生成输出结果。

MapReduce的严格编程模型:限定用户使用有特定关联的键值对,mapper和reducer彼此间的协调非常有限(每个mapper将键值对传给reducer)。

 问题1-5:MapReduce的应用场景?
(1)由谷歌开发,用于构建搜索引擎的索引(函数式编程、分布式计算和数据库)
(2)图像图形分析的问题
(3)机器学习算法

1.3.3 志愿计算

MapReduce三大设计目标:
(1)为只需几分钟或几小时就可以完成的作业提供服务;
(2)运行与同一个内部有高数网络连接的数据中心内;
(3)数据中心内的计算机都是可靠的、定制的硬件。

1.4 Hadoop发展简史

Hadoop是Apache Lucene创始人创建,Lucene是一个文本搜索系统库。Hadoop起源于网络搜索引擎Apache Nutch(Lucene一部分)。2008年以后,Hadoop称为最快的TB级数据排序系统。

1.5 Apache Hadoop和Hadoop生态系统

项目名称 内容 Common 一系列组件和接口,用于分布式文件系统和通用I/O(序列化、JavaRPC和持久化数据结构) Avro 一种序列化系统,用于支持高效、跨语言的RPC和持久化数据存储 MapReduce 分布式数据处理模型和执行环境,运行于大型商用机集群 HDFS 分布式文件系统,运行与大型商用机集群 Pig 数据流语言和运行环境,用以探究非常庞大的数据集。Pig运行在MapReduce和HDFS集群上 Hive 一种分布式的、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据 HBase 一种分布式的、按列存储的数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取) ZooKeeper 一种分布式的、可用性高的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用 Sqoop 该工具用于结构化数据存储(如关系型数据库)和HDFS之间高效批量传输数据 Oozie 该服务用于运行和调度Hadoop作业(如:MapReduce,pig,Hive及Sqoop作业)

表1-2 Hadoop生态系统项目