3

我有一个 spark 集群设置,并在我的数据集上尝试了原生 scala 和 spark sql,并且该设置似乎在大多数情况下都有效。我有以下问题

从 ODBC/外部连接到集群,我应该期待什么?- 管理员/开发人员塑造数据并保留/缓存一些将被公开的 RDD?(考虑配置单元表的行) - 连接到 spark/spark sql 中的“配置单元元存储”的等价物是什么?

沿着蜂巢的思路思考是错误的吗?

我的另一个问题是——当我发出 hive 查询时(比如创建表等),它使用与 hadoop/hive 相同的 hive 元存储——当我使用 sqlcontext 发出 sql 查询时,表在哪里创建?- 如果我持久化表,它与持久化 RDD 的概念相同吗?

欣赏你的回答

尼西亚

4

1 回答 1

5

(这是考虑到 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 语法时要小。

于 2014-10-05T14:28:43.927 回答