繁体   English   中英

Databricks 群集未初始化 Azure 库并出现错误:模块“lib”没有属性“SSL_ST_INIT”

[英]Databricks cluster does not initialize Azure library with error: module 'lib' has no attribute 'SSL_ST_INIT'

我正在使用 Azure DataBricks notebook 和 Azure 库来获取 Blob 存储中的文件列表。 此任务已安排好,集群在完成作业后终止,并以新的运行重新启动。

我正在使用 Azure 4.0.0 库( https://pypi.org/project/azure/

有时我收到错误消息:

  • AttributeError: 模块“lib”没有属性“SSL_ST_INIT”

也很少:

  • AttributeError: cffi 库“_openssl”没有名为“CRYPTOGRAPHY_PACKAGE_VERSION”的函数、常量或全局变量

我找到了一个解决方案,即卸载 openssl 或 azure 库,重新启动集群并再次安装它,但可能无法重新启动集群,因为它可能需要处理更长的任务等。

我还尝试在初始化脚本中安装/升级 openSSL 16.2.0,但它没有帮助并开始与默认情况下位于 Databricks 集群中的另一个 openSSL 库发生冲突

有什么选择我可以用它做什么吗?

有从 Blob 存储获取文件列表的代码:

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)

谢谢

此问题的解决方案是将 Azure 库降级到 3.0.0。

看起来 Azure v4 与 Databricks 中的一些初始库有冲突。

这个问题也有一个与 pyOpenSSL 包的链接。 降级到 18.0.0 版对我有用。 我在集群初始化时使用了以下脚本作为初始化脚本

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)

运行 databricks runtime 6 或更高版本现在应该可以解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM