Hadoop、Spark、Hive三者都是大数据相关的系统和技术也属于数据管理系统的范畴常见的问题无非就两个1、数据怎么存2、数据怎么算。为了方便理解这些技术从单机时代来说所有的数据都在一套服务器上数据处理的任务都是IO密集型也不是CPU密集型的更谈不上分布式系统。在信息爆炸的时代传统的单服务器已无法满足海量数据的存储和计算。问题在于如果有100台机器统一存储数据该如何做管理呢就好比老板直接对100个员工发号施令肯定需要一些经理的角色帮助他管理这100个同事让他们更像是一个团队在协作共事。数据存储在Hadoop平台上HDFS扮演这样一个经理的角色HDFS会同意去管理这100个服务器的存储空间提供相应的接口让这一百台机器的存储空间看起来像在一台机器上。数据计算每一台机器都拥有自己的CPU内存如果充分利用到这些资源让数据计算更快的完成就变成一个顺利成章的事情。在实现一个计算任务时任务该怎么分配到这些机器上任务之间如何做同步出现某一台机器掉链子的情况怎么处理这些都是典型的并行编码的复杂性。 为了解决这些问题HDFS通过引入MapReduce解决这些问题MapReduce模块实际上提供了一个任务并行的框架通过对API的抽象把并行的程序分为两个阶段map阶段、reduce阶段。 假设有一个任务量很大的活需要100个人把它平均分成100份每人做一份这个过程就是map阶段。reduce阶段是指等100个任务完成然后再把结果汇总到一起形成最终结果。过去现在SQL的使用区别不得不说SQL是一个伟大的发明。用户可以通过SQl语言去做数据处理 SQL中的S就是结构化处理的意思这里有个前提数据是结构化的。Hive中有一个核心模块metastore它的作用主要是用来存储这些结构化的信息。Hive中引擎会将SQL语句进行语法分析生成语法树这些步骤实际上和普通数据库没有区别区别主要在执行阶段Hive引擎会把SQl语句翻译成MapReduce的任务去执行再把执行的结果进行加工返回给用户。 SQL的出现使得大数据处理任务的开发效率提高了但是在数据处理的表达力和灵活性上不如直接写MapReduce程序因此两个技术不是相互替代的关系根据使用场景需要自行选择。Spark VS HadoopSpark本身也是一个计算框架和Hadoop经常被拿来做对比准确来说是和Hadoop里面的MapReduce做对比。和MapReduce不同的是Spark是基于内存的计算MapReduce是基于磁盘的计算。举个极端的例子如果数据量不大并且机器内存可以装得下的话Spark会比MapReduce快100倍。毕竟是基于内存而不是基于磁盘。但是一般来说默认会认为前者比后者快2~3倍。作为计算引擎Spark还提供了比如说可以让用户去写流处理的streaming的模块、支持机器学习的MLib模块以及支持图处理的GraphX