大数据属于数据管理系统的范畴,数据管理系统无非解决两个问题:
- 数据怎么存 2. 数据怎么算
数据管理系统的发展
数据存储
- 单机时代。一台服务器足以支撑所有数据的存储需求,计算也没有瓶颈。数据处理任务都是IO密集型。
- 信息爆炸时代,数据量越来越大,一台机器存不下了,就需要多台机器统一存储数据,此时数据管理便十分重要了。需要一些经理的角色来统一管理多台机器。
Hadoop生态中,HDFS扮演上述经理的角色,统一管理多台机器上的存储空间,提供一个接口,让多台机器看起来像是一台机器,基于这个去写应用程序。
数据计算
大数据时代,数据都分布式的存储在不同的机器上,每台机器都有自己的CPU内存,具有计算能力。我们需要充分利用这些资源,让数据计算更快的完成。随之而来的问题是,计算任务怎么分配到机器上,任务之间如何进行同步,如果有机器掉链子怎么办,这就涉及到了并行编程的复杂性。为解决上述问题,Hadoop中引入了MapReduce模块,提供了一个任务并行框架,提供一些API供用户把计算任务抽象成Map(任务划分)和Reduce(结果汇总)两个阶段。
如果要写MapReduce程序需要较强的计算机背景,之前只通过SQL处理数据的那波人就很难受了,因此他们想要在Hadoop中也能写SQL,于是Hive出现了。
Hive
Hive是在Hadoop上进行结构化数据处理的解决方案,其中的核心模块metastore就是用来存储数据的结构化信息(也就是表的信息,如有多少列、每列的数据结构是什么),Hive中的执行引擎会对一句SQL进行语法分析,生成语法树(也就是将SQL翻译成一个MapReduce任务去执行返回结果)。此举提高了大数据处理任务的开发效率,但降低了数据处理的灵活性和表达力,不如直接写MapReduce
Spark
Spark生态常常和Hadoop的MapReduce做对比。Spark也是一个计算框架,其与MapReduce的主要区别在于:Spark是基于内存的计算,MapReduce是基于磁盘的计算,所以Spark就是一个字,快!(如果内存装得下)
Spark也提供一些API让开发者写数据处理的程序。Spark SQL模块也向用户提供类似于Hive的功能