Introduzione ad Archivio Azure Data Lake con API REST

Questo articolo descrive come usare le API REST WebHDFS e le API REST di Archivio Data Lake per eseguire la gestione dell'account e le operazioni del file system su Archivio Azure Data Lake. Archivio Azure Data Lake espone le proprie API REST per operazioni di gestione account. Tuttavia, dal momento che Archivio Data Lake è compatibile con l'ecosistema Hadoop e HDFS, supporta le operazioni del file system tramite le API REST WebHDFS.

Nota

Per informazioni dettagliate sul supporto delle API REST per Archivio Data Lake, vedere Informazioni di riferimento sulle API REST di Archivio Azure Data Lake.

Prerequisiti

Come si esegue l'autenticazione tramite Azure Active Directory?

È possibile adottare due approcci per l'autenticazione tramite Azure Active Directory.

Autenticazione dell'utente finale (interattiva)

In questo scenario, l'applicazione richiede all'utente di accedere e tutte le operazioni vengono eseguite nel contesto utente. Eseguire la procedura seguente per l'autenticazione interattiva.

  1. Tramite l'applicazione, reindirizzare l'utente all'URL seguente:

     https://login.microsoftonline.com/<TENANT-ID>/oauth2/authorize?client_id=<APPLICATION-ID>&response_type=code&redirect_uri=<REDIRECT-URI>
    
    Nota

    <REDIRECT-URI> deve essere codificato per essere usato in un URL. Per https://localhost, usare quindi https%3A%2F%2Flocalhost

    Per questa esercitazione, è possibile sostituire i valori segnaposto nell'URL precedente e incollare quest'ultimo nella barra degli indirizzi di un web browser. Si verrà reindirizzati per l'autenticazione tramite l'accesso ad Azure. Dopo aver eseguito correttamente l'accesso, la risposta verrà visualizzata nella barra degli indirizzi del browser. La risposta sarà nel formato seguente:

     http://localhost/?code=<AUTHORIZATION-CODE>&session_state=<GUID>
    
  2. Acquisire il codice di autorizzazione dalla risposta. Per questa esercitazione, è possibile copiare il codice di autorizzazione dalla barra degli indirizzi del web browser e passarla nella richiesta POST all'endpoint di token come illustrato di seguito:

     curl -X POST https://login.microsoftonline.com/<TENANT-ID>/oauth2/token \
     -F redirect_uri=<REDIRECT-URI> \
     -F grant_type=authorization_code \
     -F resource=https://management.core.windows.net/ \
     -F client_id=<APPLICATION-ID> \
     -F code=<AUTHORIZATION-CODE>
    
    Nota

    In questo caso non è necessario codificare <REDIRECT-URI>.

  3. La risposta è un oggetto JSON che contiene un token di accesso (ad esempio, "access_token": "<ACCESS_TOKEN>") e un token di aggiornamento (ad esempio, "refresh_token": "<REFRESH_TOKEN>"). L'applicazione usa il token di accesso quando si accede all'Archivio Azure Data Lake e il token di aggiornamento quando un token di accesso scade per ottenerne un altro.

     {"token_type":"Bearer","scope":"user_impersonation","expires_in":"3599","expires_on":"1461865782","not_before":    "1461861882","resource":"https://management.core.windows.net/","access_token":"<REDACTED>","refresh_token":"<REDACTED>","id_token":"<REDACTED>"}
    
  4. Quando il token di accesso scade, è possibile richiederne uno nuovo tramite il token di aggiornamento come illustrato di seguito:

     curl -X POST https://login.microsoftonline.com/<TENANT-ID>/oauth2/token  \
          -F grant_type=refresh_token \
          -F resource=https://management.core.windows.net/ \
          -F client_id=<APPLICATION-ID> \
          -F refresh_token=<REFRESH-TOKEN>
    

Per altre informazioni sull'autenticazione utente interattiva, vedere Flusso di concessione del codice di autorizzazione.

Autenticazione da servizio a servizio (non interattiva)

In questo scenario, l'applicazione fornisce le proprie credenziali per eseguire le operazioni. A tale scopo, è necessario inviare una richiesta POST come quella riportata di seguito.

curl -X POST https://login.microsoftonline.com/<TENANT-ID>/oauth2/token  \
  -F grant_type=client_credentials \
  -F resource=https://management.core.windows.net/ \
  -F client_id=<CLIENT-ID> \
  -F client_secret=<AUTH-KEY>

L'output della richiesta include un token di autorizzazione (indicato da access-token nell'output riportato di seguito) che verrà passato successivamente con le chiamate API REST. Salvare questo token di autenticazione in un file di testo, che sarà necessario più avanti in questo articolo.

{"token_type":"Bearer","expires_in":"3599","expires_on":"1458245447","not_before":"1458241547","resource":"https://management.core.windows.net/","access_token":"<REDACTED>"}

Questo articolo usa l'approccio non interattivo . Per altre informazioni sull'autenticazione non interattiva (chiamate da servizio a servizio), vedere Chiamate da servizio a servizio tramite le credenziali.

Creare un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST definita qui.

Usare il comando cURL seguente. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X PUT -H "Authorization: Bearer <REDACTED>" -H "Content-Type: application/json" https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DataLakeStore/accounts/<yourstorename>?api-version=2015-10-01-preview -d@"C:\temp\input.json"

Nel comando sopra sostituire <REDACTED> con il token di autorizzazione recuperato in precedenza. Il payload della richiesta per questo comando è contenuto nel file input.json fornito per il parametro -d precedente. Il contenuto del file input.json è simile al seguente:

{
"location": "eastus2",
"tags": {
    "department": "finance"
    },
"properties": {}
}    

Creare delle cartelle in un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

Usare il comando cURL seguente. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X PUT -H "Authorization: Bearer <REDACTED>" -d "" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/?op=MKDIRS'

Nel comando sopra sostituire <REDACTED> con il token di autorizzazione recuperato in precedenza. Questo comando crea una directory denominata mytempdir nella cartella radice del proprio account Data Lake Store.

Se l'operazione viene completata correttamente, verrà visualizzata una risposta simile alla seguente:

{"boolean":true}

Elencare le cartelle in un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

Usare il comando cURL seguente. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X GET -H "Authorization: Bearer <REDACTED>" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS'

Nel comando sopra sostituire <REDACTED> con il token di autorizzazione recuperato in precedenza.

Se l'operazione viene completata correttamente, verrà visualizzata una risposta simile alla seguente:

{
"FileStatuses": {
    "FileStatus": [{
        "length": 0,
        "pathSuffix": "mytempdir",
        "type": "DIRECTORY",
        "blockSize": 268435456,
        "accessTime": 1458324719512,
        "modificationTime": 1458324719512,
        "replication": 0,
        "permission": "777",
        "owner": "NotSupportYet",
        "group": "NotSupportYet"
    }]
}
}

Caricare dati in un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

Usare il comando cURL seguente. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X PUT -L -T 'C:\temp\list.txt' -H "Authorization: Bearer <REDACTED>" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/list.txt?op=CREATE'

Nella sintassi precedente il parametro -T indica la posizione del file da caricare.

L'output è simile al seguente:

HTTP/1.1 307 Temporary Redirect
...
Location: https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/list.txt?op=CREATE&write=true
...
Content-Length: 0

HTTP/1.1 100 Continue

HTTP/1.1 201 Created
...

Leggere i dati da un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

La lettura dei dati da un account Archivio Data Lake è un processo in due fasi.

  • È prima necessario inviare una richiesta GET all'endpoint https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile.txt?op=OPEN. Verrà restituito un percorso a cui inviare la richiesta GET successiva.
  • È quindi necessario inviare la richiesta GET all'endpoint https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile.txt?op=OPEN&read=true. Verrà visualizzato il contenuto del file.

Tuttavia, dal momento che non esiste alcuna differenza nei parametri di input tra il primo e il secondo passaggio, è possibile usare il parametro -L per inviare la prima richiesta. -L combina essenzialmente due richieste in una e fa ripetere a cURL la richiesta nel nuovo percorso. Infine, viene visualizzato l'output di tutte le chiamate di richiesta, come illustrato di seguito. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -L GET -H "Authorization: Bearer <REDACTED>" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile.txt?op=OPEN'

L'output dovrebbe essere simile al seguente:

HTTP/1.1 307 Temporary Redirect
...
Location: https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/somerandomfile.txt?op=OPEN&read=true
...

HTTP/1.1 200 OK
...

Hello, Data Lake Store user!

Rinominare un file in un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

Per rinominare un file, usare il comando cURL seguente: Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X PUT -H "Authorization: Bearer <REDACTED>" -d "" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile.txt?op=RENAME&destination=/mytempdir/myinputfile1.txt'

L'output dovrebbe essere simile al seguente:

HTTP/1.1 200 OK
...

{"boolean":true}

Eliminare un file da un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST WebHDFS definita qui.

Utilizzare il comando cURL seguente per eliminare un file. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X DELETE -H "Authorization: Bearer <REDACTED>" 'https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/mytempdir/myinputfile1.txt?op=DELETE'

Verrà visualizzato un output simile al seguente:

HTTP/1.1 200 OK
...

{"boolean":true}

Eliminare un account Archivio Data Lake

Questa operazione si basa sulla chiamata API REST definita qui.

Usare il comando cURL seguente per eliminare un account Archivio Data Lake. Sostituire <yourstorename> con il nome di Data Lake Store.

curl -i -X DELETE -H "Authorization: Bearer <REDACTED>" https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DataLakeStore/accounts/<yourstorename>?api-version=2015-10-01-preview

Verrà visualizzato un output simile al seguente:

HTTP/1.1 200 OK
...
...

Vedere anche