一、SparkonHive和HiveonSpark的区别
1)SparkonHiveSparkonHive是Hive只作为存储角色,Spark负责sql解析优化,执行。这里可以理解为Spark通过SparkSQL使用Hive语句操作Hive表,底层运行的还是SparkRDD。具体步骤如下:
通过SparkSQL,加载Hive的配置文件,获取到Hive的元数据信息;
获取到Hive的元数据信息之后可以拿到Hive表的数据;
通过SparkSQL来操作Hive表中的数据。
具体实现在我之前的博文中已经讲过,在这里就不再重复了,实现很简单,可以参考:大数据Hadoop之——SparkSQL+SparkStreaming
Spark使用Hive来提供表的metadata信息。
2)HiveonSpark(本章实现)HiveonSpark是Hive既作为存储又负责sql的解析优化,Spark负责执行。这里Hive的执行引擎变成了Spark,不再是MR,这个要实现比SparkonHive麻烦很多,必须重新编译你的spark和导入jar包,不过目前大部分使用的确实是sparkonhive。
Hive默认使用MapReduce作为执行引擎,即HiveonMapReduce。实际上,Hive还可以使用Tez和Spark作为其执行引擎,分别为HiveonTez和HiveonSpark。由于MapReduce中间计算均需要写入磁盘,而Spark是放在内存中,所以总体来讲Spark比MapReduce快很多。因此,HiveonSpark也会比HiveonMapReduce快。由于HiveonMapReduce的缺陷,所以企业里基本上很少使用了。
hiveonspark大体与sparkonhive结构类似,只是SQL引擎不同,但是计算引擎都是spark!
参考文档: