下麵的代碼執行一個“得到”從s3 api方法來檢索對象和寫數據。
當我用dbutils.secrets時問題就出現了。能得到所需的密鑰建立連接到s3
my_dataframe.rdd。foreachPartition(分區= > {val AccessKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-ID”) val SecretKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-Secret”)val creds = new BasicAWSCredentials(AccessKey, SecretKey) val clientRegion: Regions = Regions.US_EAST_1 val s3client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new AWSStaticCredentialsProvider(creds)) .build() partition.foreach(x => { val objectKey = x.getString(0) val i = s3client.getObject(s3bucketName, objectKey).getObjectContent val inputS3String = IOUtils.toString(i, "UTF-8") val filePath = s"${data_lake_get_path}" val file = new File(filePath) val fileWriter = new FileWriter(file) val bw = new BufferedWriter(fileWriter) bw.write(inputS3String) bw.close() fileWriter.close() }) })
上述結果的錯誤:-
引起的:java.util。NoSuchElementException: None.get
在scala.None $ . get (Option.scala: 529)
在scala.None $ . get (Option.scala: 527)
在com.databricks.dbutils_v1。impl.SecretUtilsImpl.sc美元lzycompute (SecretUtilsImpl.scala: 24)
在com.databricks.dbutils_v1。impl.SecretUtilsImpl.sc(SecretUtilsImpl.scala: 24)
在com.databricks.dbutils_v1.impl.SecretUtilsImpl.getSecretManagerClient (SecretUtilsImpl.scala: 36)
com.databricks.dbutils_v1.impl.SecretUtilsImpl.getBytesInternal (SecretUtilsImpl.scala: 46)
com.databricks.dbutils_v1.impl.SecretUtilsImpl.get (SecretUtilsImpl.scala: 61)
當實際AccessKey秘密範圍值和SecretKey上麵的代碼工作正常傳遞。
如何使用dbutils.secrets這項工作。得到這鑰匙不暴露在代碼中?
嗨@Sandesh Puligundla,你隻需要以下兩行:
val AccessKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-ID”) val SecretKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-Secret”)
foreachpartition塊的外麵,所以這些函數將執行上下文中的司機和發送到工人節點。
嗨@Sandesh Puligundla,你隻需要以下兩行:
val AccessKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-ID”) val SecretKey = dbutils.secrets。得到(=“ADB_Scope”範圍,鍵=“AccessKey-Secret”)
foreachpartition塊的外麵,所以這些函數將執行上下文中的司機和發送到工人節點。