(这是考虑到 spark 1.1 编写的,请注意新功能往往会很快添加,下面提到的一些限制很可能在未来的某个时候消失)。
您可以使用带有 Hive 语法的 Spark SQL 并连接到 Hive 元存储,这将导致您的 Spark SQL hive 命令在相同的数据空间上执行,就好像它们直接通过 Hive 执行一样。
为此,您只需按照此处的说明实例化 HiveContext并提供一个 hive-site.xml 配置文件,其中指定在哪里可以找到 Hive 元存储。
SELECT 语句的结果是 SchemaRDD,它是具有关联模式的 Row 对象的 RDD。你可以像使用任何RDD一样使用它,包括缓存和持久化,效果是一样的(数据来自hive的事实在这里没有影响)。
如果您的 hive 命令正在创建数据,例如“CREATE TABLE ...”,则在与常规 Hive 完全相同的位置创建相应的表,即默认情况下是 /var/lib/hive/warehouse。
通过 Spark 执行 Hive SQL 为您提供了 Spark 的所有缓存优势:在相同的 spark 上下文中对相同的数据集执行第二个 SQL 查询通常比第一个查询快得多。
从 Spark 1.1 开始,可以启动 Thrift JDBC 服务器,它本质上等同于 HiveServer2,因此允许您通过 JDBC 连接执行 SparkQL 命令。
请注意,并非所有 Hive 功能都可用(还没有?),请在此处查看详细信息。
最后,您还可以丢弃 Hive 语法和元存储,直接在 CSV 和 Parquet 文件上执行 SQL 查询。我最好的猜测是,这将成为未来的首选方法,尽管目前像这样可用的 SQL 功能集比使用 Hive 语法时要小。