Personnaliser les conteneurs avec les services de conteneur Databricks

Les services de conteneur Databricks vous permettent de spécifier une image d’ancrage lorsque vous créez un cluster. Voici quelques exemples de cas d’usage :

  • Personnalisation de la bibliothèque : vous disposez d’un contrôle total sur les bibliothèques système que vous souhaitez installer.
  • Environnement de conteneurs de référence : votre image de l’Ancrable est un environnement verrouillé qui ne changera jamais.
  • Intégration de l’intégration continue/du CD : vous pouvez intégrer des Azure Databricks à vos pipelines d’intégration continue/de CD de l’ancrage.

Vous pouvez également utiliser des images de l’amarrage pour créer des environnements d’apprentissage profond personnalisés sur des clusters avec des périphériques GPU. Pour plus d’informations sur l’utilisation de clusters GPU avec les services de conteneur Databricks, consultez services de conteneur Databricks sur les clusters GPU.

Pour les tâches à exécuter chaque fois que le conteneur démarre, utilisez un script init.

Configuration requise

Notes

Databricks Runtime pour les Machine Learning et les Databricks Runtime pour la génomique ne prennent pas en charge les Services de conteneur Databricks.

  • Databricks Runtime 6,1 ou version ultérieure. Si vous avez déjà utilisé les services de conteneur Databricks, vous devez mettre à niveau vos images de base. Consultez les images les plus récentes dans https://github.com/databricks/containers avec balises avec 6.x .
  • Les services de conteneur Databricks doivent être activésdans votre espace de travail Azure Databricks.
  • Votre ordinateur doit exécuter un démon de l’Ancrable récent (qui est testé et fonctionne avec la version client/serveur 18.03.0-ce) et la docker commande doit être disponible sur votre PATH .

Étape 1 : Créer votre base

Il existe plusieurs exigences minimales pour Azure Databricks de lancer un cluster avec succès. Pour cette raison, Databricks vous recommande de créer votre base d’ancrage à partir d’une base que Azure Databricks a générée et testée. Cet exemple utilise la 9.x balise pour une image qui cible un cluster avec la version du runtime Databricks Runtime 9,0 et versions ultérieures :

FROM databricksruntime/standard:9.x
...

Pour spécifier des bibliothèques python supplémentaires, telles que la dernière version de pandas et urllib, utilisez la version spécifique au conteneur de pip . Pour le datatabricksruntime/standard:9.x conteneur, incluez les éléments suivants :

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

Pour le datatabricksruntime/standard:8.x conteneur ou une partie inférieure, incluez les éléments suivants :

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

Les exemples d’images de base sont hébergés sur le hub d’ancrage à l’adresse https://hub.docker.com/u/databricksruntime . Le fichiers dockerfile utilisé pour générer ces bases se trouve à l’adresse https://github.com/databricks/containers .

Notes

Les images de base ne doivent databricksruntime/standarddatabricksruntime/minimal pas être confondues avec les databricks-standard environnements et non liés databricks-minimal inclus dans la Databricks Runtime n’est plus disponible avec Conda (Beta).

Vous pouvez également créer votre base d’ancrage à partir de zéro. Votre image de station d’accueil doit remplir les conditions suivantes :

Vous pouvez utiliser l’image minimale générée par Databricks à l’adresse databricksruntime/minimal .

Bien entendu, la configuration minimale requise décrite ci-dessus n’inclut pas python, R, ganglia et de nombreuses autres fonctionnalités que vous attendez généralement dans les clusters Azure Databricks. pour obtenir ces fonctionnalités, créez l’image de base appropriée (autrement dit, databricksruntime/rbase pour R) ou référencez le fichiers dockerfile dans GitHub pour déterminer comment générer la prise en charge des fonctionnalités spécifiques que vous souhaitez.

Avertissement

Testez minutieusement votre image de conteneur personnalisée sur un cluster Azure Databricks. Votre conteneur peut fonctionner sur un ordinateur local ou de build, mais lorsque votre conteneur est lancé sur un cluster Azure Databricks, le lancement du cluster peut échouer, certaines fonctionnalités peuvent être désactivées, ou votre conteneur peut cesser de fonctionner, même en mode silencieux. Dans les scénarios les plus défavorables, il peut corrompre vos données ou exposer accidentellement vos données à des tiers externes.

Étape 2 : Envoyer (push) votre image de base

Envoyez votre image de base personnalisée à un registre de l’ancrage. Ce processus est pris en charge avec les registres suivants :

D’autres registres de l’arrimeur qui ne prennent pas en charge l’authentification de base ou auth sont également censés fonctionner.

Étape 3 : Lancer votre cluster

Vous pouvez lancer votre cluster à l’aide de l’interface utilisateur ou de l’API.

Lancer votre cluster à l’aide de l’interface utilisateur

  1. Spécifiez une version de Databricks Runtime qui prend en charge les services de conteneur Databricks.

    Sélectionner le runtime Databricks

  2. Sélectionnez utiliser votre propre conteneur d’ancrage.

  3. Dans le champ URL de l’image de l' ancreur , entrez votre image d’ancrage personnalisé.

    Exemples d’URL d’image de l’amarrage :

    Registre Format de balise
    Docker Hub <organization>/<repository>:<tag> (par exemple : databricksruntime/standard:latest )
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  4. Sélectionnez le type d'authentification.

Lancer votre cluster à l’aide de l’API

  1. Générez un jeton d’API.

  2. Utilisez l' API de clusters 2,0 pour lancer un cluster avec votre base d’ancrage personnalisé.

    curl -X POST -H "Authorization: Bearer <token>" https://<databricks-instance>/api/2.0/clusters/create -d '{
      "cluster_name": "<cluster-name>",
      "num_workers": 0,
      "node_type_id": "Standard_DS3_v2",
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "7.3.x-scala2.12",
    }'
    

    basic_auth la configuration requise dépend de votre type d’image de station d’accueil :

    • Pour les images de l’ancrage public, n’incluez pas le champ.
    • Pour les images de l’ancrage privé, vous devez inclure le basic_auth champ, en utilisant un ID de principal du service et un mot de passe comme nom d’utilisateur et mot de passe.
    • Pour Azure Container Registry, vous devez définir le basic_auth champ sur l’ID et le mot de passe d’un principal de service. Pour plus d’informations sur la création du principal du service, consultez Azure Container Registry la documentation d’authentification du principal de service.

Utiliser un script init

Les clusters de services de conteneur Databricks permettent aux clients d’inclure des scripts init dans le conteneur d’ancrage. Dans la plupart des cas, vous devez éviter les scripts init et les personnaliser à l’aide de Dockr directement (à l’aide de fichier dockerfile). Toutefois, certaines tâches doivent être exécutées au démarrage du conteneur, et non lors de la génération du conteneur. Utilisez un script init pour ces tâches.

Supposons, par exemple, que vous souhaitiez exécuter un démon de sécurité à l’intérieur d’un conteneur personnalisé. Installez et générez le démon dans l’image de l’arrimeur via le pipeline de création d’image. Ensuite, ajoutez un script init qui démarre le démon. Dans cet exemple, le script init inclut une ligne comme systemctl start my-daemon .

Dans l’API, vous pouvez spécifier des scripts init dans le cadre de la spécification du cluster comme suit. Pour plus d’informations, consultez InitScriptInfo.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Pour les images des services de conteneur Databricks, vous pouvez également stocker des scripts init dans DBFS ou dans le stockage cloud.

Les étapes suivantes ont lieu lorsque vous lancez un cluster Databricks Container Services :

  1. Les machines virtuelles sont acquises auprès du fournisseur de Cloud.
  2. L’image de l’arrimeur personnalisé est téléchargée à partir de votre référentiel.
  3. Azure Databricks crée un conteneur d’ancrage à partir de l’image.
  4. Databricks Runtime code est copié dans le conteneur d’ancrage.
  5. Les scrips init sont exécutés. Consultez ordre d’exécution de script init.

Azure Databricks ignore l’ancrage CMD et les ENTRYPOINT Primitives.