Configuration - Datachain Core

Cette page présente le paramétrage des images du module Datachain Core.

Les images sont paramétrables via les fichiers *.env de docker ou des variables d’environnement.

Les images s’exécutent sans privilèges root pour l’application et sont compatibles avec OpenShift : voir Exécution sans privilèges (OpenShift).

Vue d’ensemble

Datachain Core est livré sous la forme de plusieurs images, chacune portant un service.

Service Image Ports Rôle

web

dc/web_ui

8080 (application), 9080 (monitoring)

Serveur Web : met à disposition l’application Datachain et relaie les appels vers le backend

backend

dc/backend

8089 (API), 9089 (monitoring)

Modules métiers et API de l’application

spark

dc/spark

8090 (API), 9090 (monitoring), 4040 (interface du driver Spark)

Module de calcul (driver Spark embarqué), contexte de calcul distribué

pg-migration

dc/pg_migration

Aucun

Exécution des patchs de mise à jour de la base de données PostgreSQL (une seule exécution)

Les échanges entre les services sont les suivants :

  • les utilisateurs accèdent à l’application via le service web, généralement derrière un reverse proxy ;

  • le service web relaie les appels vers le backend ;

  • le backend délègue les calculs sur les données à un ou plusieurs contextes Spark ;

  • le service de migration met à jour la base PostgreSQL avant que le backend ne l’utilise.

Datachain Core utilise par ailleurs :

  • une base PostgreSQL, portée par l’image dc/dc_pg ;

  • un serveur Valkey (compatible Redis), pour le cache et les files d’attente.

Ces composants sont décrits dans Gestion des données. Les modules Console, Marketplace, Dc-Maestro et le SSO sont décrits dans leurs pages dédiées (voir Configuration).

Module Web - Image dc/web_ui

Description de l’image

Description

Contient le serveur Web qui mets à dispositions les pages HTML de l’application DataChain

Taille

~175Mo

Briques techniques

Server HTTP Nginx (image Alpine sans privilèges)

Utilisateur

nginx (uid 101, groupe principal root (gid 0)). Le conteneur ne s’exécute pas en root. L’image accepte aussi un uid quelconque imposé au démarrage (OpenShift) : cet uid appartient au groupe root (gid 0). Voir Exécution sans privilèges (OpenShift).

Volumes

Pas de volumes

Logs

Logs Nginx (Access Log) sortie standard docker

Urls

Port Url Utilité

8080

/

Accès à l’application Datachain Core

9080

/stub_status

Accès aux métriques d’utilisation de Nginx (monitoring)

L’image écoute sur le port 8080 (et non plus 80) : le reverse proxy, le mappage de ports ou le service qui y accèdent doivent viser ce port. Le port de monitoring est passé de 8080 à 9080.

Variables d’environnement

Variable Valeur par défaut Description

PROXY_PASS_BACKEND

dc-backend:8089

Url interne du backend : cette variable ne devrait pas être modifiée, hormis en cas de changement de nom dns du backend, d’un point de vue réseau docker

PUBLIC_IP_PORT_443

localhost:443

Utilisée uniquement dans le cas de déploiement sans reverse proxy, ce qui est très rarement le cas dans une infrastructure de production

DOC_VERSION

Correspond à la version du serveur - ne devrait pas être modifiée, sauf cas particulier communiqué par Adobis

DOC_SERVER_URL

https://docs.adobisdc.fr

Url public du serveur de documentation Adobis

CONTENT_SECURITY_POLICY

default-src * data: blob: filesystem: about: ws: wss: 'unsafe-inline' 'unsafe-eval';script-src * data: blob: 'unsafe-inline' 'unsafe-eval'; connect-src * data: blob: 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src * data: blob: ; style-src * data: blob: 'unsafe-inline';font-src * data: blob: 'unsafe-inline';frame-ancestors * data: blob:;

Configuration de l’entête de sécurité CSP http

Module Backend - Image dc/backend

Description de l’image

Description

Contient les modules métiers et API de l’application

Taille

~570Mo

Briques techniques

Application Java/Spring Boot/Jetty

Utilisateur

Le conteneur démarre en root (superviseur de processus), puis l’application s’exécute avec dc (uid 38330, groupe principal root (gid 0), groupe secondaire datachain (gid 38330)). Si un uid est imposé au démarrage (OpenShift, option --user de Docker), tout le conteneur s’exécute avec cet uid, qui doit appartenir au groupe root (gid 0). Les répertoires de l’hôte montés dans les volumes doivent être accessibles en écriture à l’uid 38330 ou au groupe 0. Voir Exécution sans privilèges (OpenShift).

Volumes

Chemin Utilité Obligatoire

/logs

Répertoire dans lequel le serveur écrit ses logs

Non, mais il est conseillé

Logs

Plusieurs types de logs, situées sous /logs/datachain/backend

Log Utilité

dc-backend.log

Logs applicatifs : essentiellement utilisées pour le débug.

Un nouveau fichier par jour, compression lors du remplacement, et plusieurs fichiers par jour si taille courante supérieure à 200Mo.

Premier incrément à 0. Taille totale Max de tous les fichiers limitée à 10GO. Durée de rétention : 30j.

access.log

Logs d’accès

management.log

Logs de management : peuvent être ignorés

gc.log

Logs du ramasse-miettes (GC) de la JVM. Non activés par défaut : la ligne de commande par défaut du conteneur ne contient aucune option de log GC. Pour les activer, ajouter les options à la variable d’environnement JAVA_OPTIONS, par exemple -Xlog:gc*:file=/logs/datachain/dc_core_backend/gc.log:time,uptime:filecount=5,filesize=20m.

Attention : définir JAVA_OPTIONS remplace les options de heap par défaut du conteneur (-Xms, -Xmx) : les reprendre en plus des options GC. L’option -Duser.home est en revanche toujours ajoutée par le conteneur, après JAVA_OPTIONS.

Urls

Port Url Utilité

8089

/

Post standard d’écoute du backend

9089

/actuator-backend/*

Accès aux informations de Spring actuator, par exemple sur /actuator-backend/prometheus si la configuration du module permet d’activer les métriques :

  • management.endpoints.web.base-path=/actuator-backend

  • management.metrics.export.prometheus.enabled=true

Variables d’environnement

Variable Valeur par défaut Description

DC_PG_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de surcharger spring.datasource.password

DC_PG_EXPOSE_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de surcharger spring.expose-datasource.password

DC_PG_JOB_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de surcharger spring.job-datasource.password. Si non surchargé, mais qu’il y a la valeur DC_PG_PASSWORD_FILE, alors DC_PG_PASSWORD_FILE sera utilisé

SPARK_SECURITY_USER_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de surcharger dc.app.api.spark.security.user.password (identique sur backend et spark)

KEYCLOAK_INTERNAL_CLIENT_SECRET_FILE

Nom du fichier de type "docker secret" qui permet de surcharger dc.keycloak.internal-client-secret

Fichier de configuration

################################################
##   DATACHAIN Backend CONFIGURATION FILE    ##
################################################
# DataChain Backend configuration file example.
# Exemple de fichier de configuration du backend DataChain.
######################################### Data Properties ##########################################
####################################################
## Main Database Configuration                    ##
## Configuration de la base de données principale ##
####################################################
## For detailed configuration, see :
## Pour la configuration détaillés, voir :
### https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/production-ready-features.html
# database ip or dns address. Default value 'localhost
# Adresse ip ou dns de la base de données. Valeur par défaut 'localhost'
dc.app.db.host=localhost
# JDBC URL of the database.
# Chaîne de connexion JDBC.
# By default, the database name is 'adobis' and the port is '5432.
# Par défaut, le nom de la base de données est "adobis" et le port est "5432".
spring.datasource.url=jdbc:postgresql://${dc.app.db.host}:5432/adobis?prepareThreshold=0&preparedStatementCacheQueries=0
# Login username of the database. Default value 'postgres'
# Nom d'utilisateur de la base de données.
spring.datasource.username=postgres
# Login password of the database.
# Mot de passe de la base de données.
spring.datasource.password=changeIt
## pool configuration ##
## For detailed pool configuration, see :
## Pour la configuration ## Pour la configuration du pool détaillé, voir : détaillés, voir :
### https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby
# This property controls the maximum number of milliseconds that a client (that's you) will wait for a connection from the pool.
# Cette propriété contrôle le nombre maximum de millisecondes pendant lesquelles un client (c'est-à-dire vous) attendra une connexion depuis le pool.
spring.datasource.hikari.connectionTimeout=30000
# This property controls the maximum size that the pool is allowed to reach.
# Cette propriété contrôle la taille maximale que le pool est autorisé à atteindre.
spring.datasource.hikari.maximumPoolSize=20
# This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool.
# Cette propriété contrôle le nombre minimum de connexions inactives que HikariCP essaie de maintenir dans le pool.
spring.datasource.hikari.minimumIdle=20
# This property controls the maximum lifetime of a connection in the pool.
# Cette propriété contrôle la durée de vie maximale d'une connexion dans le pool.
spring.datasource.hikari.maxLifetime=600000
# This property controls how frequently HikariCP will attempt to keep a connection alive, in order to prevent it from being timed out by the database or network infrastructure.
# Cette propriété contrôle la fréquence à laquelle HikariCP tentera de maintenir une connexion active, afin d'éviter qu'elle ne soit interrompue par la base de données ou l'infrastructure réseau.
spring.datasource.hikari.keepaliveTime=60000
# This property controls the pool name.
# Cette propriété contrôle le nom du pool.
spring.datasource.hikari.poolName=MainDatasourcePool
# Whether to enable logging of SQL statements.
# Paramètre gérant l’affichage du SQL de la dataSource JDBC dans les logs.
spring.jpa.show-sql=false
# Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the thread for the entire processing of the request.
# Enregistrez OpenEntityManagerInViewInterceptor. Lie un EntityManager JPA au thread pour l'ensemble du traitement de la demande.
spring.jpa.open-in-view=false
## Hibernate configuration ##
## For detailed Hibernate configuration, see :
## Pour la configuration ## Pour la configuration détaillés, voir : détaillés, voir :
### https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html
# Defines the query timeout, in milliseconds.
# Définit le délai d'expiration de la requête, en millisecondes.
spring.jpa.properties.javax.persistence.query.timeout=30000
# If enabled, Hibernate will collect statistics useful for performance tuning.
# Si activé, Hibernate collectera des statistiques utiles pour le réglage des performances.
spring.jpa.properties.hibernate.generate_statistics=false
# Disable/Enable the second level cache
# Désactiver/Activer le cache de second niveau
spring.jpa.properties.hibernate.cache.use_second_level_cache=false
# Controls the maximum number of statements Hibernate will batch together before asking the driver to execute the batch. Zero or a negative number disables this feature.
# Contrôle le nombre maximum d'instructions qu'Hibernate regroupera avant de demander au pilote d'exécuter le lot. Zéro ou un nombre négatif désactive cette fonction.
spring.jpa.properties.hibernate.jdbc.batch_size=2000
# Forces Hibernate to order inserts to allow for more batching to be used.
# Force Hibernate à commander des insertions pour permettre l'utilisation de plus de lots.
spring.jpa.properties.hibernate.order_inserts=true
# Forces Hibernate to order SQL updates by the entity type and the primary key value of the items being updated.
#Force Hibernate à trier les mises à jour SQL par le type d'entité et la valeur de la clé primaire des éléments mis à jour.
spring.jpa.properties.hibernate.order_updates=true
# Defines the Hibernate-specific FlushMode to use.
# Définit le FlushMode spécifique à Hibernate à utiliser
spring.jpa.properties.org.hibernate.flushMode=COMMIT
# Should versioned entities be included in batching?
# Les entités versionnées doivent-elles être incluses dans le traitement par lot ?
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true
# Should we not use contextual LOB creation ?
# Ne devrions-nous pas utiliser la création contextuelle de LOB ?
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
#########################################################################
###################################
## Expose Database Configuration ##
###################################
### See Main Database Configuration.
### Configuration de la base de données principale.
# Standard configuration #
spring.expose-datasource.dbtype=pgSql
spring.expose-datasource.host=localhost
spring.expose-datasource.port=5432
spring.expose-datasource.database=expose
spring.expose-datasource.schema=public
spring.expose-datasource.username=postgres
spring.expose-datasource.password=changeIt
spring.expose-datasource.url=jdbc:postgresql://${spring.expose-datasource.host}:${spring.expose-datasource.port}/${spring.expose-datasource.database}
### See Main Database Configuration -  Pool configuration.
### Configuration de la base de données principale -  Pool configuration.
# Pool configuration #
spring.expose-datasource.hikari.connectionTimeout=30000
spring.expose-datasource.hikari.maximumPoolSize=20
spring.expose-datasource.hikari.minimumIdle=20
spring.expose-datasource.hikari.maxLifetime=600000
spring.expose-datasource.hikari.keepaliveTime=60000
spring.expose-datasource.hikari.poolName=ExposeDatasourcePool
###################################
## Job Database Configuration ##
###################################
### See Main Database Configuration.
### Configuration de la base de données principale.
# Standard configuration #
spring.job-datasource.host=${dc.app.db.host}
spring.job-datasource.port=5432
spring.job-datasource.database=adobis
spring.job-datasource.schema=job
spring.job-datasource.username=${spring.datasource.username}
spring.job-datasource.password=${spring.datasource.password}
spring.job-datasource.url=jdbc:postgresql://${spring.job-datasource.host}:${spring.job-datasource.port}/${spring.job-datasource.database}
### See Main Database Configuration -  Pool configuration.
### Configuration de la base de données principale -  Pool configuration.
# Pool configuration #
spring.job-datasource.hikari.connectionTimeout=30000
spring.job-datasource.hikari.maximumPoolSize=10
spring.job-datasource.hikari.minimumIdle=10
spring.job-datasource.hikari.maxLifetime=600000
spring.job-datasource.hikari.keepaliveTime=60000
spring.job-datasource.hikari.poolName=JobDatasourcePool
######################################### Server Properties ########################################
###############################
## HTTP server Configuration ##
###############################
## For detailed configuration, see :
## Pour la configuration détaillés, voir :
### https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/production-ready-features.html
# Server HTTP port.
# Port HTTP du serveur.
server.port=8089
## see https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-graceful-shutdown
server.shutdown=graceful

# Session tracking modes. par cookie.
# Modes de suivi de session. par cookie.
server.servlet.session.tracking-modes=COOKIE
server.servlet.session.cookie.name=dcCoreSid
server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.same-site=lax

# Secure cookie. SHould be true when https, false if http.
# Cookie securisé : devrait être positionné à true pour site sécurisé, false si http.
server.servlet.session.cookie.secure=true

# Session timeout: in seconds (s) default unit, in minutes (m), in hours (h).
# Gestion du timeout de session en heure (h) ou minutes (m) ou secondes (s) unité par défaut.
server.servlet.session.timeout=8h

# max-age of cookie : should be same as session timeout.
# durée du cookie de session : devrait être à la même valeur que la session
server.servlet.session.cookie.max-age=${server.servlet.session.timeout}

# Context path of the application.
# Chemin de contexte de l'application.
server.servlet.context-path=/
# Whether response compression is enabled.
# Indique si la compression des réponses est activée.
server.compression.enabled=true
# Comma-separated list of MIME types that should be compressed.
# Liste séparée par des virgules des types MIME qui doivent être compressés.
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/csv,application/octet-stream
# Minimum "Content-Length" value that is required for compression to be performed.
# Valeur "Content-Length" minimale requise pour que la compression soit effectuée.
server.compression.min-response-size=2KB
# Time that the connection can be idle before it is closed.
# Temps pendant lequel la connexion peut être inactive avant d'être fermée.
server.jetty.connection-idle-timeout=10000s
server.jetty.accesslog.enabled=true
server.jetty.accesslog.custom-format=%{client}a - %u %t "%r" %s %O (%{ms}T ms)
server.jetty.accesslog.filename=${DC_ROOT_LOG_DIRECTORY:/tmp/log}${DC_LOG_DIRECTORY:/datachain/dc_core_backend}/access_yyyy_MM_dd.log
server.jetty.accesslog.file-date-format=yyyy_MM_dd
server.jetty.accesslog.retention-period=30

### Web properties ###
# Max file size.
# Taille maximale du fichier.
spring.servlet.multipart.max-file-size=10000MB
# Max request size.
# Taille maximale de la requête.
spring.servlet.multipart.max-request-size=10000MB
# Maximum size of data buffers used in file upload..
# Taille maximale des tampons de données utilisés dans le téléchargement de fichiers.
dc.app.http.upload.chunk-size=32768
####################################### Actuator properties ########################################
##############################
## Monitoring avec Actuator ##
##############################
## For detailed configuration, see :
## Pour la configuration détaillés, voir :
## https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/production-ready-features.html
## Spring actuator configuration.
## Configuration de Spring actuator.
management.endpoint.shutdown.enabled=false
management.server.port=9089
management.endpoints.web.base-path=/actuator
management.server.address=127.0.0.1
management.endpoints.web.exposure.include=health,prometheus
management.metrics.export.prometheus.enabled=false
management.health.ldap.enabled=false
######################################### Core properties ##########################################
## For detailed configuration, see :
## Pour la configuration détaillés, voir :
## https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/production-ready-features.html
# Expose management beans to the JMX domain.
# Exposer les beans de gestion au domaine JMX
spring.jmx.enabled=false
######################################### Log properties ###########################################
###############################
## Log & Trace Configuration ##
###############################
# Trace
# data profiling activation switch (calculation and log of service execution time).
# Interrupteur d’activation du profilage des données (calcul et log du temps d’exécution des services).
dc.app.log.aspect.enable=false
# Http traceability activation switch
# Interrupteur d’activation de la traçabilité http
logbook.filter.enabled=false
# Http traceability level
# Niveau de traçabilité http
logbook.write.level=INFO
# Exclude certain URLs
# Exclure certaines URL
logbook.exclude=/oauth/token/**
####################################### Security properties ########################################
############################
## keycloak configuration ##
############################
## For detailed configuration, see :
## Pour la configuration détaillés, voir :
## https://www.keycloak.org/docs/20.0.3/securing_apps/#_spring_boot_adapter

# Client inactivity max delay in minutes
# Délai maximal d'inactivité du client en minutes
dc.app.backend.security.inactivity-max-delay=2400
########################################## Spark properties ########################################
#########################
## Spark configuration ##
#########################
# Spark
# The user/password used by backend to communicate with DATACHAIN SPARK
# Le nom d'utilisateur/mot de passe utilisé par le backend pour communiquer avec DATACHAIN SPARK
dc.app.api.spark.security.user.name=backend
dc.app.api.spark.security.user.password=70171933-e656-4183-9955-bfd0354d2250
#Spark rest request timeout
# The connection timeout (in milliseconds) for Spark REST requests.
# Le temps d'attente de connexion (en millisecondes) pour les requêtes Spark REST.
dc.api.spark.request-connection-timeout=10000
#The reading timeout (in milliseconds) for Spark REST requests.
# Le temps d'attente de lecture (en millisecondes) pour les requêtes Spark REST.
dc.api.spark.request-reading-timeout=60000
####################################### Cache properties ###########################################
########################
## Cache Configuration ##
########################
# Path to ehcache the configuration file
# Chemin pour mettre en cache le fichier de configuration
dc.app.ehcahce.configuration=
################################## Internationalization properties #################################
########################
##         i18n       ##
########################
# This property specifies the base name for the message resource bundles used for internationalization.
# Cette propriété spécifie le nom de base des fichiers de ressources de message utilisés pour l'internationalisation.
spring.messages.basename=i18n/common/jobtype,i18n/common/messages,i18n/common/validations,i18n/gd/autodoc,i18n/gd/exporttemplate,i18n/gd/messages,i18n/gd/datalink,i18n/gd/validations,i18n/hd/messages,i18n/hd/validations
# This property specifies whether the system locale should be used as a fallback for messages that are not found in the message resource bundles.
# Cette propriété spécifie si la locale système doit être utilisée comme solution de secours pour les messages qui ne sont pas trouvés dans les fichiers de ressources de message.
spring.messages.fallback-to-system-locale=false
######################################## Misc Configuration ########################################
##########################
## Web-ui configuration ##
##########################
# Network
# Cette propriété spécifie l'URL de l'interface web.
dc.app.url.web-ui=http://localhost:4200
# Cette propriété spécifie l'URL interne de l'interface web.
dc.app.url.internal-web-ui-url=http://localhost:4200
##############################################################################
## Configuration des échanges de message entre backend et Spark via Redis   ##
## Configuration for message exchanges between backend and spark via redis  ##
##############################################################################

## Configuration pour les échanges de message entre backend et spark via redis
## Url de Redis
## Redis Url
# spring.redis.host=dc-redis
# spring.redis.database=0
# spring.redis.port=6379
# spring.redis.timeout=60000

dc.app.notification.urls=redis://${spring.redis.host}:${spring.redis.port}

# The prefixes are in case one day we make multiple DataChain work on the same
# Les prefixes sont pour le cas ou un jour, on fait travailler plusieurs DataChain sur la même
#
# Redis infrastructure and to ensure that we do not overwrite the queue of another application if
# infra Redis et pour permettre de s'assurer ne pas écraser la file d'une autre application si
#
# Redis is shared with other applications
# Redis est partagé avec d'autres applications
dc.app.session.namespace=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:dc_core_sessions
dc.app.notification.job.queue.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.job.queue
dc.app.notification.event.job.queue.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.event.job.queue
dc.app.notification.cancel.job.topic.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.cancel.job.topic
dc.app.notification.event.job.topic.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.event.job.topic
dc.app.notification.cache.job.result.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.cache.job.result
dc.app.notification.event.heart.beat.name.prefix=datachain:${dc.app.module.plateform-id}:${dc.app.module.instance-id}:notification.event.heart.beat

# Cron to deeply clean the cache
# Cron de nettoyage en profondeur du cache
dc.app.cron.clean.cache=0 0 1 * * ?
# Cron for clearing job details by setting requests to null. The default schedule is set to run at 1:30 AM every Sunday (0 30 1 * * SUN).
# Cron pour effacer les détails des emplois en définissant les demandes comme nulles. L'horaire par défaut est programmé pour s'exécuter à 1 h 30 chaque dimanche (0 30 1 * * SUN).
dc.app.cron.clean.job.request=0 30 1 * * SUN
# Threshold for data cleaning in days. Default 60 days
# Seuil de nettoyage des données en jours. Par défaut, 60 jours.
dc.app.cron.clean.job.request.threshold=60
# Short cache duration in second (default one hour)
# Durée du cache court en second (une heure par défaut)
dc.app.short.job.cache.duration.minutes=60
# Long cache duration in minutes (default one day)
# Durée du cache long en minutes (une journée par défaut)
dc.app.long.job.cache.duration.minutes=1440
###########################################
## Exposure API configuration            ##
## Configuration de l'API d'exposition   ##
###########################################
# Configuration of the maximum number of elements for the exposed API.
# By default at 100000, can be overloaded with potential performance risk.
# Configuration du nombre max d'éléments pour l'api d'exposition
# Par défaut à 100000, peut être surchargé avec risque potentiel sur les performances
dc.app.expose.api.max-results-number=100000
dc.app.expose.api.default-results-number=1000
################################################
## Data Encryption configuration              ##
## Configuration du chiffrement des données   ##
################################################
# This property specifies whether exported project files should be encrypted (true by default).
# If false a .zip file will be returned
# Cette propriété spécifie si les fichiers de projet exportés doivent être chiffrés (true par défaut).
# Si false un fichier .zip sera renvoyé
dc.project.export.zip.cipher=true
# Cipher key (If changed, all the connectors password must be revalidate)
# The key is optional. If set it must be exactly 16 characters
# Must be the same as spark
# Cette propriété spécifie la clé de chiffrement utilisée pour le backend et Spark. (doit contenir exactement 16 caractères).
# Si cette clé est modifiée, tous les mots de passe des connecteurs doivent être validés à nouveau.
# Doit être le même que spark
dc.app.backend.cipher.key=
################################################
## Data DCRepository configuration              ##
## Configuration du dépôt de données          ##
################################################
# This property specifies the maximum number of headers allowed for the repository in the application. (2000 by default)
# Cette propriété spécifie le nombre maximum d'en-têtes autorisés pour le dépôt dans l'application. (2000 par défaut)
dc.app.repository.headers.max.number=2000
################################################
##                         Date              ##
################################################
# Default timezone setting for dates
# This parameter allows you to set the default timezone for date handling in front end date pickers (DataBlocks/Sources filters and centering zones).
# Paramètre de fuseau horaire par défaut pour les dates
# Ce paramètre vous permet de définir le fuseau horaire par défaut pour la gestion des dates dans les sélecteurs de date (Filters de DataBlocks/Sources et zones de centrage) côté frontend."
dc.app.date.timezone=
# Default timezone setting for dates in %date variables
# (for example when choosing file export name in Datablock export)
# Paramètre de fuseau horaire par défaut pour les dates utilisées dans les expressions %date
# (par exemple lors du choix du nom de fichier pour un export datablock
dc.app.date.sl.timezone=UTC
##########################
## SMTP Configuration ##
##########################
# You can define STMP configuration vith datachain admin IHM or with this file
# La configuration SMTP peut-être définie dans ce fichier ou via l'interface web de datachain.
# choice between IHM(in database configuration) or via configuration file required value : "db" or "file"
# choix de configuration entre IHM (configuration en base de donnée) ou fichier de configuration - obligatoire : "ihmdb" ou "file"
dc.app.smtp.config=ihmdb
#dc.app.smtp.config=file
# Les autre paramètres ne sont nécessaires que si dc.app.mail.config=file
# Please fill others parameters only if dc.app.mail.config=file
# serveur smtp : obligatoire
# smtp server : required
dc.app.smtp.host=
# port smtp (465 par défaut)
# smtp port (default 465)
dc.app.smtp.port=465
# Authentification smtp (false par défaut)
# smtp authentication (default false )
dc.app.smtp.auth=false
# Utilisateur pour Authentification
# authentication username
dc.app.smtp.user=
# Mot de passe pour Authentification
# authentication password
dc.app.smtp.password=
# Utilisateur emetteur des messages (par défaut : dc.datachain@datachain.fr)
# mail sender (default : dc.datachain@datachain.fr)
dc.app.smtp.sender=dc.datachain@datachain.fr
# nom d'hote smtp de confiance
# trusted host name
dc.app.smtp.ssl.trust=*
# utiliser ssl pour les échanges smtp
# Use ssl when using smtp
dc.app.smtp.ssl.enable=true
# utiliser ssl pour les échanges smtp
# Use ssl when using smtp
dc.app.smtp.ssl.protocols=TLSv1.2
# utiliser starttls pour les échanges smtp
# Use starttls when using smtp
dc.app.smtp.starttls.enable=true
# rendre starttls obligatoire (si oui, une erreur aura lieu si l'échange starttls ne peut avoir lieu)
# is starttls mandatory
dc.app.smtp.starttls.required=false
##########################
## SECURITY             ##
##########################
## Enable datachain tokens for api call
## Activation de l'authentification par token pour les appels API
dc.app.security.auth.api-token.enable=true

## Database cleaning of last users login
## Cron de nettoyage des dernières dates de logins utilisateurs
#dc.app.module.user.last-login-cleaner.cron=0 5 22 * * ?

#################################################
## Console Exchange configuration              ##
## Configuration des échanges avec la console  ##
#################################################

# Plateform code modify if multiple plateforme sharing same redis
# code de la plateforme, à modifier si plusieurs plateformes partagent le même redis
dc.app.module.plateform-id=default

# Module code
# code du module selon la topology
dc.app.module.instance-id=DATACHAIN_CORE

# private console url
# Url privée de la console
#dc.app.module.console.url=http://dc-console:8093

# Authentication token for module exchanges
# token d'authentification pour les appels à la console
# dc.app.module.console.api-key=****

## Event incremental synchronisation with console configuration (unit : seconds)
## five seconds after start, then every 3 minutes.
## Cron de synchronisation des évènements consoles en second
## 5 secondes après redémarrage, puis toutes les trois minutes.
dc.app.module.console.sync.events.incremental.cron=-
dc.app.module.console.sync.events.incremental.initial-delay=5
dc.app.module.console.sync.events.incremental.fixed-delay=180

## Event full synchronisation with console configuration (unit : seconds)
## Use it if there are problems with incremental event synchronization.
## Cron de synchronisation de tous les évènements consoles en second
## A n'activer qu'une fois par jour maximum si nécessaire, et
## en dehors des heures d'utilisations intenses, non actif.
# dc.app.module.console.sync.events.full.cron=-
# dc.app.module.console.sync.events.full.initial-delay=99999d
# dc.app.module.console.sync.events.full.fixed-delay=99999d

Principaux paramètres

Paramètre Valeur par défaut Description

dc.app.db.host

localhost

adresse ip ou dns de la base de données

spring.datasource.url

jdbc:postgresql://${dc.app.db.host}:5433/adobis?prepareThreshold=0&preparedStatementCacheQueries=0

chaîne de connexion JDBC

spring.datasource.username

**

nom d’utilisateur de la connexion JDBC

spring.datasource.password

**

mot de passe de la connexion JDBC

spring.datasource.jmx-enabled

false

interrupteur d’activation de la jmx pour la dataSource JDBC

spring.jpa.show-sql

false

paramètre gérant l’affichage du SQL de la dataSource JDBC dans les logs

server.port

8089

port http

server.compression.enabled

true

interrupteur d’activation de la compression http

server.compression.mime-types

application/json,application/xml,text/html,text/xml,text/plain

mime-types à compresser

server.compression.min-response-size

2KB

(en byte) compresser à partir de

spring.servlet.multipart.max-file-size

10000MB

taille maximale d’un fichier transmis par http

spring.servlet.multipart.max-request-size

10000MB

taille maximale d’une requête http

dc.app.http.upload.chunk-size

32768

taille maximale en bytes d’un tronçon de fichier transmis par http

spring.jmx.enabled

false

interrupteur d’activation jmx pour spring

management.endpoint.shutdown.enabled

true

interrupteur d’activation du service shutdown

management.server.port

9089

port http du service actuator

management.server.address

127.0.0.1

adresse réseau à laquelle les endpoints actuator doivent se lier

dc.app.backend.user.username

**

utilisateur system à créer au démarrage du service backend , utilisé par le(s) contexte(s) spark

dc.app.backend.user.password

**

password de l’utilisateur system à créer au démarrage du service backend , utilisé par le(s) contexte(s) spark

dc.app.backend.security.oauth.client.id

**

client id oauth2

dc.app.backend.security.oauth.client.secret

**

client secret oauth2

dc.app.backend.security.login.failure.retry-max-nbr

3

nombre de tentatives d’authentification maximum

dc.app.backend.security.login.failure.retry-delay

1

durée en minute du blockage du service authentification après un dépassement du dc.app.backend.security.login.failure.retry-max-nbr

dc.app.backend.security.token.validity

240

durée en minute de la validité d’une authentification

dc.app.backend.security.password-validity-delay

90

durée en jour de la validité du password

dc.app.backend.security.inactivity-max-delay

3

durée en minute maximum de l’inactivité ihm, une fois dépassé l’utilisateur est automatiquement déconnecté

dc.app.backend.security.authentication.2fa.active

false

interrupteur d’activation de l’authentification à double facteur

dc.app.backend.security.authentication.2fa.code-expiration

5

durée en minute maximum de la validité du jeton 2fa

logbook.filter.enabled

false

interrupteur d’activation de la traçabilité http

logbook.write.level

INFO

niveau de traçabilité http

dc.app.log.aspect.enable

false

interrupteur d’activation du profilage des données (calcul et log du temps d’exécution des services)

dc.app.url.web-ui

http://localhost

adresse web-ui public

dc.app.api.spark

http://localhost:8090

liste des adresses "context" spark (séparées par des virgules)

dc.app.api.spark.security.user.name

**

liste des logins "context" spark (séparées par des virgules)

dc.app.api.spark.security.user.password

**

liste des mots de passe "context" spark (séparées par des virgules)

dc.api.spark.shared-file-system

false

indiquer si les différents "context" spark partagent le même system de fichier

dc.api.spark.request-connection-timeout

10000

Temps en milliseconde de la connection-timeout avec un "context" spark

dc.api.spark.request-reading-timeout

10000

Temps en milliseconde de la reading-timeout avec un "context" spark

dc.app.ehcahce.configuration

redéfinir l’emplacement du fichier de configuration ehcache

Module Spark - Image dc/spark

Description de l’image

Description

Porte le module de calcul (driver spark embarqué) qui est le contexte de calcul distribué. Ce module peut s’interfacer avec un cluster Spark (non livré avec la solution).

L’image exécute deux processus :

* le companion : API du module (échanges avec le backend, notifications) ; * le job Spark : driver Spark embarqué, qui exécute les calculs.

Taille

~1Go

Briques techniques

Applications Java/Spring Boot/Spark

Utilisateur

Le conteneur démarre en root (superviseur de processus), puis l’application s’exécute avec dc (uid 38330, groupe principal root (gid 0), groupe secondaire datachain (gid 38330)). Si un uid est imposé au démarrage (OpenShift, option --user de Docker), tout le conteneur s’exécute avec cet uid, qui doit appartenir au groupe root (gid 0). Les répertoires de l’hôte montés dans les volumes doivent être accessibles en écriture à l’uid 38330 ou au groupe 0. Voir Exécution sans privilèges (OpenShift).

Volumes

Chemin Utilité Obligatoire

/data

Dans le cas ou le stockage HDFS est un répertoire local à la machine, ce volume est obligatoire. Il est inutile si on utilise un cluster HDFS.

Non (voir ci-contre)

/logs

Répertoire dans lequel le serveur écrit ses logs

Non, mais il est conseillé

/java_cert_import

Répertoire dans lequel déposer les certificats qui seront accédés par Datachain via les connecteurs en https. Voir Certificats applicatifs.

Non, si aucun connecteur en HTTPS prévu.

Logs

Plusieurs types de logs, situées sous /logs/datachain/spark

Log Utilité

dc-spark.log

Logs applicatifs : essentiellement utilisées pour le débug.

Un nouveau fichier par jour, compression lors du remplacement, et plusieurs fichiers par jour si taille courante supérieure à 200Mo.

Premier incrément à 0. Taille totale Max de tous les fichiers limitée à 10GO. Durée de rétention : 30j.

access.log

Logs d’accès

management.log

Logs de management : peuvent être ignorés

Urls

Port Url Utilité

8090

/

Port d’écoute standard du composant : toutes opérations métiers avec le backend

9090

/management/*

Accès aux informations de Spring actuator (companion), par exemple sur /management/prometheus si la configuration du module permet d’activer les métriques :

  • management.endpoints.web.base-path=/management (valeur par défaut)

  • management.prometheus.metrics.export.enabled=true

4040

/

Accès à l’interface du spark driver (job Spark) : peut permettre d’analyser l’exécution des jobs et identifier l’origine de problèmes de performance sur un job particulier. Attention : il n’y a aucune protection sur cette url, qui permet notamment de tuer un job spark. A activer sur une plateforme de dev uniquement.

Valeur de "dc.app.spark.driver.port"

/

Dans le cadre de la mise en place d’un cluster spark, le conteneur écoute sur le port définit qui doit être accessible depuis les machines du cluster, pour opérer les échanges entre le driver et le cluster spark.

Variables d’environnement

Variable Valeur par défaut Description

SPARK_SECURITY_USER_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de surcharger dc.app.api.spark.security.user.password (identique sur backend et spark)

JAVA_OPTIONS

-Xms1024M -Xmx3g

Options de la JVM du job Spark, notamment la mémoire. Si la variable est définie, elle remplace les options de mémoire par défaut (-Xms, -Xmx) : les reprendre.

JAVA_JAR_OPTIONS

-Xms128M -Xmx256M

Options de la JVM du companion, notamment la mémoire. Variable distincte de JAVA_OPTIONS, qui n’est pas prise en compte par le companion.

Les variables d’environnement dont le nom contient des points (par exemple dc.app.module.instance-id) sont transmises sous forme de propriétés système (-D) aux deux processus de l’image. Elles permettent de surcharger les paramètres décrits ci-dessous, et appliquent la même valeur au companion et au job Spark.

Fichiers de configuration

Les paramètres de l’image sont répartis dans trois fichiers de configuration :

  • la configuration publique du companion ;

  • la configuration partagée du companion : elle contient les paramètres communs aux deux processus (chemins de stockage, accès S3, limites) ;

  • la configuration publique du job Spark.

Companion : configuration publique

######################################################################################################################
##   DATACHAIN DC-SPARK-COMPANION PUBLIC CONFIGURATION FILE
##
##   Operator-facing settings. This file is published as-is in the documentation (Maven artifact with
##   classifier "conf"). Settings shared with hdh-spark-job are in application-shared.properties.
##   Profile "public": loaded first, overridden by "shared" then by "local" / "prod-default".
##
##   Réglages exposés à l'exploitation. Ce fichier est publié tel quel dans la documentation
##   (artefact Maven classifier "conf"). Les paramètres partagés avec hdh-spark-job sont dans
##   application-shared.properties.
##   Profil "public" : chargé en premier, surchargé par "shared" puis par "local" / "prod-default".
######################################################################################################################

###############################################################
## HTTP server.
## Serveur HTTP.
###############################################################
## Server HTTP port.
## Port HTTP du serveur.
server.port=8090

## Whether response compression is enabled.
## Indique si la compression des réponses est activée.
server.compression.enabled=true
## Comma-separated list of MIME types that should be compressed.
## Liste séparée par des virgules des types MIME qui doivent être compressés.
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/csv,application/octet-stream
## Minimum "Content-Length" value required for compression to be performed.
## Valeur "Content-Length" minimale requise pour que la compression soit effectuée.
server.compression.min-response-size=2KB

## Multipart uploads are disabled.
## Les téléversements multipart sont désactivés.
spring.servlet.multipart.enabled=false

## Access log: enabled, encoding, retention in days, and directory (the directory should not be modified).
## Logs d'accès : activation, encodage, rétention en jours et répertoire (ne devrait pas être modifié).
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.max-days=31
server.tomcat.accesslog.directory=${DC_ROOT_LOG_DIRECTORY:/tmp/log}${DC_LOG_DIRECTORY:/datachain/dc_spark_companion}

###############################################################
## API documentation.
## Documentation de l'API.
###############################################################
springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
dc.app.doc.server.url=none

###############################################################
## Monitoring with Spring actuator. For the detailed configuration, see
## https://docs.spring.io/spring-boot/docs/3.1.5/reference/html/actuator.html
## Monitoring avec Spring actuator. Pour la configuration détaillée, voir le lien ci-dessus.
###############################################################
management.server.port=9090
management.server.address=127.0.0.1
management.endpoint.shutdown.enabled=false
management.endpoints.web.base-path=/management
management.endpoints.web.exposure.include=health, info, prometheus
management.prometheus.metrics.export.enabled=false

###############################################################
## Context identity.
## Identité du contexte.
###############################################################
## Context ID must match the one registered in the backend configuration.
## L'identifiant de contexte doit correspondre à celui déclaré dans la configuration du backend.
dc.app.context.id=0
dc.app.context.name=context_1
## URL of this companion instance, reported to the backend via the heartbeat.
## URL de cette instance du companion, remontée au backend par le heartbeat.
dc.app.context.url=http://localhost:8090

###############################################################
## Job scheduling.
## Ordonnancement des jobs.
###############################################################
## Spark scheduling mode. FAIR lets several jobs run concurrently, FIFO runs them one at a time.
## Must match hdh-spark-job's dc.app.spark.scheduler.mode.
## Mode d'ordonnancement Spark. FAIR accepte plusieurs jobs en parallèle, FIFO les exécute un par un.
## Doit correspondre au dc.app.spark.scheduler.mode de hdh-spark-job.
dc.app.spark.scheduler.mode=FAIR

## Number of threads dequeuing and running the Spark jobs coming from the backend. Only used in FAIR
## mode. Keep it in line with the power allocated to the context, otherwise jobs always wait.
## Nombre de threads chargés de dépiler et exécuter les jobs Spark venant du backend. Utilisé en mode
## FAIR uniquement. À adapter à la puissance allouée au contexte, sinon des jobs attendent en permanence.
dc.app.job.manager.spark.thread.number=5
## Number of threads running the non-Spark jobs (project import/export).
## Nombre de threads chargés des jobs non Spark (import/export de projets).
dc.app.job.manager.other.thread.number=5

## Spark resource parameters, reported in the heartbeat so the backend knows the context capacity.
## Must match the values configured in hdh-spark-job's application.public.properties.
## Paramètres de ressources Spark, remontés dans le heartbeat pour que le backend connaisse la
## capacité du contexte. Doivent correspondre aux valeurs de l'application.public.properties de hdh-spark-job.
dc.app.spark.master=local[2]
dc.app.spark.executor.memory=2g
dc.app.spark.cores.max=2

###############################################################
## Redis messaging with the backend.
## Échanges de messages avec le backend via Redis.
###############################################################
## Redis URL.
## URL de Redis.
dc.app.notification.urls=redis://localhost:33333

## Platform code, to change when several platforms share the same Redis.
## Code de la plateforme, à modifier si plusieurs plateformes partagent le même Redis.
dc.app.module.plateform-id=default
## Module code, according to the topology.
## Code du module, selon la topologie.
dc.app.module.instance-id=DATACHAIN_CORE

## The prefixes below exist so that several Datachain instances can share one Redis without
## overwriting each other's queues. They must match the ones configured on the backend.
## Les préfixes ci-dessous permettent à plusieurs instances Datachain de partager un même Redis sans
## écraser mutuellement leurs files. Ils doivent correspondre à ceux configurés sur le backend.
dc.app.instance-unique-id=${dc.app.module.plateform-id}:${dc.app.module.instance-id}
dc.app.notification.lockmap=datachain:${dc.app.instance-unique-id}:notification.lockmap
dc.app.notification.job.queue.name.prefix=datachain:${dc.app.instance-unique-id}:notification.job.queue
dc.app.notification.event.job.queue.name.prefix=datachain:${dc.app.instance-unique-id}:notification.event.job.queue
dc.app.notification.cancel.job.topic.name.prefix=datachain:${dc.app.instance-unique-id}:notification.cancel.job.topic
dc.app.notification.event.job.topic.name.prefix=datachain:${dc.app.instance-unique-id}:notification.event.job.topic
dc.app.notification.cache.job.result.name.prefix=datachain:${dc.app.instance-unique-id}:notification.cache.job.result
dc.app.notification.event.heart.beat.name.prefix=datachain:${dc.app.instance-unique-id}:notification.event.heart.beat

###############################################################
## Hadoop / S3A configuration used by CompanionContextListener through HdfsConfigurationInitiator.
## Configuration Hadoop / S3A utilisée par CompanionContextListener via HdfsConfigurationInitiator.
###############################################################
dc.app.spark.hadoop.dfs.client.use.datanode.hostname=false

## Hadoop S3A implementation to use.
## Implémentation Hadoop S3A à utiliser.
dc.app.spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
## Path-style access (http://host/bucket/...). Required for MinIO and S3-compatible storages.
## Accès path-style (http://host/bucket/...). Nécessaire pour MinIO ou un stockage compatible S3.
dc.app.spark.hadoop.fs.s3a.path.style.access=true
dc.app.spark.hadoop.fs.s3a.fast.upload=true
## Buffer type used (disk, array, bytebuffer) and local directory holding the disk buffers.
## Type de buffer utilisé (disk, array, bytebuffer) et répertoire local des buffers disque.
dc.app.spark.hadoop.fs.s3a.fast.upload.buffer=disk
dc.app.spark.hadoop.fs.s3a.buffer.dir=/tmp/spark-buffers
## Maximum number of blocks an output stream may have in flight.
## Nombre maximum de blocs qu'un flux de sortie peut avoir en activité.
dc.app.spark.hadoop.fs.s3a.fast.upload.active.blocks=10
## Threshold triggering a multipart upload, and size of each part.
## Seuil déclenchant le multipart upload, et taille de chaque partie.
dc.app.spark.hadoop.fs.s3a.multipart.threshold=67108864
dc.app.spark.hadoop.fs.s3a.multipart.size=64M
## Maximum number of threads and of simultaneous connections for the S3A operations.
## Nombre maximum de threads et de connexions simultanées pour les opérations S3A.
dc.app.spark.hadoop.fs.s3a.threads.max=100
dc.app.spark.hadoop.fs.s3a.connection.maximum=300
## HTTP connection timeout in milliseconds, retry count and retry interval.
## Timeout de connexion HTTP en millisecondes, nombre de tentatives et intervalle entre tentatives.
dc.app.spark.hadoop.fs.s3a.connection.timeout=200000
dc.app.spark.hadoop.fs.s3a.attempts.maximum=20
dc.app.spark.hadoop.fs.s3a.retry.interval=500ms

Companion : configuration partagée

######################################################################################################################
##   DATACHAIN DC-SPARK-COMPANION SHARED CONFIGURATION FILE
##
##   Settings shared with hdh-spark-job: both processes run in the same container and must
##   resolve exactly the same paths and the same limits. Any change here must be reported verbatim in
##   java-source/hdh-spark-job/src/main/resources/application.shared.properties
##   Profile "shared": loaded after the "public" profile and before "local" / "prod-default".
##
##   Paramètres partagés avec hdh-spark-job : les deux processus tournent dans le même conteneur et
##   doivent résoudre exactement les mêmes chemins et les mêmes limites. Toute modification ici doit
##   être reportée à l'identique dans
##   java-source/hdh-spark-job/src/main/resources/application.shared.properties
##   Profil "shared" : chargé après le profil "public" et avant "local" / "prod-default".
######################################################################################################################

###############################################################
## Storage root.
## file:/// for the local disk, s3a://bucket for S3, hdfs://host:port for HDFS.
## Racine du stockage.
## file:/// pour le disque local, s3a://bucket pour S3, hdfs://host:port pour HDFS.
###############################################################
dc.app.data-file.hdfs=file:///tmp/hdh

###############################################################
## Input depot paths.
## Répertoires des dépôts en entrée.
###############################################################
dc.app.data-file.hdfs.input.depot.csv.execution=${dc.app.data-file.hdfs}/input/depot/csv/execution
dc.app.data-file.hdfs.input.depot.csv.tmp=${dc.app.data-file.hdfs}/input/depot/csv/tmp
dc.app.data-file.hdfs.input.depot.db.sql.execution=${dc.app.data-file.hdfs}/input/depot/db/execution
dc.app.data-file.hdfs.input.depot.db.mongodb.execution=${dc.app.data-file.hdfs}/input/depot/mongodb/execution
dc.app.data-file.hdfs.input.depot.db.neo4j.execution=${dc.app.data-file.hdfs}/input/depot/neo4j/execution
dc.app.data-file.hdfs.input.depot.json.execution=${dc.app.data-file.hdfs}/input/depot/json/execution
dc.app.data-file.hdfs.input.depot.json.tmp=${dc.app.data-file.hdfs}/input/depot/json/tmp
dc.app.data-file.hdfs.input.depot.parquet.execution=${dc.app.data-file.hdfs}/input/depot/parquet/execution
dc.app.data-file.hdfs.input.depot.parquet.tmp=${dc.app.data-file.hdfs}/input/depot/parquet/tmp
dc.app.data-file.hdfs.input.depot.excel.execution=${dc.app.data-file.hdfs}/input/depot/excel/execution
dc.app.data-file.hdfs.input.depot.excel.tmp=${dc.app.data-file.hdfs}/input/depot/excel/tmp
dc.app.data-file.hdfs.input.depot.excel.tmp.cache=${dc.app.data-file.hdfs}/input/depot/excel/cache
dc.app.data-file.hdfs.input.depot.binary.execution=${dc.app.data-file.hdfs}/input/depot/binary/execution
dc.app.data-file.hdfs.input.depot.binary.tmp=${dc.app.data-file.hdfs}/input/depot/binary/tmp
dc.app.data-file.hdfs.input.depot.xml.execution=${dc.app.data-file.hdfs}/input/depot/xml/execution
dc.app.data-file.hdfs.input.depot.xml.tmp=${dc.app.data-file.hdfs}/input/depot/xml/tmp
dc.app.data-file.hdfs.input.depot.trino.execution=${dc.app.data-file.hdfs}/input/depot/trino/execution
dc.app.data-file.hdfs.input.depot.dataLink.execution=${dc.app.data-file.hdfs}/input/depot/dataLink/execution

## Folder where an imported project archive is unzipped.
## Répertoire de décompression d'une archive de projet importée.
dc.app.data-file.hdfs.input.import.zip=${dc.app.data-file.hdfs}/input/import/zip

###############################################################
## Export output paths.
## Répertoires de sortie des exports.
###############################################################
dc.app.data-file.hdfs.output.export.zip=${dc.app.data-file.hdfs}/output/export/zip
dc.app.data-file.hdfs.output.export.csv=${dc.app.data-file.hdfs}/output/export/csv
dc.app.data-file.hdfs.output.export.json=${dc.app.data-file.hdfs}/output/export/json
dc.app.data-file.hdfs.output.export.parquet=${dc.app.data-file.hdfs}/output/export/parquet
dc.app.data-file.hdfs.output.export.xml=${dc.app.data-file.hdfs}/output/export/xml
dc.app.data-file.hdfs.output.export.excel=${dc.app.data-file.hdfs}/output/export/excel
dc.app.data-file.hdfs.output.export.txt=${dc.app.data-file.hdfs}/output/export/txt
dc.app.data-file.hdfs.output.export.txt.tmp=${dc.app.data-file.hdfs}/output/export/txt/tmp

###############################################################
## Parquet cache paths.
## Répertoires de cache parquet.
###############################################################
dc.app.data-file.hdfs.output.cache.parquet=${dc.app.data-file.hdfs}/output/cache/parquet
dc.app.data-file.hdfs.output.cache.parquet.datablock=${dc.app.data-file.hdfs.output.cache.parquet}/datablock
dc.app.data-file.hdfs.output.cache.parquet.uet=${dc.app.data-file.hdfs.output.cache.parquet}/uet

###############################################################
## Depot snapshot path.
## Répertoire des snapshots de dépôt.
###############################################################
dc.app.data-file.hdfs.output.snapshot.depot=${dc.app.data-file.hdfs}/output/snapshot/depot

###############################################################
## Project data root and DataLink snapshot root.
## Racine des données projet et racine des snapshots DataLink.
###############################################################
dc.app.data-file.hdfs.project.root=${dc.app.data-file.hdfs}/data
dc.app.data-file.hdfs.dataLinks.root=${dc.app.data-file.hdfs.project.root}/dataLinks

## Free disk safety margin kept on the folders written, in minutes.
## Marge de sécurité sur l'espace disque libre des répertoires écrits, en minutes.
dc.app.free-disk.safety-margin-minutes=10

###############################################################
## S3 access, set by the deployment.
## Accès S3, renseigné par le déploiement.
###############################################################
## S3 service endpoint URL.
## URL de l'endpoint du service S3.
dc.app.data-file.s3.endpoint=none
## Bucket used for the storage.
## Nom du bucket utilisé pour le stockage.
dc.app.data-file.s3.bucket=none
## S3 access key.
## Clé d'accès S3.
dc.app.data-file.s3.access.key=none
## S3 secret key.
## Clé secrète S3.
dc.app.data-file.s3.secret.key=none

###############################################################
## Shared limits read by both processes.
## Limites partagées, lues par les deux processus.
###############################################################
## Maximum number of rows returned on a "take" request from the UI.
## Nombre maximum de lignes remontées lors d'un "take" au niveau de l'IHM.
dc.app.take.max-row=500000

## SFTP connector timeout, in milliseconds.
## Timeout des connecteurs SFTP, en millisecondes.
dc.app.connector.sftp.timeout=10000

## Cipher key. Optional; if set it must be exactly 16 characters, and must match the backend.
## If it is changed, every connector password must be revalidated.
## Clé de chiffrement. Optionnelle ; si renseignée elle doit faire exactement 16 caractères et être
## identique à celle du backend. Si elle change, tous les mots de passe des connecteurs sont à revalider.
dc.app.backend.cipher.key=

Job Spark : configuration publique

Les paramètres Spark natifs se déclarent sous dc.app. suivi de la clé Spark habituelle : au démarrage, le préfixe dc.app. est retiré et la clé obtenue est transmise à Spark. Par exemple, dc.app.spark.master=yarn positionne spark.master=yarn.

######################################################################################################################
#   DATACHAIN HDH-SPARK-JOB PUBLIC CONFIGURATION
#   Paramètres de réglage exposés à l'exploitation. Ce fichier est publié tel quel dans la
#   documentation (artefact Maven classifier "conf").
#
#   Ordre de chargement (le dernier gagne) :
#     application.public.properties -> application.shared.properties -> application.properties
#     -> variables d'environnement -> -Dcle=valeur
#
#   Les paramètres Spark natifs se déclarent sous dc.app.<clé spark habituelle> : au démarrage le
#   préfixe dc.app. est retiré et la clé résultante est poussée dans la SparkConf.
#   Exemple : dc.app.spark.master=yarn  ->  spark.master=yarn
######################################################################################################################

####################################################
## Serveur d'exécution de jobs (API du spark-job) ##
####################################################
## Port sur lequel le companion soumet les jobs
dc.app.job.execution.server.port=8099
## Nombre de jobs Spark exécutés en parallèle
dc.app.job.execution.thread.number=5
## Nombre de threads servant les appels HTTP (statut / annulation) ; séparé du pool d'exécution
dc.app.job.execution.http.thread.number=10

####################
## Contexte Spark ##
####################
dc.app.spark.app-name=DATACHAIN
## Configuration de la puissance allouée au contexte spark.
## Vis-à-vis de Spark, le service spark-job se comporte comme un driver spark.
## Par défaut, la configuration est de type local si bien que le driver est aussi un worker Spark.
## local[2] indique que spark utilise deux coeurs au maximum
dc.app.spark.master=local[2]
## Mémoire allouée au contexte spark
dc.app.spark.executor.memory=2g
## Nombre de coeurs alloués au contexte spark
dc.app.spark.cores.max=2

####################
## Job scheduling ##
####################
## Mode de scheduling Spark
## par default, spark est lancé en mode FAIR : le contexte accepte plusieurs tâches, et essaye
## d'allouer des ressources à chaque tâches
## Fair scheduling (multiple jobs can be executed concurrently)
dc.app.spark.scheduler.mode=FAIR
## Fifo scheduling (only one job can be executed concurrently)
# dc.app.spark.scheduler.mode=FIFO
## Pool de scheduling utilisé par les jobs
dc.app.spark.scheduler.pool=default
## Fichier de définition des pools FAIR.
## Chemin local ou URI (file:/// , hdfs:// , s3a://). Le déploiement surcharge cette valeur.
dc.app.spark.scheduler.allocation.file=/opt/dev/dc/java-source/hdh-spark-job/src/main/resources/fairScheduler.xml

###########################################
## Parametrage des ports sparks Standard ##
###########################################
dc.app.spark.blockManager.port=7010
dc.app.spark.driver.port=7020
dc.app.spark.driver.host=localhost
dc.app.spark.driver.bindAddress=localhost
dc.app.spark.driver.maxResultSize=1g
dc.app.spark.local.dir=/tmp
dc.app.spark.ui.port=4040
dc.app.spark.ui.killEnabled=false

#############################################
## Timeouts des UDF HTTP (formules) en ms  ##
#############################################
dc.app.spark.formula.http.timeout.read=200
dc.app.spark.formula.http.timeout.connect=200

###########################################
## Parametrage Optimizations             ##
###########################################
dc.app.spark.sql.adaptive.enabled=true
dc.app.spark.sql.adaptive.coalescePartitions.enabled=true
dc.app.spark.sql.adaptive.coalescePartitions.initialPartitionNum=10
dc.app.spark.sql.adaptive.forceOptimizeSkewedJoin=true
dc.app.spark.sql.adaptive.localShuffleReader.enabled=true
dc.app.spark.sql.autoBroadcastJoinThreshold=-1
dc.app.spark.sql.shuffle.partitions=250
dc.app.spark.sql.files.minPartitionNum=10

## Paramètres positionnés pour corriger l'écriture de timestamp
## d'avant le premier janvier 1900 dans un fichier parquet.
dc.app.spark.sql.parquet.int96RebaseModeInWrite=CORRECTED
dc.app.spark.sql.parquet.int96RebaseModeInRead=CORRECTED
dc.app.spark.sql.parquet.datetimeRebaseModeInWrite=CORRECTED
dc.app.spark.sql.parquet.datetimeRebaseModeInRead=CORRECTED

#############################################
## Configuration Spark Hadoop pour S3A     ##
#############################################
dc.app.spark.hadoop.dfs.client.use.datanode.hostname=false
# Implementation Hadoop S3A a utiliser
dc.app.spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
# Acces path-style (http://host/bucket/...). Nécessaire pour MinIO ou S3 compatible
dc.app.spark.hadoop.fs.s3a.path.style.access=true
dc.app.spark.hadoop.fs.s3a.fast.upload=true
# Type de buffer utilise (disk, array, bytebuffer)
dc.app.spark.hadoop.fs.s3a.fast.upload.buffer=disk
# emplacement locale pour les buffers en disque
dc.app.spark.hadoop.fs.s3a.buffer.dir=/tmp/spark-buffers
# Nombre maximum de blocs qu un flux de sortie peut avoir en activite
dc.app.spark.hadoop.fs.s3a.fast.upload.active.blocks=10
# Seuil pour declencher le multipart upload
dc.app.spark.hadoop.fs.s3a.multipart.threshold=67108864
# Taille de chaque partie du multipart upload
dc.app.spark.hadoop.fs.s3a.multipart.size=64M
# Nombre maximum de threads pour les operations S3A
dc.app.spark.hadoop.fs.s3a.threads.max=100
# Nombre maximal des connexions simultannees
dc.app.spark.hadoop.fs.s3a.connection.maximum=300
# Timeout de connexion HTTP en millisecondes
dc.app.spark.hadoop.fs.s3a.connection.timeout=200000
# Nombre maximal de tentatives en cas d echec
dc.app.spark.hadoop.fs.s3a.attempts.maximum=20
# Intervale de temps de tentatives en cas d echec
dc.app.spark.hadoop.fs.s3a.retry.interval=500ms

## La version 2 de l'algorithme du FileOutputCommitter introduit un mécanisme de commit plus robuste.
# Dans les versions antérieures, les échecs partiels pouvaient entrainer des données corrompues ou incomplétes.
dc.app.spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2

## Committer (1) Magic Committer d'hadoop (écriture des parquets en S3 plus performante et plus robuste)
dc.app.spark.hadoop.fs.s3a.committer.magic.enabled=true
dc.app.spark.hadoop.fs.s3a.committer.name=magic
dc.app.spark.hadoop.mapreduce.outputcommitter.factory.scheme.s3a=org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory
dc.app.spark.sql.sources.commitProtocolClass=org.apache.spark.internal.io.cloud.PathOutputCommitProtocol
dc.app.spark.sql.parquet.output.committer.class=org.apache.spark.internal.io.cloud.BindingParquetOutputCommitter

##Committer (2) staging committer directory mode
#dc.app.spark.hadoop.fs.s3a.committer.name=directory

##Committer (3) staging committer partitioned mode
#dc.app.spark.hadoop.fs.s3a.committer.name=partitioned

##Committer (0) default committer : Hadoop committer

#######################################################
## Job configuration used by hdh-spark-job only.
## The settings shared with dc-spark-companion-app are in application.shared.properties.
## Configuration des jobs utilisée par le seul hdh-spark-job.
## Les réglages partagés avec dc-spark-companion-app sont dans application.shared.properties.
#######################################################
## Number of rows fetched per JDBC batch, for the SQL connectors.
## Nombre de lignes retournées lors de chaque requête SQL pour les connecteurs SQL.
dc.app.jdbc.fetchSize=5000

## Maximum payload size returned on a "take" request from the UI.
## Taille maximum de données remontées lors d'un "take" au niveau de l'IHM.
dc.app.take.max-object-size=258002000

## File extensions handled as Excel workbooks.
## Extensions de fichier traitées comme des classeurs Excel.
dc.app.xlsx.file.extensions=xlsx,xlsm

## Timezone used by the date-based window functions. Empty means the JVM default.
## Fuseau horaire utilisé pour les fonctions window basées sur les dates. Vide = défaut de la JVM.
## example / exemple : dc.app.window.default.tz=Europe/Paris
dc.app.window.default.tz=

Principaux paramètres

Les paramètres server., management., dc.app.module. et dc.app.job.manager. sont ceux du companion. Les paramètres dc.app.spark. et dc.app.job.execution. sont ceux du job Spark. Les autres paramètres dc.app.* sont lus par les deux processus.

Paramètre Valeur par défaut Description

server.port

8090

port http du companion

server.compression.enabled

true

interrupteur d’activation de la compression http

server.compression.mime-types

application/json,application/xml,text/html,text/xml,text/plain,text/csv,application/octet-stream

"mime-types" à compresser

server.compression.min-response-size

2KB

compresser à partir de

dc.app.module.plateform-id

default

code de la plateforme. Il sert, avec dc.app.module.instance-id, à construire les noms des clés Redis utilisées pour les notifications entre le backend et le companion (datachain:<plateform-id>:<instance-id>:…​). Laisser la valeur default : elle doit être identique sur le backend.

dc.app.module.instance-id

DATACHAIN_CORE

À positionner avec l’identifiant de l’instance Datachain Core, c’est-à-dire la même valeur que pour le module backend (dc.app.module.instance-id). Cet identifiant est le code du produit DC_CORE déclaré dans le fichier de description de la topologie de la configuration de la console. La valeur par défaut ne convient que si ce code est DATACHAIN_CORE. Il doit être distinct entre deux instances de Datachain Core qui partagent le même Redis.

dc.app.job.manager.spark.thread.number

5

nombre de threads du companion chargés de dépiler et exécuter les jobs Spark venant du backend (mode FAIR uniquement). À adapter à la puissance allouée au contexte, sinon des jobs attendent en permanence

dc.app.job.manager.other.thread.number

5

nombre de threads du companion chargés des jobs non Spark (import/export de projets)

dc.app.job.execution.thread.number

5

nombre de jobs Spark exécutés en parallèle par le job Spark

dc.app.job.execution.http.thread.number

10

nombre de threads du job Spark servant les appels HTTP (statut, annulation), distinct du pool d’exécution

dc.app.spark.scheduler.mode

FAIR

mode d’ordonnancement Spark : FAIR accepte plusieurs jobs en parallèle, FIFO les exécute un par un

dc.app.spark.master

local[2]

chaîne de connexion vers le master spark (spark://HOST:PORT) ou local[n] pour tourner en mode local. Cette valeur est aussi remontée au backend par le companion (capacité du contexte)

dc.app.spark.executor.memory

2g

mémoire allouée à un exécuteur

dc.app.spark.cores.max

2

nombre de coeurs maximum disponibles pour les exécuteurs

dc.app.spark.ui.port

4040

console de monitoring spark

dc.app.spark.blockManager.port

7010

port de communication pour les blockManager valable pour le driver (job Spark) et les exécuteurs (uniquement pour le mode cluster)

dc.app.spark.driver.port

7020

port de communication entre le driver (job Spark), le master et les exécuteurs (pour le mode cluster)

dc.app.spark.driver.host

localhost

nom d’hôte ou adresse IP du driver pour la communication entre le driver (job Spark), le master et les exécuteurs (pour le mode cluster)

dc.app.spark.driver.bindAddress

localhost

nom d’hôte ou adresse IP où lier les interfaces de connexion (sockets). Cette configuration outrepasse (remplace) la variable d’environnement "SPARK_LOCAL_IP" (uniquement valable pour le mode cluster)

dc.app.spark.driver.maxResultSize

1g

mémoire maximale des données sérialisées pour les partitions après une action de collection (supérieure à dc.app.take.max-object-size)

dc.app.spark.local.dir

/tmp

emplacement tmp pour les exécuteurs : il devrait se situer sur un disque dur local et rapide, du système. Il peut également se présenter sous la forme d’une liste de répertoires, séparés par des virgules, issus de différents disques.

dc.app.spark.formula.http.timeout.read

200

valeur du timeout-read en milliseconde pour les requêtes http depuis les formules

dc.app.spark.formula.http.timeout.connect

200

valeur du timeout-connect en milliseconde pour les requêtes http depuis les formules

dc.app.take.max-row

500000

nombre maximal de lignes (sur un "take")

dc.app.take.max-object-size

258002000

taille maximale des chaines de caractères en octets (sur un "take")

dc.app.jdbc.fetchSize

5000

valeur utilisée par les connecteurs de type BD, indique la taille d’un lot de données à traiter

dc.app.connector.sftp.timeout

10000

timeout des connecteurs SFTP, en millisecondes

dc.app.backend.cipher.key

(vide)

clé de chiffrement, optionnelle : si elle est renseignée, elle doit faire exactement 16 caractères et être identique à celle du backend. Si elle change, tous les mots de passe des connecteurs sont à revalider

dc.app.context.id

0

id du contexte courant (doit être unique pour un backend)

dc.app.context.name

context_1

nom du contexte courant

dc.app.context.url

http://localhost:8090

url du contexte courant, communiquée au backend

dc.app.api.backend

http://localhost:8089

adresse http de l’api backend

dc.app.api.maps.url

http://localhost/service/maps/udf/

adresse http de l’api google-map dans le module backend

dc.app.backend.user.username

sparktobackend

utilisateur system à créer au démarrage du service backend , utilisé par le(s) contexte(s) spark

dc.app.backend.user.password

**

password de l’utilisateur system à créer au démarrage du service backend , utilisé par le(s) contexte(s) spark

dc.app.backend.security.oauth.client.id

**

client id oauth2 du module backend

dc.app.backend.security.oauth.client.secret

**

client secret oauth2 du module backend

management.endpoints.web.base-path

/management

préfixe des endpoints actuator

management.prometheus.metrics.export.enabled

false

interrupteur d’activation de l’export des métriques au format Prometheus

management.server.port

9090

port http du service actuator

management.server.address

127.0.0.1

adresse réseau à laquelle les endpoints actuator doivent se lier

spring.security.user.name

**

login du "context" spark

spring.security.user.password

**

mot de passe du "context" spark

dc.app.data-file.hdfs

file:///tmp/hdh

chaîne de connexion racine HDFS : file:/// pour le disque local, s3a://bucket pour S3, hdfs://host:port pour HDFS

dc.app.data-file.hdfs.dataLinks.root

${dc.app.data-file.hdfs.project.root}/dataLinks

répertoire racine des snapshots des DataLinks

dc.app.data-file.s3.endpoint

none

url de l’endpoint du service S3 (accès S3 renseigné par le déploiement)

dc.app.data-file.s3.bucket

none

bucket S3

dc.app.data-file.s3.access.key

**

clé d’accès S3

dc.app.data-file.s3.secret.key

**

clé secrète S3

dc.app.free-disk.safety-margin-minutes

10

lors d’un nettoyage de l’espace disque demandé par le backend, les dossiers écrits pendant cette durée (en minutes) avant la demande sont conservés : ils peuvent appartenir à des éléments que le backend ne connaissait pas encore

Module de migration dc core - Image dc/pg_migration

Description de l’image

Description

Responsable de l’exécution des patchs de mise à jour liées à PostgreSQL.

Taille

~400Mo

Briques techniques

Application Java 17/Groovy

Utilisateur

dc (uid 38330, groupe principal root (gid 0), groupe secondaire datachain (gid 38330)). L’image accepte aussi un uid quelconque imposé au démarrage (OpenShift) : cet uid appartient au groupe root (gid 0). Les répertoires de l’hôte montés dans les volumes doivent être accessibles en écriture à l’uid 38330 ou au groupe 0. Voir Exécution sans privilèges (OpenShift).

Volumes

Pas de volumes

Logs

Logs du module de migration sur la sortie standard docker

Urls

Pas d’Url sur ce composant

Variables d’environnement

Variable Valeur par défaut Description

PG_HOST

localhost

Nom DNS de la base de donnée : sera généralement positionné à dc-pg

PG_PORT

5432

Port de la base de donnée : Ne devrait pas être modifié

PG_USER

postgres

Utilisateur qui sera utilisé pour les migrations de tables

PG_PASSWORD

changeIt

Mot de passe qui sera utilisé pour les migrations de tables : devrait être changé via ce paramètre ou le paramètre suivant : PG_PASSWORD_FILE

PG_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de définir le Mot de passe qui sera utilisé pour les migrations de tables : devrait être changé via ce paramètre ou le paramètre précédent : PG_PASSWORD

PG_DB

adobis

Nom de la base de donnée

PG_EXPOSE_DB

expose

Nom de la base de donnée d’exposition

PG_EXPOSE_HOST

localhost

Nom DNS de la base de donnée d’exposition: sera généralement positionné à dc-pg

PG_EXPOSE_PORT

5432

Port de la base de donnée d’exposition: Ne devrait pas être modifié

PG_EXPOSE_USER

postgres

Utilisateur qui sera utilisé pour les migrations de tables d’exposition

PG_EXPOSE_PASSWORD

changeIt

Mot de passe qui sera utilisé pour les migrations de tables d’exposition: devrait être changé via ce paramètre ou le paramètre suivant : PG_EXPOSE_PASSWORD_FILE

PG_EXPOSE_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de définir le Mot de passe qui sera utilisé pour les migrations de tables d’exposition : devrait être changé via ce paramètre ou le paramètre précédent : PG_EXPOSE_PASSWORD

PG_JOB_HOST

valeur de PG_HOST

Nom DNS de la base de données « job » (nettoyage des requêtes de jobs à chaque nouvelle version). Par défaut, c’est la base principale : à renseigner uniquement si les jobs utilisent une base distincte

PG_JOB_PORT

valeur de PG_PORT

Port de la base de données « job »

PG_JOB_DB

valeur de PG_DB

Nom de la base de données « job »

PG_JOB_USER

valeur de PG_USER

Utilisateur de la base de données « job »

PG_JOB_PASSWORD

valeur du mot de passe de la base principale

Mot de passe de la base de données « job » : devrait être changé via ce paramètre ou le paramètre suivant : PG_JOB_PASSWORD_FILE

PG_JOB_PASSWORD_FILE

Nom du fichier de type "docker secret" qui permet de définir le mot de passe de la base de données « job » : devrait être changé via ce paramètre ou le paramètre précédent : PG_JOB_PASSWORD

Dernière mise à jour le 2 novembre 2026 à 15:16