学习大数据不可避免地会用到Hadoop、Hive、Spark等内容,也很有必要去归类、整理和比较它们之间的异同与关系。无论是Hadoop还是Spark或是其他大数据处理工具,归根结底还是要面向大数据的四个核心问题。
1.数据的存储(big data storage),海量数据需要处理和分析,但前提是要进行有效的存储。稍后会提到Hadoop(HDFS)分布式文件系统对超大数据集的容错性问题。
2.数据的计算(Data calculation),在数据有效存储的基础上,对数据的统计和分析本质上就是数据的计算。在大数据领域常见的计算工具有MapReduce、Spark等。
3.数据的查询(consensus data),对大数据进行有效管理的核心指标是数据查询技术。其中NoSQL (Not Only SQL)应用较为广泛,能较有效解决数据的随机查询,其中就主要包括Hbase等。从本质而言,依旧是Hadoop模式下的数据查询。
4.数据的挖掘(Data mining),数据仓库为数据的挖掘提供了基础,通过分类、预测、相关性分析来建立模型进行模式识别、机器学习从而构建专家系统。
以上这四点就是Hadoop、Hive、Spark共同完成的目标。Hadoop从本质上讲是一个分布式文件系统(HDFS),首先可以用来海量的数据存储,而其中的MapReduce负责数据的计算,这就使得Hadoop成为对海量数据进行处理的分布式框架。Hadoop的诞生突破了传统数据文件系统的单机模式。HDFS使得数据可以跨越不同的机器与设备,并且用一个路径去管理不同平台上的数据,这样一来,不同的设备就好比小提琴、大提琴、单簧管、小号、横笛、钢琴等乐器合奏出一首交响曲。
演奏交响曲需要有作曲和指挥,在大数据处理上,解决好存储问题,接下来就是要计算了。在处理不同类型的数据时,需要对不同的数据资源进行分配,从而就产生了不同设备之间数据交换与通信问题,MapReduce就是面向这些问题的计算引擎。MapReduce是第一代,而Spark是第二代。MapReduce的计算模型分为Map和Reduce两个过程。在日常经验里,我们统计数据需要分类,分类越细、参与统计的人数越多,计算的时间就越短,这就是Map的形象比喻,在大数据计算中,成百上千台机器同时读取目标文件的各个部分,然后对每个部分的统计量进行计算,Map就是负责这一工作的;而Reduce就是对分类计数之后的合计,是大数据计算的第二阶段。可见,数据的计算过程就是在HDFS基础上进行分类汇总。
第一代的MapReduce已经得到了广泛的应用,但其缺点也是明显的,那就是体量大、操作繁琐。于是就诞生了Spark这样以数据计算为主的大数据处理集群。从本质上讲,依旧是对Map+Reduce模型的改进,使得Map和Reduce的界限划分不再那么清楚,方便数据交换和磁盘读写,进一步扩展数据处理量,从本质上讲还是对算法的优化。Spark基于Scala语言,对数据的负载能力更强。
下面再说说什么是Hive。Hive是数据仓库工具,首先它是建立在HDFS基础之上的,数据也存储在HDFS上,可以说Hive是Hadoop中的一个组件;作为一个数据仓库,将HDFS中结构化的数据映射为数据库中的表,这样的话,就省去了程序员为MapReduce编写程序的繁琐过程,提高了工作效率,仅仅通过SQL语句就可以查询MapReduce的计算结果,同时还可以通过SQL对文件系统中的数据进行修改。这样,无论是用户还是开发者就可以不用再考虑MapReduce中复杂的逻辑关系。当若干行Java代码被一两行SQL语句所取代,Hive的价值就体现出来了。
转载于:https://baijiahao.baidu.com/s?id=1593443824685299543&wfr=spider&for=pc