如何从 Spark Shell 中删除 derby.log、metastore_db
How to get rid of derby.log, metastore_db from Spark Shell
当 运行 spark-shell
时,它会创建一个文件 derby.log
和一个文件夹 metastore_db
。我如何配置 spark 以将它们放在其他地方?
对于 derby 日志,我已经尝试 Getting rid of derby.log 像这样 spark-shell --driver-memory 10g --conf "-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null"
有几个不同的属性,但 spark 忽略了它们。
有谁知道如何摆脱这些或为它们指定默认目录?
使用hive.metastore.warehouse.dir
属性。 From docs:
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
对于德比日志:Getting rid of derby.log 可能是答案。通常在 你的工作目录 中创建 derby.properties
文件,内容如下:
derby.stream.error.file=/path/to/desired/log/file
尝试将 derby.system.home
设置为其他目录作为系统 属性,然后再启动 spark shell。 Derby 将在那里创建新的数据库。此 属性 的默认值为 .
参考:https://db.apache.org/derby/integrate/plugin_help/properties.html
对于 spark-shell,避免拥有 metastore_db
目录并避免在代码中执行此操作(因为 context/session 已经创建并且您不会停止它们并且每次都用新的配置重新创建它们),你必须在 hive-site.xml
文件中设置它的位置,并将这个文件复制到 spark conf 目录中。
示例 hive-site.xml
文件,用于在 /tmp
中创建 metastore_db
的位置(参考我的回答 ):
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/tmp/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/tmp/</value>
<description>location of default database for the warehouse</description>
</property>
</configuration>
之后你可以开始你的 spark-shell
如下所示来摆脱 derby.log
$ spark-shell --conf "spark.driver.extraJavaOptions=-Dderby.stream.error.file=/tmp"
自 Spark 2.0.0 以来,不推荐使用 hive.metastore.warehouse.dir
,
see the docs。
正如 所暗示的,在每个工作子目录中创建 metastore_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 session")
.master("local[*]")
.enableHiveSupport
.getOrCreate
[...]
这终于让我摆脱了那些烦人的东西。
当 运行 spark-shell
时,它会创建一个文件 derby.log
和一个文件夹 metastore_db
。我如何配置 spark 以将它们放在其他地方?
对于 derby 日志,我已经尝试 Getting rid of derby.log 像这样 spark-shell --driver-memory 10g --conf "-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null"
有几个不同的属性,但 spark 忽略了它们。
有谁知道如何摆脱这些或为它们指定默认目录?
使用hive.metastore.warehouse.dir
属性。 From docs:
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
对于德比日志:Getting rid of derby.log 可能是答案。通常在 你的工作目录 中创建 derby.properties
文件,内容如下:
derby.stream.error.file=/path/to/desired/log/file
尝试将 derby.system.home
设置为其他目录作为系统 属性,然后再启动 spark shell。 Derby 将在那里创建新的数据库。此 属性 的默认值为 .
参考:https://db.apache.org/derby/integrate/plugin_help/properties.html
对于 spark-shell,避免拥有 metastore_db
目录并避免在代码中执行此操作(因为 context/session 已经创建并且您不会停止它们并且每次都用新的配置重新创建它们),你必须在 hive-site.xml
文件中设置它的位置,并将这个文件复制到 spark conf 目录中。
示例 hive-site.xml
文件,用于在 /tmp
中创建 metastore_db
的位置(参考我的回答
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/tmp/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/tmp/</value>
<description>location of default database for the warehouse</description>
</property>
</configuration>
之后你可以开始你的 spark-shell
如下所示来摆脱 derby.log
$ spark-shell --conf "spark.driver.extraJavaOptions=-Dderby.stream.error.file=/tmp"
自 Spark 2.0.0 以来,不推荐使用 hive.metastore.warehouse.dir
,
see the docs。
正如 metastore_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 session")
.master("local[*]")
.enableHiveSupport
.getOrCreate
[...]
这终于让我摆脱了那些烦人的东西。