web-dev-qa-db-fra.com

Comment se débarrasser de derby.log, metastore_db de Spark Shell

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?

14
Carlos Bribiescas

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

/tmp/derby peut être remplacé par le répertoire de votre choix.

10
hiryu

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"
12
user1314742

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

3
Bill

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

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)
0
kennyut