Spark 仓库 VS Hive 仓库

Spark Warehouse VS Hive Warehouse

Hortonworks 数据平台 HDP 3.0 具有 spark 2.3 和 Hive 3.1,默认情况下 spark 2.3 应用程序(pyspark/spark-sql 等)使用 spark 数据仓库,而 Spark 2.3 使用 Hive Warehouse Connector 与 Apache Hive 集成的方式不同。

integrating-apache-hive-with-apache-spark-hive-warehouse-connector

我可以在 Hive 元存储中看到 2 个默认数据库 (MySQL)。一个指向 Hive 位置,另一个指向 spark 位置。

mysql> SELECT NAME, DB_LOCATION_URI FROM hive.DBS;
+--------+----------------------------------------------------------+
| NAME   | DB_LOCATION_URI                                          |
+--------+----------------------------------------------------------+
| default| hdfs://<hostname>:8020/warehouse/tablespace/managed/hive |
| default| hdfs://<hostname>:8020/apps/spark/warehouse              |
+--------+----------------------------------------------------------+

mysql>

任何人都可以解释一下这两种类型的仓库之间有什么区别,我找不到任何关于这个的文章,我们可以使用 spark 仓库而不是 Hive(我知道 spark 仓库不能通过 Hive 访问,或者有什么办法吗?)。这2个(spark仓库和hive仓库)各有什么优缺点?

从 HDP 3.0 开始,Apache Hive 和 Apache Spark 的目录是分开的,它们使用自己的目录;也就是说,它们是互斥的——Apache Hive 目录只能被 Apache Hive 或这个库访问,而 Apache Spark 目录只能被 Apache Spark 中现有的 API 访问。换句话说,一些功能,如 ACID tables 或 Apache Ranger with Apache Hive table 只能通过 Apache Spark 中的这个库获得。 Hive 中的那些 table 不应在 Apache Spark API 本身中直接访问。

默认情况下,spark 使用 spark 目录,下面的文章解释了如何通过 Spark 访问 Apache Hive table。

Integrating Apache Hive with Apache Spark - Hive Warehouse Connector

Github link 一些额外的细节:

HiveWarehouseConnector - Github

在 HDP 3.1.4 中,您可以在 Spark Warehouse 和 Hive Warehouse 之间切换。 你只需要在 Ambari 中配置它: 服务 -> Spark2 -> 配置 -> 高级 spark2-hive-site-override

默认:

metastore.catalog.default = spark

改为:

metastore.catalog.default = hive

在 Ambari 中重启 Spark2,您可以通过 Pyspark 访问 Hive:

spark.sql('show databases').show()