[英]Changing aws credentials in hadoop configuration for pyspark during runtime after initialization of spark context
[英]In PySpark, is there a way to pass credentials as variables into spark.read?
Spark 允許我們直接從 Google BigQuery 讀取數據,如下所示:
df = spark.read.format("bigquery") \
.option("credentialsFile", "googleKey.json") \
.option("parentProject", "projectId") \
.option("table", "project.table") \
.load()
然而,將密鑰保存在虛擬機上並不是一個好主意。 我將 Google 密鑰安全地保存在憑據管理工具中,保存為 JSON。 密鑰按需讀取並保存到名為 googleKey 的變量中。
是否可以將 JSON 傳遞給 speak.read,或者將憑據作為字典傳遞?
另一個選項是credentials
。 來自spark-bigquery-connector 文檔:
如何在 GCE / Dataproc 之外進行身份驗證?
憑據也可以顯式提供,作為參數或從 Spark 運行時配置。 它們應該直接作為 base64 編碼的字符串傳入。
// Globally spark.conf.set("credentials", "<SERVICE_ACCOUNT_JSON_IN_BASE64>") // Per read/Write spark.read.format("bigquery").option("credentials", "<SERVICE_ACCOUNT_JSON_IN_BASE64>")
這更像是先有雞還是先有蛋的情況。 如果您將憑證文件存儲在秘密管理器中(希望這不是您的憑證管理器工具)。 您將如何訪問秘密管理器。 為此,您可能需要密鑰以及將該密鑰存儲在哪里。
為此,Azure 創建了一個托管身份,兩個不同的服務可以通過它相互通信,而無需顯式提供任何密鑰(憑據)。
如果您從 Dataproc 運行,則該節點有一個內置服務帳戶,您可以在創建集群時控制該帳戶。 在這種情況下,您不需要傳遞任何 credentials/credentialsFile 選項。
如果您在另一個雲或本地運行,您可以使用本地秘密管理器,或實施連接器的 AccessTokenProvider,它允許您完全自定義憑據創建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.