2016-07-14 5 views
9

Bei der Ausführung spark-shell erstellt es eine Datei derby.log und einen Ordner metastore_db. Wie konfiguriere ich Spark, um diese irgendwo anders zu platzieren?Wie loswerden derby.log, metastore_db von Spark Shell

Für den Derby-Log habe ich versucht Getting rid of derby.log wie so spark-shell --driver-memory 10g --conf "-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null" mit ein paar verschiedenen Eigenschaften, aber Funken ignoriert sie.

Kann jemand diese oder ein Standardverzeichnis für sie loswerden?

+0

Sie haben "derby.stream.info.file" in den Text Ihrer Frage eingegeben. Die Frage, die Sie verlinkt haben, http://stackoverflow.com/questions/1004327/getting-rid-of-derby-log sagt, 'derby.stream.error.file' zu ​​konfigurieren. Welche hast du eigentlich versucht? –

Antwort

5

Die Verwendung der hive.metastore.warehouse.dir ist seit Spark 2.0.0, see the docs veraltet.

Wie this answer angedeutet, für die wahr Schuldige sowohl das metastore_db Verzeichnis und die derby.log Datei in jedem Arbeitsunterverzeichnis erstellt werden, sind die derby.system.home Eigenschaft . säumigen.

Somit ist eine Standardposition für beide, indem Sie die folgende Zeile in spark-defaults.conf angegeben werden können:

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

wo /tmp/derby durch das Verzeichnis Ihrer Wahl ersetzt werden.

+1

Das scheint nicht mehr zu funktionieren. Mit Funke 2.2 :( –

+1

Ich habe auf einer neuen Installation von Spark 2.2.1 getestet und es funktioniert für mich. Vielleicht hat es mit Berechtigungen zu tun? – hiryu

2

Verwenden Sie hive.metastore.warehouse.dir Eigenschaft. From docs:

val spark = SparkSession 
    .builder() 
    .appName("Spark Hive Example") 
    .config("spark.sql.warehouse.dir", warehouseLocation) 
    .enableHiveSupport() 
    .getOrCreate() 

Für Derby log: Getting rid of derby.log könnte die Antwort sein. In der Regel erstellen derby.properties Datei in Arbeitsverzeichnis mit folgendem Inhalt:

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

Haben Sie tatsächlichen Code, um das Derby-Protokoll aufzulösen? –

+0

Sie können 'derby.properties' verwenden. –

10

Für Funken Schale, um zu verhindern das metastore_db Verzeichnis mit und vermeiden Sie es im Code zu tun (da der Kontext/Sitzung bereits erstellt und Sie gewonnen‘ t stoppen Sie sie und erstellen Sie sie jedes Mal mit der neuen Konfiguration neu. Sie müssen den Speicherort in der Datei hive-site.xml festlegen und diese Datei in das Verzeichnis config conf kopieren.
Eine Probe hive-site.xml Datei, um die Lage von metastore_db in /tmp (siehe meine Antwort here) zu machen:

<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> 

Danach können Sie Ihre spark-shell wie folgt beginnen könnte von derby.log auch

$ spark-shell --conf "spark.driver.extraJavaOptions=-Dderby.stream.error.file=/tmp" 
loszuwerden
+0

So deaktivieren Sie Derby vollständig im Standalone-Modus.Viele der alten Methoden (postgres setup + db creation + hive-site.xml scheinen nicht mehr auf spark 2.2 zu funktionieren) – mathtick

Verwandte Themen