1

我刚刚从 Spark 2.0.2 升级到 Spark 2.1.0(通过下载 Hadoop 2.7 及更高版本的预构建版本)。没有安装 Hive。

启动 spark-shell 时,会在启动位置创建metastore_db/文件夹和derby.log文件,以及一堆警告日志(在以前的版本中未打印)。

仔细检查调试日志显示 Spark 2.1.0 尝试初始化 a HiveMetastoreConnection

17/01/13 09:14:44 INFO HiveUtils: Initializing HiveMetastoreConnection version 1.2.1 using Spark classes.

Spark 2.0.2 的类似调试日志不显示任何HiveMetastoreConnection.

这是预期的行为吗?这可能与spark.sql.warehouse.dir现在会话之间共享的静态配置有关吗?由于我没有安装 Hive,如何避免这种情况?

提前致谢!

4

3 回答 3

5

从 Spark 2.1.0文档页面

hive-site.xml未配置时,上下文自动在当前目录创建metastore_db,并创建spark.sql.warehouse.dir配置的目录,默认为Spark应用当前目录下的spark-warehouse目录已启动。请注意,hive-site.xml 中的 hive.metastore.warehouse.dir 属性自 Spark 2.0.0 以来已弃用。相反,使用 spark.sql.warehouse.dir 指定仓库中数据库的默认位置。

由于您没有安装 Hive,因此您将没有 hive-site.xml 配置文件,并且必须默认为当前目录。

如果您不打算HiveContext在 Spark 中使用,您可以从源代码重新安装 Spark 2.1.0,使用 Maven 重新构建它并确保省略-Phive -Phive-thriftserver启用 Hive 支持的标志。

于 2017-01-13T15:53:07.737 回答
5

对于未来的谷歌人:在每个工作目录中创建metastore_dband的实际根本原因是.derby.logderby.system.home

这可以更改spark-defaults.conf,请参见此处

于 2017-05-18T13:12:09.263 回答
0

Spark 1.6 也会发生这种情况。您可以通过添加 Spark 提交额外选项来更改路径:

-Dderby.system.home=/tmp/derby

(或通过 derby.properties,有几种方法可以更改它)。

于 2018-01-16T14:48:42.617 回答