我有一個 GCP Dataproc 集群,我正在嘗試部署一個 pyspark 作業,該作業使用 SSL 生成一個主題。
pem 檔案存盤在存盤桶 gs://dataproc_kafka_code/code 中,我正在訪問下面顯示的代碼中的 pem 檔案。但是,代碼無法找到pem檔案,錯誤如下所示:
%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:02001002:system library:fopen:No such file or directory: fopen('gs://dataproc_kafka_code/code/caroot.pem','r')
%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:2006D080:BIO routines:BIO_new_file:no such file
Traceback (most recent call last):
File "/tmp/my-job6/KafkaProducer.py", line 21, in <module>
producer = Producer(conf)
cimpl.KafkaException: KafkaError{code=_INVALID_ARG,val=-186,str="Failed to create producer: ssl.ca.location failed: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib"}
代碼 :
from confluent_kafka import Producer
kafkaBrokers='<host>:<port>'
# CA Root certificate ca.crt
caRootLocation='gs://dataproc_kafka_code/code/caroot.pem'
# user public (user.crt)
certLocation='gs://dataproc_kafka_code/code/my-bridge-user-crt.pem'
# user.key
keyLocation='gs://dataproc_kafka_code/code/user-with-certs.pem'
password='<password>'
conf = {'bootstrap.servers': kafkaBrokers,
'security.protocol': 'SSL',
'ssl.ca.location':caRootLocation,
'ssl.certificate.location': certLocation,
'ssl.key.location':keyLocation,
'ssl.key.password' : password
}
topic = 'my-topic'
producer = Producer(conf)
for n in range(100):
producer.produce(topic, key=str(n), value=" val -> " str(n*(-1)) " on dec 5 from dataproc ")
producer.flush()
需要做些什么來解決這個問題?另外,這是提供對 SSL 證書的代碼訪問的正確方法嗎?
蒂亞!
uj5u.com熱心網友回復:
從錯誤
fopen:No such file or directory: fopen('gs://dataproc_kafka_code/code/caroot.pem','r'),似乎Producer圖書館正試圖從本地檔案系統下載檔案。
有幾種方法可以嘗試通過將這些密鑰/證書下載到本地檔案然后將 conf 指向它們來解決此問題:
- 使用存盤客戶端 API https://googleapis.dev/python/storage/latest/client.html下載
- 或使用 gsutil(預裝在 VM 中)下載檔案https://cloud.google.com/storage/docs/gsutil/commands/cp
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374372.html
上一篇:過濾器回傳陣列的第一個元素而不是
下一篇:如何將整數決議為命令列引數?
