Apache spark 如何从Spark Shell中删除derby.log、metastore_db

Apache spark 如何从Spark Shell中删除derby.log、metastore_db,apache-spark,derby,Apache Spark,Derby,运行sparkshell时,它会创建一个文件derby.log和一个文件夹metastore\u db。如何配置spark以将其放置在其他位置 对于derby日志,我尝试过使用两个不同的属性,比如sosparkshell--driver memory 10g--conf“-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null”,但spark忽略了它们 有人知道如何摆脱这些或为它们指定默认目录吗?使用hive.metasto

运行
sparkshell
时,它会创建一个文件
derby.log
和一个文件夹
metastore\u db
。如何配置spark以将其放置在其他位置

对于derby日志,我尝试过使用两个不同的属性,比如so
sparkshell--driver memory 10g--conf“-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null”
,但spark忽略了它们


有人知道如何摆脱这些或为它们指定默认目录吗?

使用
hive.metastore.warehouse.dir
属性:

对于derby日志:可能是答案。通常,在工作目录中创建
derby.properties
文件,内容如下:

derby.stream.error.file=/path/to/desired/log/file

在启动spark shell之前,尝试将
derby.system.home
设置为其他目录作为系统属性。Derby将在那里创建新的数据库。此属性的默认值为


参考:

对于spark shell,为了避免使用
metastore_db
目录,并避免在代码中执行此操作(因为上下文/会话已经创建,您不会停止它们并每次使用新配置重新创建它们),您必须在
hive site.xml
文件中设置其位置,并将此文件复制到spark conf目录中。
一个示例
hive site.xml
文件,用于在
/tmp
中确定
metastore_db
的位置(请参阅我的答案):


自Spark 2.0.0以来,
hive.metastore.warehouse.dir
的使用已被弃用, .

正如所暗示的,在每个工作子目录中创建的
metastore\u db
目录和
derby.log
文件的真正罪魁祸首是默认为
derby.system.home
属性

因此,可以通过将以下行添加到
spark defaults.conf
,来指定两者的默认位置:

spark.driver.extraJavaOptions -Dderby.system.home=/tmp/derby

其中,
/tmp/derby
可以由您选择的目录替换。

如果您正在使用Jupyter/Jupyterhub/Jupyterlab,或者只是在python中设置此conf参数,请使用以下方法:

from pyspark import SparkConf, SparkContext

conf = (SparkConf()
    .setMaster("local[*]")
    .set('spark.driver.extraJavaOptions','-Dderby.system.home=/tmp/derby')
   )

sc = SparkContext(conf = conf)

对我来说,设置Spark属性对驱动程序和执行器都不起作用。因此,在搜索此问题时,我最终使用以下选项为我的系统设置属性:

System.setProperty(“derby.System.home”,“D:\\tmp\\derby”)
val spark:SparkSession=SparkSession.builder
.appName(“UT会话”)
.master(“本地[*]”)
.启用HIVESupport
.getOrCreate
[...]

这最终让我摆脱了那些烦人的东西。

你在问题文本中键入了
derby.stream.info.file
。您链接到的问题是配置
derby.stream.error.file
。您实际尝试了哪一个?您可以使用
derby.properties
。这似乎不再有效。使用spark 2.2:(我在新安装的spark 2.2.1上进行了测试,它对我有效。也许这与权限有关?我尝试了
spark.config(“spark.driver.extraJavaOptions”,“-Dderby.system.home=D:\\tmp\\derby”)
使用Spark 2.2.0,但它不起作用。似乎您正在尝试在启动Spark上下文后更改配置。但是,到那时,进行此设置为时已晚……您需要更改
Spark defaults.conf
文件中的Spark默认配置,如上所述……如何在独立环境中完全禁用derby。A lo旧方法(postgres设置+db创建+hive-site.xml似乎不再适用于spark 2.2)
$ spark-shell --conf "spark.driver.extraJavaOptions=-Dderby.stream.error.file=/tmp"
spark.driver.extraJavaOptions -Dderby.system.home=/tmp/derby
from pyspark import SparkConf, SparkContext

conf = (SparkConf()
    .setMaster("local[*]")
    .set('spark.driver.extraJavaOptions','-Dderby.system.home=/tmp/derby')
   )

sc = SparkContext(conf = conf)