大数据体系架构:
Spark内存计算与传统MapReduce区别:
SparkSQL与Hive的区别:
SparkSQL替换的是Hive的查询引擎,Hive是一种基于HDFS的数据仓库,并且提供了基于SQL模型的,针对存了大数据的数据仓库,进行分布式交互查询的查询引擎,所以SparkSQL暂时并不能完全替代Hive,实际上,在生产环境中,SparkSQL也是针对Hive数据仓库中的数据进行查询,Spark本身自己不提供存储,自然不可能替代Hive作为数据仓库的功能。这也印证了,SparkSQL只是替代hive的查询引擎,但是hive构建数据仓库的地位,SparkSQL并不能替代。
SparkSQL一个优点,较于Hive的查询引擎,就是速度快,原因很简单,hivesql执行底层还是用MapReduce来实现,必须经过shuffle过程(性能损耗最大,走磁盘),所以速度是很缓慢的,一些复杂的HiveSQL需要一个小时以上的时间才能执行完。但是SparkSQL由于其底层基于Spark自身的基于内存的特点,所以速度是Hive查询引擎的几倍以上。
另外,SparkSQL支持大量不同的数据源,无论是关系型数据库还是文本文件,例如json,parquet,jdbc等等,同时,SparkSQL基于RDD来工作,可以与spark的其他组件无缝集成,实现许多较为复杂的功能,例如,sparksql可以直接针对hdfs文件进行执行sql语句。
Spark Streaming与Storm的区别:
Storm是一个纯粹的实时计算框架,而SparkStreaming是一个准实时计算框架。
Storm是来一条数据就会处理一条数据,真正做到了实时处理;但是SparkStreaming需要将一段时间内的,例如1s内的数据收集起来,作为一个RDD,然后针对这个数据batch进行处理。另外,Storm的一项高级特性是SparkStreaming不具备的,就是Storm在支持分布式流式计算程序(Topology)在运行的过程中,可以动态调整并行度,从而提高并发处理的能力,而SparkStreaming是无法动态的调整并行度的。
SparkStreaming的优点(其实也就是对应了Storm缺点)是,SparkStreaming的计算吞吐量相较于Storm是几倍甚至是十几倍的差距,原因就是:SparkStreaming基于batch进行批处理的,所以相较于Storm的基于单条数据进行处理,效率高出很多!
另外,从技术生态圈角度看,SparkStreaming处理Spark生态体系中,可以与SparkCore,SparkSQL,甚至是SparkMLib,SparkGraphx进行无缝集成,流式处理完的数据,可以立即进行各种map,reduce转换操作,可以立即使用sql进行查询,甚至可以使用machine learning或者图计算算法进行处理。这种一站式的大数据处理功能和优势,是Storm无法匹敌的。
二者适用场景:
对于实时性要求特别高的需求,并且实时数据量不稳定,比如在白天有高峰期的情况下,可以使用Storm,例如实时计费系统;如果对于实时性要求一般,假设允许1s的准实时处理,并且不要求动态调整并行度的话,选择SparkStreaming将会是一个更好的选择。
如果仅仅要求数据进行简单的流式计算处理,那么storm或者sparkstreaming都无可厚非,但是如果对于流式计算的中间结果(就是SparkRDD)进行复杂的后续处理,那么使用spark会更合适一些,因为spark本身提供了很多函数,例如map,reduce,reduceByKey,groupByKey,filter等等。