在 HIVE 上插入 Spark-SQL 插件

Posted

技术标签:

【中文标题】在 HIVE 上插入 Spark-SQL 插件【英文标题】:Spark-SQL plug in on HIVE 【发布时间】:2021-07-30 18:02:20 【问题描述】:

HIVE 有一个 Metastore,HIVESERVER2 监听 SQL 请求;在 Metastore 的帮助下,执行查询并将结果传回。 Thrift 框架实际上被定制为 HIVESERVER2。通过这种方式,HIVE 充当服务。通过编程语言,我们可以使用 HIVE 作为数据库。

Spark-SQL 和 HIVE 的关系是:

Spark-SQL 仅使用 HIVE 设置(HDFS 文件系统、HIVE Metastore、Hiveserver2)。当我们调用 /sbin/start-thriftserver2.sh(存在于 spark 安装中)时,我们应该提供 hiveserver2 端口号和主机名。然后通过 spark 的直线,我们实际上可以在 HIVE 中创建、删除和操作表。 API 可以是 Spark-SQL 或 HIVE QL。 如果我们创建一个表/删除一个表,如果我们登录到 HIVE 并检查(比如通过 HIVE beeline 或 HIVE CLI),它将清晰可见。换句话说,通过 Spark 所做的更改可以在 HIVE 表中看到。

我的理解是,Spark 没有像 HIVE 这样的自己的元存储设置。 Spark 只是利用 HIVE 设置,并且简单地通过 Spark SQL API 执行 SQL。

我的理解正确吗?

然后我对 bin/spark-sql.sh 的用法有点困惑(它也存在于 Spark 安装中)。文档说通过这个 SQL shell,我们可以像上面那样创建表(通过 Thrift Server/Beeline)。现在我的问题是:那么spark是如何维护元数据信息的呢?

或者像第一种方法一样,我们可以让 spark-sql CLI 与 HIVE 通信(具体来说:HIVE 的 hiveserver2)吗? 如果是,我们该怎么做?

提前致谢!

【问题讨论】:

【参考方案1】:

我的理解是 Spark 没有像 HIVE 这样的自己的元存储设置

如果未提供 Hive 元存储,Spark 将自行启动 Derby 服务器

我们可以制作 spark-sql CLI 来与 HIVE 通信吗

启动一个外部元存储进程,将hive-site.xml 文件添加到$SPARK_CONF_DIRhive.metastote.uris,或者使用SET SQL 语句来实现同样的目的

【讨论】:

以上是关于在 HIVE 上插入 Spark-SQL 插件的主要内容,如果未能解决你的问题,请参考以下文章

Spark: Spark-sql 读hbase

Spark: Spark-sql 读hbase

Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive

通过spark-sql快速读取hive中的数据

sparkf:spark-sql替换hive查询引擎

Spark-SQL连接Hive