Como obtener todas las configuraciones de la sesión de Spark + secretos de Azure Key Vault

Conocer como está configurada tu sesión de Spark es importante para debugging o para confirmar que los valores de los parámetros están bien configurados. Con el siguiente comando puedes obtener todas las configuraciones actuales de la sesión de Spark

spark.sparkContext.getConf().getAll()
  • spark.sparkContext accede al contexto de Spark de tu sesión

  • getConf() devuelve las configuraciones de Spark

  • getAll() devuelve una lista clave-valor con todas las configuraciones actuales de la sesión, incluyendo aquellas configuraciones por defecto y las que se hayan sobrescrito.

Para obtener un valor específico:

spark.conf.get("spark.driver.cores")

Con este comando también podemos acceder configuraciones internas de Microsoft Fabric. Para ello, se utiliza el parámetro trident.

spark.conf.get("trident.tenant.id")

trident: Es un valor que representa una característica, servicio, o contexto específico en el que estás trabajando.
En entornos de Microsoft Fabric, "Trident" es un nombre en clave interno usado para referirse a ciertas funcionalidades de integración y configuración en Fabric, especialmente cuando se interactúa con servicios como OneLake, Key Vault, o Azure Active Directory.

import sempy.fabric as fabric

default_lakehouse_id    = 'No default lakehouse' if spark.conf.get("trident.lakehouse.id") == '' else spark.conf.get("trident.lakehouse.id")
default_lakehouse_name  = 'No default lakehouse' if spark.conf.get("trident.lakehouse.name") == '' else spark.conf.get("trident.lakehouse.name")
notebook_item_id        = spark.conf.get("trident.artifact.id")
notebook_item_name      = fabric.resolve_item_name(notebook_item_id)
pool_executor_cores     = spark.sparkContext.getConf().get("spark.executor.cores")
pool_executor_memory    = spark.sparkContext.getConf().get("spark.executor.memory")
pool_min_executors      = spark.sparkContext.getConf().get("spark.dynamicAllocation.minExecutors")
pool_max_executors      = spark.sparkContext.getConf().get("spark.dynamicAllocation.maxExecutors")
pool_number_of_nodes    = len(str(sc._jsc.sc().getExecutorMemoryStatus().keys()).replace("Set(","").replace(")","").split(", "))
spark_app_name          = spark.conf.get("spark.app.name")
workspace_id            = spark.conf.get("trident.workspace.id")
workspace_name          = fabric.resolve_workspace_name(workspace_id)

print(f'default_lakehouse_id:   {default_lakehouse_id}')
print(f'default_lakehouse_name: {default_lakehouse_name}')
print(f'notebook_item_id:       {notebook_item_id}')
print(f'notebook_item_name:     {notebook_item_name}')
print(f'spark_app_name:         {spark_app_name}')
print(f'pool_executor_cores:    {pool_executor_cores}')
print(f'pool_executor_memory:   {pool_executor_memory}')
print(f'pool_min_executors:     {pool_min_executors}')
print(f'pool_max_executors:     {pool_max_executors}')
print(f'pool_number_of_nodes:   {pool_number_of_nodes}')
print(f'workspace_id:           {workspace_id}')
print(f'workspace_name:         {workspace_name}')

Puedes cambiar el valor de la configuración de la sesión de Spark utilizando el método spark.conf.set. Este método permite establecer configuraciones específicas para tu sesión actual de Spark

spark.conf.set("<spark.conf.name>", value)

Azure Key Vault

Una de las buenas prácticas es almacenar los ids o datos sensibles en Azure Key Vault y acceder a ellos mediante notebook. A continuación os muestro un ejemplo:

En Azure tengo un Key Vault con la siguiente información

Para obtener el valor del secreto en un notebook utilizaremos NotebookUtils

notebookutils.credentials.getSecret('https://<name>.vault.azure.net/', 'secret name')

Como se puede ver, al acceder a un secreto aparece el valor [REDACTED]. Esto se debe a que, por razones de seguridad, Microsoft Fabric oculta automáticamente los valores de los secretos en las salidas de los notebooks para evitar exposiciones accidentales.

Aunque no se pueda ver el valor del secreto, si que podemos utilizarlo:

0
Subscribe to my newsletter

Read articles from Kilian Baccaro Salinas directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Kilian Baccaro Salinas
Kilian Baccaro Salinas