Prebuilt Spark 2.1.0在启动spark-shell时创建了metastore_db文件夹和derby.log

时间:2017-01-13 11:01:34

标签: apache-spark apache-spark-2.0

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

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

对调试日志的仔细检查表明Spark 2.1.0尝试初始化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?

提前致谢!

3 个答案:

答案 0 :(得分:4)

来自Spark 2.1.0 documentation pages

  

当hive-site.xml未配置时,自动上下文   在当前目录中创建metastore_db并创建一个目录   由spark.sql.warehouse.dir配置,默认为该目录   Spark应用程序所在的当前目录中的spark-warehouse   开始。请注意hive.metastore.warehouse.dir属性   自Spark 2.0.0以来,不推荐使用hive-site.xml。相反,使用   spark.sql.warehouse.dir指定数据库的默认位置   仓库。

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

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

答案 1 :(得分:2)

对于未来的googlers:在每个工作目录中创建metastore_dbderby.log的实际根本原因是derby.system.home的默认值。

可以在spark-defaults.conf中更改此内容,请参阅here

答案 2 :(得分:0)

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

-Dderby.system.home=/tmp/derby

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