1、离线数据:hive
Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的Hive SQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。
Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业。
使用hive sql 时,其语言将被转化为mapreduce过程执行。
2、准实时数据:spark
Spark之所以能成为准实时数据查询主要基于两点:
1)spark stream将数据分成小的时间片段,以类batch批量处理的方式来处理这部分数据
2)能基于内存进行迭代,以RDD的形式实现(记录操作而非数据本身),因此也存在容错能力。
使用spark sql时,其语言将被转化为RDD,然后将会交到集群执行。
3、实时数据:flink
Flink本身是个计算引擎,不存储数据,因此使用前需要确定其数据的输入(SOURCE)/输出(SINK)系统。实时计算/Flink中所谓的建表,都是逻辑表,目的仅是让Flink作业知道上下游的数据结构。并不会真的在上下游系统建表。
简单来说,flink sql是一个常驻进程,一个sql文件,就对应于一个flink作业。如果不杀死这个进程,一旦由新的数据输入,就会产生新的数据结果。