8.1.4 Hive on Spark

随着Hive on Spark的立项,未来的Hive会支持MapReduce、Tez和Spark三大执行引擎。相比Shark和Spark SQL,Hive on Spark会全面支持现有Hive,也就意味着原来使用Hive的用户可以无缝地过渡,数据不需要迁移,原来针对业务逻辑写的Hive QL脚本不需要重写,只是换了个更加快速的执行引擎。语法上支持全部的Hive QL语法和扩展特性,同时会集成Hive的权限管理、运行监控、审计和其他基于Hive的管理工具。基于Hive生态系统的组件可以过渡到Spark执行引擎中使用。由于都是基于Spark作为执行引擎,上层做的优化难说谁比谁有多大的性能优势,生态系统的力量将是最重要的决定因素。

Hive on Spark设计方向及潜在问题如下。

1)数据表以RDD方式存储。

2)Shuffle和Join:由于Spark的Shuffle不进行分组排序,所以Hive的Join基于MapReduce的Shuffle来做MapSideJoin和ReduceSideJoin,Spark社区已经开始发起改变或者提供相应的Shuffle API,同时原有的Hive Join算法会迁移过来。

3)线程安全问题:Spark执行任务和分区是在一个JVM空间执行多线程,而传统Hive的Map端操作树或者Reduce端操作树将任务的每个线程分在不同的JVM,因为Hive的操作中有静态变量,这样就会产生并发和线程安全问题。这里也是需要重新设计的地方。

4)Java API:Hive on Spark需要社区提供Job监控和RDD扩展的API,这样就能够和原有组件融合。原有组件可以更容易地使用Spark。

感兴趣的读者可以在JIRA上了解这个项目[1]

[1] https://issues.apache.org/jira/browse/HIVE-7292。