2016-04-04 7 views
1

Wir beginnen gerade mit der Auswertung des Datalake-Dienstes bei Azure. Wir haben unseren See erstellt, und über das Portal können wir die zwei öffentlichen URLs für den Dienst sehen. (Eine ist ein https: // Schema, die andere ein adl: // Schema)Zugriff auf Azure Datalake über die API webhdfs

Die Datalake Dokumentation besagt, dass es tatsächlich zwei Schnittstellen gibt: webHDFS REST API und ADL. Also nehme ich an, dass das https: // Schema mir die wehHDFS-Schnittstelle bringt. Ich kann jedoch bei Azure keine weiteren Informationen zur Verwendung dieser Schnittstelle finden.

Ich habe versucht, an der angegebenen https: // URL, mit Web-Browser und Curl stochern. Der Dienst reagiert. Antworten sind JSON, was erwartungsgemäß ist, da eine Datenquelle eine Instanz von Hadoop ist. Ich bekomme jedoch anscheinend keinen Zugriff auf meine Dateien, die ich über das Portal in unseren See hochgeladen habe.

Wenn ich eine GET zu "/ foo.txt", zum Beispiel, die Antwort ist ein Fehler, ResourceNotFound.

Wenn ich ein GET mit der typischen Hadoop-HDFS-Syntax "/webhdfs/v1/foo.txt" verwende, ist die Antwort ein Fehler, AuthenticationFailed. Zusätzlicher Text weist auf ein fehlendes Zugriffs-Token hin. Dies scheint vielversprechender zu sein. Sie können jedoch nichts über das Generieren eines solchen Zugriffstokens finden.

Es gibt einige Dokumentation zur Verwendung der ADL-Schnittstelle und .NET und Visual Studio, aber das ist nicht, was ich will, zunächst.

Jede Hilfe sehr geschätzt!

+0

Können Sie Ihre 'curl' Befehle hier posten? – vmachan

Antwort

2

Ich bin zu this forum post von Matthew Hicks verpflichtet, die beschrieben, wie man das mit curl tut. Ich nahm es und wickelte es in PowerShell. Ich bin mir sicher, dass es viele Möglichkeiten gibt, dies zu erreichen, aber hier ist eine, die funktioniert.

Zuerst setup an AAD application, so dass Sie die unten genannten client_id und client_secret ausfüllen können. (Das setzt voraus, dass Sie dies automatisieren möchten, anstatt eine interaktive Anmeldung zu haben. Wenn Sie eine interaktive Anmeldung wünschen, dann gibt es einen Link zu diesem Ansatz im obigen Beitrag.)

Dann füllen Sie die Einstellungen in den ersten 5 Zeilen aus und führen Sie das folgende PowerShell-Skript aus:

$client_id = "<client id>"; 
$client_secret = "<secret>"; 
$tenant = "<tenant>"; 
$adlsAccount = "<account>"; 
cd D:\path\to\curl 

#authenticate 
$cmd = { .\curl.exe -X POST https://login.microsoftonline.com/$tenant/oauth2/token -F grant_type=client_credentials  -F resource=https://management.core.windows.net/  -F client_id=$client_id  -F client_secret=$client_secret }; 
$responseToken = Invoke-Command -scriptblock $cmd; 
$accessToken = (ConvertFrom-Json $responseToken).access_token; 

#list root folders 
$cmd = {.\curl.exe -X GET -H "Authorization: Bearer $accessToken" https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS }; 
$foldersResponse = Invoke-Command -scriptblock $cmd; 
#loop through directories directories 
(ConvertFrom-Json $foldersResponse).FileStatuses.FileStatus | ForEach-Object { $_.pathSuffix } 

#list files in one folder 
$cmd = {.\curl.exe -X GET -H "Authorization: Bearer $accessToken" https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/?op=LISTSTATUS }; 
$weatherResponse = Invoke-Command -scriptblock $cmd; 
(ConvertFrom-Json $weatherResponse).FileStatuses.FileStatus | ForEach-Object { $_.pathSuffix } 

#download one file 
$cmd = {.\curl.exe -L "https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/2007small.csv?op=OPEN" -H "Authorization: Bearer $accessToken" -o d:\temp\curl\2007small.csv }; 
Invoke-Command -scriptblock $cmd; 


#upload one file 
$cmd = {.\curl.exe -i -X PUT -L "https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/new2007small.csv?op=CREATE" -T "D:\temp\weather\smallcsv\new2007small.csv" -H "Authorization: Bearer $accessToken" }; 
Invoke-Command -scriptblock $cmd; 
+0

Wunderbar! Zwischen den angegebenen Links und Ihren Beispielen beginnt es zu klären. Wie erläutert, erhalten wir zunächst ein Autorisierungs-Token über AAD. Sobald ein Token erhalten wurde, wird auf den Dienst gemäß der Standard-HDFS-Syntax zugegriffen, wobei der Header-Zusatz den Token sendet. Macht Sinn. In diesem Forum habe ich die zusätzliche Frage hinzugefügt: Kann Ihr Datalake so konfiguriert werden, dass er überhaupt keine Autorisierung benötigt? – RickS

+0

@RickS das ist eine gute Frage. Ich weiß nicht, wie man den anonymen Zugang einrichtet. Wenn Sie es herausfinden, bitte posten Sie hier zurück. – GregGalloway

Verwandte Themen