一. 初识Hadoop
Hadoop为我们提供了一个可靠的且可扩展的存储和分析平台。
shared-nothing(SN)架构:是一种分布式计算架构,这种架构中,每一个节点都是独立的,自给的,在系统中不存在单点竞争。这种架构中不存在集中存储的状态,整个系统中没有资源竞争。更明确地说,没有节点共享存储器和硬盘。shared noting在web应用中广泛使用,原因就在于它的可扩展性。一个完全的SN系统可以通过增加廉价的计算机来实现极大的扩展,因为在系统中没有单点瓶颈去降低系统的速度,谷歌把这种特性成为sharding。一个典型的SN系统把它的数据划分为不同的部分存储在不同节点的数据库中,并且为不用的用户和请求分配不同的节点,要求系统中的每个节点使用某种协议维护自己的应用程序数据的副本,这通常被称为数据库分片。
二. 关于MapReduce
MapReduce是一种可用于数据处理的编程模型。Hadoop可以运行各种语言版本的MapReduce程序,如Java、Ruby、Python等。MapReduce程序本质上是并行运行的,因此可以将大规模的数据分析任务分发给任何一个拥有足够多机器的数据中心。MapReduce的优势在于处理大规模数据集。
通常,处理少量的大型文件比处理大量的小型文件更容易、更高效。因此,将小型文件经过预处理,拼接成一些大型文件后来处理。
map函数的输出经由MapReduce框架处理后,最后发送到reduce函数。这个过程基于键来对键-值对进行排序和分组。
Hadoop本身提供了一套可优化网络序列化传输的基本类型,
此外还有BooleanWritable、ByteWritable、DoubleWritable、FloatWritable和NullWritable(当<key, value>中的key或value为空时使用)等。
YARN:Hadoop资源管理系统 HDFS:Hadoop分布式文件系统
reduce的输出通常存储在HDFS中以实现可靠存储。reduce任务的数量并非由输入数据的大小决定,相反是独立指定的(8.1节介绍)
对于大多数作业,一个合理的分片大小趋向于HDFS的一个块的大小,默认为128MB,但是也可以针对集群调整这个默认值。
上图清楚地表明了为什么map任务和reduce任务之间的数据流称为shuffle(混洗),因为每个reduce任务的输入都来自许多map任务。shuffle一般比图中所示的更复杂,而且调整混洗参数对作业总执行时间的影响非常大(详情见7.3节)。
三. 关于Hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
关系数据库一个重要的特点是可以对某一行或某些行的数据进行更新、删除操作,hive不支持对某个具体行的操作,hive对数据的操作只支持覆盖原数据和追加数据。Hive也不支持事务和索引。更新、事务和索引都是关系数据库的特征,这些hive都不支持,也不打算支持,原因是hive的设计是海量数据进行处理,全数据的扫描是常态,针对某些具体数据进行操作的效率是很差的,对于更新操作,hive是通过查询将原表的数据进行转化最后存储在新表里,这和传统数据库的更新操作有很大不同。
Hive也可以在hadoop做实时查询上做一份自己的贡献,那就是和HBase集成,HBase可以进行快速查询,但是HBase不支持类SQL的语句,那么此时hive可以给HBase提供sql语法解析的外壳,可以用类sql语句操作HBase数据库。