Introduzione ad Azure Data Lake Store con Python

Informazioni su come usare Python SDK per Azure e Azure Data Lake Store per eseguire operazioni di base, ad esempio creare cartelle, caricare e scaricare file di dati e così via. Per altre informazioni su Data Lake, vedere Azure Data Lake Store.

Prerequisiti

Installare i moduli

Per gestire Data Lake Store usando Python, è necessario installare tre moduli.

Per installare i moduli, usare i comandi seguenti.

pip install azure-mgmt-resource
pip install azure-mgmt-datalake-store
pip install azure-datalake-store

Creare una nuova applicazione Python

  1. In un IDE a scelta creare una nuova applicazione Python, ad esempio mysample.py.

  2. Aggiungere le righe seguenti per importare i moduli necessari

    ## Use this only for Azure AD service-to-service authentication
    from azure.common.credentials import ServicePrincipalCredentials
    
    ## Use this only for Azure AD end-user authentication
    from azure.common.credentials import UserPassCredentials
    
    ## Use this only for Azure AD multi-factor authentication
    from msrestazure.azure_active_directory import AADTokenCredentials
    
    ## Required for Azure Data Lake Store account management
    from azure.mgmt.datalake.store import DataLakeStoreAccountManagementClient
    from azure.mgmt.datalake.store.models import DataLakeStoreAccount
    
    ## Required for Azure Data Lake Store filesystem management
    from azure.datalake.store import core, lib, multithread
    
    # Common Azure imports
    from azure.mgmt.resource.resources import ResourceManagementClient
    from azure.mgmt.resource.resources.models import ResourceGroup
    
    ## Use these as needed for your application
    import logging, getpass, pprint, uuid, time
    
  3. Salvare le modifiche a mysample.py.

Autenticazione

Questa sezione descrive le diverse modalità di autenticazione con Azure AD. Le opzioni disponibili sono:

  • Autenticazione dell'utente finale
  • Autenticazione da servizio a servizio
  • Autenticazione a più fattori

È necessario usare queste opzioni di autenticazione per i moduli di gestione degli account e di gestione del file system.

Autenticazione dell'utente finale per la gestione degli account

Per le operazioni di gestione degli account, ad esempio creare o eliminare account Data Lake Store e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. È necessario specificare il nome utente e la password per un utente di Azure AD. L'utente non deve essere configurato per l'autenticazione a più fattori.

user = input('Enter the user to authenticate with that has permission to subscription: ')
password = getpass.getpass()

credentials = UserPassCredentials(user, password)

Autenticazione dell'utente finale per le operazioni del file system

Per le operazioni di gestione del file system, ad esempio creare cartelle, caricare file e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. Usare questo tipo di autenticazione con un'applicazione client nativa di Azure AD. L'utente AD Azure del quale sono state specificate le credenziali non deve essere configurato per l'autenticazione a più fattori.

tenant_id = 'FILL-IN-HERE'
client_id = 'FILL-IN-HERE'
user = input('Enter the user to authenticate with that has permission to subscription: ')
password = getpass.getpass()

token = lib.auth(tenant_id, user, password, client_id)

Autenticazione da servizio a servizio con segreto client per la gestione degli account

Per le operazioni di gestione degli account, ad esempio creare o eliminare account Data Lake Store e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. Il frammento di codice seguente può essere usato per autenticare l'applicazione in modo non interattivo, usando il segreto client per un'applicazione o un'entità servizio. Usare questo frammento con un'app Web di Azure AD esistente.

credentials = ServicePrincipalCredentials(client_id = 'FILL-IN-HERE', secret = 'FILL-IN-HERE', tenant = 'FILL-IN-HERE')

Autenticazione da servizio a servizio con segreto client per le operazioni del file system

Per le operazioni di gestione del file system, ad esempio creare cartelle, caricare file e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. Il frammento di codice seguente può essere usato per autenticare l'applicazione in modo non interattivo, usando il segreto client per un'applicazione o un'entità servizio. Usare questo frammento con un'app Web di Azure AD esistente.

token = lib.auth(tenant_id = 'FILL-IN-HERE', client_secret = 'FILL-IN-HERE', client_id = 'FILL-IN-HERE')

Multi-Factor Authentication per la gestione degli account

Per le operazioni di gestione degli account, ad esempio creare o eliminare account Data Lake Store e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. Il frammento di codice seguente consente di autenticare l'applicazione con Multi-Factor Authentication. Usare questo frammento con un'app Web di Azure AD esistente.

authority_host_url = "https://login.microsoftonline.com"
tenant = "FILL-IN-HERE"
authority_url = authority_host_url + '/' + tenant
client_id = 'FILL-IN-HERE'
redirect = 'urn:ietf:wg:oauth:2.0:oob'
RESOURCE = 'https://management.core.windows.net/'

context = adal.AuthenticationContext(authority_url)
code = context.acquire_user_code(RESOURCE, client_id)
print(code['message'])
mgmt_token = context.acquire_token_with_device_code(RESOURCE, code, client_id)
credentials = AADTokenCredentials(mgmt_token, client_id)

Multi-Factor Authentication per la gestione del file system

Per le operazioni di gestione del file system, ad esempio creare cartelle, caricare file e così via, è necessario eseguire questo tipo di autenticazione con Azure AD. Il frammento di codice seguente consente di autenticare l'applicazione con Multi-Factor Authentication. Usare questo frammento con un'app Web di Azure AD esistente.

token = lib.auth(tenant_id='FILL-IN-HERE')

Creare un gruppo di risorse di Azure

Per creare un gruppo di risorse di Azure usare il frammento di codice seguente:

## Declare variables
subscriptionId= 'FILL-IN-HERE'
resourceGroup = 'FILL-IN-HERE'
location = 'eastus2'

## Create management client object
resourceClient = ResourceManagementClient(
    credentials,
    subscriptionId
)

## Create an Azure Resource Group
resourceClient.resource_groups.create_or_update(
    resourceGroup,
    ResourceGroup(
        location=location
    )
)

Creare client e account Data Lake Store

Il frammento seguente crea prima il client account Data Lake Store, poi usa l'oggetto client per creare un account Data Lake Store e infine crea un oggetto client per il file system.

## Declare variables
subscriptionId = 'FILL-IN-HERE'
adlsAccountName = 'FILL-IN-HERE'

## Create management client object
adlsAcctClient = DataLakeStoreAccountManagementClient(credentials, subscriptionId)

## Create a Data Lake Store account
adlsAcctResult = adlsAcctClient.account.create(
    resourceGroup,
    adlsAccountName,
    DataLakeStoreAccount(
        location=location
    )
).wait()

## Create a filesystem client object
adlsFileSystemClient = core.AzureDLFileSystem(token, store_name=adlsAccountName)

Elencare gli account Data Lake Store

## List the existing Data Lake Store accounts
result_list_response = adlsAcctClient.account.list()
result_list = list(result_list_response)
for items in result_list:
    print(items)

Creare una directory

## Create a directory
adlsFileSystemClient.mkdir('/mysampledirectory')

Caricare un file

## Upload a file
multithread.ADLUploader(adlsFileSystemClient, lpath='C:\\data\\mysamplefile.txt', rpath='/mysampledirectory/mysamplefile.txt', nthreads=64, overwrite=True, buffersize=4194304, blocksize=4194304)

Scaricare un file

## Download a file
multithread.ADLDownloader(adlsFileSystemClient, lpath='C:\\data\\mysamplefile.txt.out', rpath='/mysampledirectory/mysamplefile.txt', nthreads=64, overwrite=True, buffersize=4194304, blocksize=4194304)

Eliminare una directory

## Delete a directory
adlsFileSystemClient.rm('/mysampledirectory', recursive=True)

Vedere anche