3
votes

Le cluster Databricks n'initialise pas la bibliothèque Azure avec l'erreur: le module 'lib' n'a pas d'attribut 'SSL_ST_INIT'

J'utilise le bloc-notes Azure DataBricks avec la bibliothèque Azure pour obtenir la liste des fichiers dans le stockage Blob. Cette tâche est planifiée et le cluster est arrêté une fois le travail terminé et redémarré avec une nouvelle exécution.

J'utilise la bibliothèque Azure 4.0.0 ( https://pypi.org/project/azure/ )

Parfois, je reçois un message d'erreur:

  • AttributeError: le module 'lib' n'a pas d'attribut 'SSL_ST_INIT'

et très rarement aussi:

  • AttributeError: la bibliothèque cffi '_openssl' n'a pas de fonction, de constante ou variable globale nommée "CRYPTOGRAPHY_PACKAGE_VERSION"

J'ai trouvé une solution en désinstallant openssl ou azure library, redémarrez le cluster et réinstallez-le, mais le redémarrage du cluster peut ne pas être possible car il peut avoir besoin de gérer des tâches plus longues, etc.

J'ai également essayé d'installer / mettre à niveau openSSL 16.2.0 dans le script d'initialisation, mais cela n'aide pas et commence à entrer en conflit avec une autre bibliothèque openSSL qui est dans le cluster Databricks par défaut

Y a-t-il une option que je peux faire avec?

Il y a le code pour obtenir la liste des fichiers de Blob Storage:

import pandas as pd
import re
import os
from pyspark.sql.types import *
import azure
from azure.storage.blob import BlockBlobService
import datetime
import time

r = []
marker = None
blobService = BlockBlobService(accountName,accountKey)
while True:
  result = blobService.list_blobs(sourceStorageContainer, prefix = inputFolder, marker=marker)
  for b in result.items:
    r.append(b.name)
  if result.next_marker:
    marker = result.next_marker
  else:
    break
print(r)

Merci


1 commentaires

Veuillez publier une réponse sur votre solution ou les étapes à suivre pour résoudre votre problème, cela aidera d'autres personnes qui ont rencontré un problème similaire. Merci.


3 Réponses :


2
votes

La solution à ce problème consiste à rétrograder la bibliothèque Azure vers 3.0.0.

Il semble qu'Azure v4 soit en conflit avec certaines bibliothèques initiales dans Databricks.


0 commentaires

1
votes

Ce problème a également un lien avec le package pyOpenSSL. Le passage à la version 18.0.0 a fait l'affaire pour moi. J'ai utilisé le script ci-dessous comme script d'initialisation lors de l'initialisation du cluster

dbutils.fs.put("/databricks/script/pyOpenSSL-install.sh",""" 
#!/bin/bash 
/databricks/python/bin/pip uninstall pyOpenSSL -y 
/databricks/python/bin/pip install pyOpenSSL==18.0.0 
""", True)


1 commentaires

Cela a résolu mon problème. Cependant, au lieu de rétrograder, je l'ai mis à niveau vers la version 19.0.0. Et le package qui a un problème ( azure-storage-blob était 12.2.0). Voici comment je l'ai fait: kb.databricks.com/python/...



0
votes

L'exécution de databricks runtime 6 ou supérieur devrait maintenant résoudre ce problème.


0 commentaires