Hallo, hier ein kurzer Erfahrungsbericht aus den letzten Monaten, um mit große Datenmengen auf mehreren VMs zu arbeiten.
Warum haben wir große Datenmengen?:
Wir produzieren deutschlandweite Produkte aus Fernerkundungsdaten für die Landwirtschaft. Dafür benötigen wir gut vorprozessierte analysefertige Sentinel-Daten. So wie die Daten jedoch auf CODE-DE bereitgestellt werden, wäre es sehr aufwändig deutschlandweite Produkte zu produzieren. Wir haben deswegen das gesamte S2-Archiv von CODE-DE nochmals komplett weiter prozessiert, damit wir analysefertige Datensätze haben (10 Bänder, resampling auf 10 m, wolkenmaskiert, nichtüberlappende 10km-Kacheln, Wolkenbedeckungsgrade in Metadaten). Nun liegen Stand heute (10.11.2022) 42 TB an Sentinel-2 Daten auf einer unserer Maschinen. Diese Daten sollen aber auf jeder Maschine im CODE-DE-Kontingent verfügbar sein.
Es kommt natürlich immer darauf an, was man machen möchte.
Wir nutzen 3 verschiedenen Methoden um mit den Daten auf verschiedenen VMs (alles Ubuntu) zu arbeiten.
1. RSYNC zum kopieren von Daten auf andere Maschinen
rsync
synchronisiert Daten zwischen zwei Ordnern, auch von einer Maschine zur anderen. Der Befehl dafür lautet:
nohup rsync -ratlz --progress --rsh="/usr/bin/sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no -l USER" /path/to/data/ 10.0.0.XXX:/path/to/remote/directory/ > /path/for/logfile/log_file_name.log 2>&1 &
rsync -ratlz
rsync ist das eigentliche Kommando, was mit den zusätzlichen Optionen -ratlz
ausgeführt wird. Infos zu den Optionen hier: https://wiki.ubuntuusers.de/rsync/
rsync –progress
progress zeigt den aktuellen Verlauf des Kopiervorganges an.
--rsh="/usr/bin/sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no -l USER"
Im Hintergrund wird eine ssh Verbindung aufgebaut, wofür die sofware sshpass genutzt wird. USER
ist hier der Benutzername der Zielmaschine u nd dessen PASSWORT
.
path/to/data/
Pfad zu den Daten, die kopiert wereden sollen.
10.0.0.XXX:/path/to/remote/directory/
IP-Adresse zur Zielmaschine und Pfad, wo die Daten hin kopiert werden sollen.
nohup process > logfile 2>&1 &
(optional!)
Mit nohup startet man Prozesse, die im Hintergund laufen. Man kann nach der Ausführung die Verbindung zur VM schließen und der Prozess läuft weiter. Der Fortschritt wird in die Log-File geschrieben, die mit tail -f /path/to/logfile.log
überwacht werden kann.
/path/for/logfile/log_file_name.log
Pfad, wo die Logfile abgespeichert werden soll
2. NFS zur langfristigen Bereitstellung von Daten auf anderen Maschinen
Mit NFS kann ein Ordner von einer Maschine (host) auf einer anderen direkt in die Ordnerstruktur einer anderen Maschine (client) eingebunden werden.
Hier eine Kurzanleitung, wie die NFS-Verbindung aufgebaut wird:
host side
(Die Maschine, wo die Daten liegen.)
- benötigte Software-Produkte:
sudo apt-get update && sudo apt-get install nfs-kernel-server nfs-common
sudo nano /etc/exports
add lines like the following to define the permissions in the network
read/write permissions to specific client: /path/to/folder/host_folder 10.0.0.XXX(rw,async,no_subtree_check,no_root_squash)
only read permissions to specific client: /path/to/folder/host_folder 10.0.0.XXX(ro,async,no_subtree_check,no_root_squash)
sudo exportfs -arvf
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
sudo systemctl status nfs-kernel-server
client side
(Die Maschine, wo die Daten verwendet werden sollen.)
- benötigte Software-Produkte:
sudo apt-get update && sudo apt-get install nfs-common
- create new folder
sudo mkdir /path/to/your/folder/client_folder
- in
sudo nano /etc/fstab
add following line to the bottom
10.0.0.XXX:/path/to/the/host_folder /path/to/the/client_folder nfs defaults,_netdev 0 0
sudo reboot
3. S3 buckets zur langfristigen Bereitstellung von Daten auf CODE-DE und darüber hinaus
CODE-DE stellt auch sogenannten object store zur Verfügung. Das charmante an den objects storages ist, dass man sehr einfach einen öffenlichen Link zur Verfügung stellen kann, ohne eine seiner Virtuellen Maschinen im Internet sichtbar machen zu müssen. Die S3-Buckets sind daher das ideale Mittel große Mengen an Daten mit Partnern zu teilen.
In diesem Speicher können Container (Ordner) erstellt werden. In der CODE-DE Hilfe kann man beides finden, wie ein Container erstellt wird und wie man diesen in seine Maschine einbindet:
Create S3 bucket on CODE-DE
SOURCE here
Mount S3 bucket as folder in your Virtual machine
SOURCE here
Das Einbinden des S3-Buckets in die Ordnerstuktur, sowie das Kopieren und Lesen erwies sich jedoch bei unseren Tests als sehr fehleranfällig. Daher nutzen wir eine Python API für das Verwalten und die Nutzung der Buckets. Das Python-Paket hierfür heißt boto3.