如何从Spark Shell中删除derby.log,metastore_db

时间:2016-07-14 14:40:19

标签: apache-spark derby

运行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"具有几个不同的属性,但火花会忽略它们。

有谁知道如何摆脱这些或为他们指定默认目录?

6 个答案:

答案 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.dirsee 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)