我有一个火花群集设置并在我的数据集上尝试了本机scala和spark sql,并且设置似乎在大多数情况下都有效。我有以下问题
从ODBC / extenal连接到群集,我应该期待什么? - 管理员/开发人员对数据进行整形并持久保存/缓存一些将要公开的RDD? (关于蜂巢表的思路) - 什么相当于连接到spark / spark sql中的“Hive Metastore”?
是否正在考虑蜂巢的故障?
我的另一个问题是 - 当我发出配置单元查询(并说创建表等)时,它使用与hadoop / hive相同的配置单元播放器 - 当我使用sqlcontext发出sql查询时,表创建在哪里? - 如果我坚持使用表,它与持久化RDD的概念相同吗?
感谢您的回答
Nithya
答案 0 :(得分:5)
(这是用spark 1.1编写的,请注意新功能往往会快速添加,下面提到的一些限制可能会在将来的某个时候消失)。
您可以将Spark SQL与Hive语法一起使用并连接到Hive Metastore,这将导致您的Spark SQL配置单元命令在同一数据空间上执行,就像它们直接通过Hive执行一样。
为此,您只需要按照here的说明实例化HiveContext,并提供一个hive-site.xml配置文件,该文件指定了Hive Metastore的位置等。
SELECT语句的结果是SchemaRDD,它是具有关联模式的Row对象的RDD。您可以像使用任何RDD一样使用它,包括缓存和持久性,效果是相同的(数据来自蜂巢的事实在这里没有影响)。
如果您的hive命令正在创建数据,例如“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语法时要小。