(这是写在心中的火花1.1,要知道,新的功能往往被迅速补充,下文提到的一些限制可能会在某些时候很好消失未来)。
您可以使用带有Hive语法的Spark SQL并连接到Hive Metastore,这将导致您的Spark SQL配置单元命令在相同的数据空间上执行,就像它们直接通过Hive执行一样。
要做到这一点,您只需要像解释here那样实例化HiveContext,并提供一个hive-site.xml配置文件,该文件指定了何处可以找到Hive Metastore的位置。
SELECT语句的结果是SchemaRDD,它是具有关联模式的Row对象的RDD。您可以像使用任何RDD一样使用它,包括缓存和持久性,效果也是一样的(数据来自配置单元的事实在此没有影响)。
如果您的配置单元命令正在创建数据,例如“CREATE TABLE ...”,相应的表的创建方式与默认情况下常规Hive完全相同,即/ var/lib/hive/warehouse。
通过Spark执行Hive SQL为您提供了Spark的所有缓存优势:在同一个Spark上下文中对同一数据集执行第二个SQL查询通常比第一个查询快得多。
自Spark 1.1以来,有可能使用start the Thrift JDBC server,它本质上等同于HiveServer2,因此允许您通过JDBC连接执行SparkQL命令。
请注意,并非所有Hive功能都可用(尚未?),请参阅详细信息here。
最后,您还可以放弃Hive语法和Metastore,并直接在CSV和Parquet文件上执行SQL查询。我最好的猜测是,这将成为未来的首选方法,但目前像这样的SQL功能集比使用Hive语法时要小。