Goofys

von Simon Wilper am Sonntag, 6. September 2020

Darum geht es

Sie kennen das: Jemand hat jeglich Webdienste und Dienste zum Vorverarbeiten von Daten in die Microsoft Azure Cloud in Form von virtuellen Maschinen und sogenannten Azure Functions verlegt. Dazu gibt es dann noch den Azure Datalake, einem Storage-Dienst um Rohdaten abzuspeichern.

Das Problem hierbei ist, dass man für den Zugriff auf diesen Datalake ein Tool von Microsoft brauch, das deren Datalake-Web-API bedient, obwohl es am Ende nichts anderes als eine Festplatte ist.

Somit wäre es doch ein opportune Angelegenheit, wenn es ein FUSE-basiertes Tool gäbe, das den Datalake als normales mount-bares Dateisystem behandelt.

Die Lösung

Vor Kurzem hat mir mein Kollege (Danke, Markus) das Programm Goofys vorgeschlagen, um den Zugriff auf unseren Datalake zu vereinfachen. Das hat hervorragend funktioniert. Wir haben ein komplettes Backup unserer fast 1TB Daten durchgeführt und es gab keine Verbindungsabbrüche.

Wir haben uns erhofft, damit natürlich dann auf die Azure-Client-Tools verzichten zu können, was uns aber leider verwehrt blieb, da es für die Datalakes keine Verbindungszeichenfolge (wie etwa für Blob-Storages) existieren. Man muss sich erst über das Azure-Command-Tool "az" anmelden.

Naja, man kann nicht alles haben.

Voraussetzungen

Wir brauchen zwei Pakete:

Je nach Distribution kann die Installation unterschiedlich ausfallen. Bei Archlinux z.B. gibt es beide Pakete nicht in den offiziellen Repositories und müssen über das AUR installiert werden.

Bei Ubuntu gibt es azure-cli immerhin im offiziellen Repo, goofys am besten einfach als x86-binary direkt herunterladen.

Bei voidlinux... oh boy... hat sich noch niemand dazu berufen gefühlt Pakete zu bauen. ;) Naja, das kann sich ja noch ändern.

Auf jeden Fall sollte man bei Eingabe von az --version ungefähr folgende Ausgabe bekommen:

azure-cli                         2.11.1

core                              2.11.1
telemetry                          1.0.6

Python location '/opt/azure-cli/bin/python'
Extensions directory '/home/sxw/.azure/cliextensions'

Python (Linux) 3.8.5 (default, Jul 27 2020, 08:42:51) 
[GCC 10.1.0]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.

Please let us know how we are doing: https://aka.ms/azureclihats
and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy

und bei goofys --version:

goofys version 0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88

So funktioniert es

Wie bereits erwähnt müssen wir uns bei Microsoft Azure erstmal anmelden:

[sxw@archeus] [~] > az login

Wenn die Shell in einer grafischen Umgebung läuft (also, in so etwas wie in einer XTerm) wird sofort ein Webbrowser geöffnet, der die Login-Seite aufruft. Ruft man den Befehl hingegen in einer SSH-Shell auf, wird eine URL ausgegeben, die man manuell aufrufen und den angegebenen Code eingeben muss.

Nach erfolgreichem Login wird eine JSON-Liste mit allen verfügbaren Subscriptions ausgegeben, die etwa folgendermaßen aussieht:

[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "f88555d1-8ccb-48ea-af9c-c6b2b24e4fe7",
    "id": "f372136a-12de-67a7-60c8-d23483247320",
    "isDefault": true,
    "managedByTenants": [
      {
        "tenantId": "2f232332-22b7-422e-b220-c33343234353"
      }
    ],
    "name": "SKYNET.Node.0000.0001",
    "state": "Enabled",
    "tenantId": "f88555d1-8ccb-48ea-af9c-c6b2b24e4fe7",
    "user": {
      "name": "marcus.wright@skynet.com",
      "type": "user"
    }
  }
]

Nun, da wir eingeloggt sind, können wir uns die Datalakes, auf die wir Zugriff haben auflisten lassen:

[sxw@archeus] [~] > az dls account list

Das könnte uns allerdings die Konsole mit JSON vollmüllen, je nachdem, wie viele Lakes dort herumlungern. Da wir nur am Namen interessiert sind, kann man die Ausgabe von JSON nach "tab separated values" umschalten und durch awk pipen:

[sxw@archeus] [~] > az dls account list --output tsv | awk '{print $3}'
skynetcentral01.azuredatalakestore.net
t800production01.azuredatalakestore.net

Jetzt müssen wir nur noch wissen, ob es sich bei unserem Lake, auf den wir zugreifen wollen um einen Gen1 oder Gen2 Lake handelt. Dazu kurz die Azure Portal Webseite und dann die Datalake-Übersichtsseite geöffnet:

Datalake Generation Screenshot

Alles klar, für einen Gen1-Datalake können wir diesen jetzt mit goofys mounten. Dazu nehmen wir einfach die URL mit dem Datalake-Namen, und setzen ein adl:// davor:

[sxw@archeus] [~] > goofys adl://dlindigolaiarchivedev01.azuredatalakestore.net mnt
[sxw@archeus] [~] > ls mnt
total 32K
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 Nodes
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 T-800
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 T-1000
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 Production-Data
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 Manuals
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 Turbo-Encabulator-4.0
drwxr-xr-x 2 sxw mco 4,0K  6. Sep 21:12 temp

Und schon können wir den Datalake als klassisches Filesystem benutzen.