【问题标题】:Prebuilt Spark 2.1.0 creates metastore_db folder and derby.log when launching spark-shell预构建 Spark 2.1.0 在启动 spark-shell 时创建 metastore_db 文件夹和 derby.log
【发布时间】:2017-05-28 17:38:56
【问题描述】:

我刚刚从 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,如何避免这种情况?

提前致谢!

【问题讨论】:

    标签: apache-spark apache-spark-2.0


    【解决方案1】:

    来自 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 标志。

    【讨论】:

    • 谢谢,确实是这样。我希望我可以避免从源代码重建,只是为了避免创建这些文件夹,但我没有其他办法。
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

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

    -Dderby.system.home=/tmp/derby
    

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

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 2022-10-18
      • 2017-06-10
      • 2017-06-17
      • 2018-06-10
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多