我刚刚从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?
提前致谢!
答案 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_db
和derby.log
的实际根本原因是derby.system.home
的默认值。
可以在spark-defaults.conf
中更改此内容,请参阅here。
答案 2 :(得分:0)
这也发生在Spark 1.6上。您可以通过添加Spark提交额外选项来更改路径:
-Dderby.system.home=/tmp/derby
(或者通过derby.properties,有几种方法可以改变它。)