运行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"
具有几个不同的属性,但火花会忽略它们。
有谁知道如何摆脱这些或为他们指定默认目录?
答案 0 :(得分:12)
对于spark-shell,要避免使用metastore_db
目录并避免在代码中执行此操作(因为已经创建了上下文/会话,并且您不会停止它们并且每次都使用新配置重新创建它们),您必须在hive-site.xml
文件中设置其位置,并将此文件复制到spark conf目录中
一个示例hive-site.xml
文件,用于在metastore_db
中显示/tmp
的位置(请参阅我的回答here):
<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"
答案 1 :(得分:11)
从Spark 2.0.0开始,不推荐使用hive.metastore.warehouse.dir
,
see the docs。
正如this answer暗示的那样,在每个工作子目录中创建的metastore_db
目录和derby.log
文件的真正罪魁祸首是derby.system.home
属性默认为{{{ 1}}。
因此,可以通过将以下行添加到.
来指定两者的默认位置:
spark-defaults.conf
其中spark.driver.extraJavaOptions -Dderby.system.home=/tmp/derby
可以替换为您选择的目录。
答案 2 :(得分:3)
在启动spark shell之前,尝试将derby.system.home
设置为其他目录作为系统属性。 Derby将在那里创建新的数据库。此属性的默认值为.
参考:https://db.apache.org/derby/integrate/plugin_help/properties.html
答案 3 :(得分:2)
使用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
答案 4 :(得分:1)
对我来说,无论是在驱动程序上还是在执行程序上,都无法设置Spark属性。因此,搜索此问题后,我最终使用以下方法为系统设置了属性:
class CreateButton:
def __init__(self,Button_name,Data):
self.Data=Data
self.Button=tk.Button(delscframe.interior, height=1, width=28,
relief=tk.FLAT,
bg='light blue', fg="black",
font="arial 12 bold", text=Button_name,
command=self.OutputText)
self.Button.pack(padx=5, pady=2, side=tk.TOP)
def OutputText(self):
self.Button.config(fg='red',bg='light blue')
那终于使我摆脱了那些烦人的东西。
答案 5 :(得分:0)
如果您使用的是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)