Lors de l'exécution de spark-Shell
, un fichier derby.log
et un dossier metastore_db
sont créés. Comment configurer spark pour les mettre ailleurs?
Pour derby log, j'ai essayé Se débarrasser de derby.log like so spark-Shell --driver-memory 10g --conf "-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null"
avec quelques propriétés différentes mais spark les ignore.
Est-ce que quelqu'un sait comment se débarrasser de ceux-ci ou spécifier un répertoire par défaut pour eux?
L'utilisation de Hive.metastore.warehouse.dir
est déconseillée depuis Spark 2.0.0, voir la documentation .
Comme l'indique cette réponse , le véritable responsable du répertoire metastore_db
et du fichier derby.log
en cours de création dans chaque sous-répertoire de travail est la propriété derby.system.home
dont la valeur par défaut est .
.
Ainsi, un emplacement par défaut pour les deux peut être spécifié en ajoutant la ligne suivante à spark-defaults.conf
:
spark.driver.extraJavaOptions -Dderby.system.home=/tmp/derby
où /tmp/derby
peut être remplacé par le répertoire de votre choix.
Pour spark-Shell, pour éviter d’avoir le répertoire metastore_db
et le faire dans le code (puisque le contexte/la session est déjà créé et que vous ne les arrêtez pas et ne les recréez pas avec la nouvelle configuration à chaque fois), vous devez définir son emplacement dans le fichier Hive-site.xml
et copiez ce fichier dans le répertoire spark conf.
Un exemple de fichier Hive-site.xml
permettant de localiser metastore_db
dans /tmp
(voir ma réponse ici ):
<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>
Après cela, vous pouvez démarrer votre spark-Shell
comme suit pour vous débarrasser également de derby.log
.
$ spark-Shell --conf "spark.driver.extraJavaOptions=-Dderby.stream.error.file=/tmp"
Essayez de définir derby.system.home
dans un autre répertoire en tant que propriété système avant de lancer l'étincelle Shell. Derby va créer de nouvelles bases de données là-bas. La valeur par défaut de cette propriété est .
Référence: https://db.Apache.org/derby/integrate/plugin_help/properties.html
Utilisez la propriété Hive.metastore.warehouse.dir
. De docs :
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
Pour derby log: Se débarrasser de derby.log pourrait être la solution. En général, créez un fichier derby.properties
dans votre répertoire de travail avec le contenu suivant:
derby.stream.error.file=/path/to/desired/log/file
Si vous utilisez Jupyter/Jupyterhub/Jupyterlab ou si vous définissez ce paramètre de configuration dans python, utilisez ce qui suit:
from pyspark import SparkConf, SparkContext
conf = (SparkConf()
.setMaster("local[*]")
.set('spark.driver.extraJavaOptions','-Dderby.system.home=/tmp/derby')
)
sc = SparkContext(conf = conf)