yarn 优化了mapreduce 的资源调度问题.但最初mapreduce 的设计模式要求将中间数据存储在磁盘上,并在网络中传输,这样会导致计算效率不高的问题,spark是一种类mapreduce 的通用并行框架,不同于mapreduce 算法的是,spark 任务的中间结果可以保存在内存中,从而不用再读写hdfs.而且spark 还提出了RDD 的概念,调度中采用了更为通用的有向任务执行计划图(DAG)。RDD 是分布在一组节点中的只读对象集合,如果它们中的一部分丢失,则可以依赖于容错机制进行重建,因此成为“弹性的”。
由于spark 以基于内存的计算为主,并采用了RDD 的框架,因此它更适合计算实时性更高的应用场景。hadoop 采用java 语言编写的,spark 采用scala 编写的,它将scala 作为其应用程序的框架,这样scala既可以像操作本地集合对象一样轻松地操作分布式数据集,同时也保持了spark内核的简洁性。
在许多场景下,人们只是想利用hadoop 进行一个简单的查询,为此写一大堆mapreduce代码是得不偿失的,因此,为了使人们可以像sql 语言那样,只提供一些简单的命令和脚本,就可以获得强大的查询和修改数据的功能,Hive便是hadoop 中的一个利器。 它是建立在hadoop 基础之上的数据仓库工具,可以存储,查询,分析存储在HDFS中的大规模数据,为了实现数据的提取,转化,加载,hive 也定义了一种简单的类sql 查询语言,HiveQL.Hive 会将sql 语言转化为Mapreduce 任务在后台运行。HiveQL 也允许熟悉mapreduce框架的用户,开发自定义的mapper,reducer,来处理内建模块无法完成的复杂工作。
从架构上,Hive 主要包括如下模块:用户端,解释器,元数据存储和分析数据存储。