26.02.2014 Aufrufe

LinuxUser Skripten und Coden (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

GNU Parallel<br />

Schwerpunkt<br />

chen packen lässt, sieht der Archivierer<br />

nicht die komplette Datei <strong>und</strong> packt sie<br />

daher nicht ganz so effizient. Wie groß<br />

die Abweichungen ausfallen, hängt von<br />

den zu komprimierenden Daten ab.<br />

Falls Ihnen die parallele Bearbeitung immer<br />

noch nicht schnell genug abläuft,<br />

kann GNU Parallel auch noch weitere<br />

Computer im Netzwerk einspannen.<br />

Dann verkleinert jeweils ein anderer Rechenknecht<br />

jedes Urlaubsfoto. Damit<br />

das funktioniert, müssen Sie sich via SSH<br />

auf den entfernten Computer ohne die<br />

Eingabe eines Passwortes anmelden<br />

können. Dabei hilft beispielsweise das<br />

Programm ssh‐agent û.<br />

Des Weiteren muss lokal noch Rsync<br />

<strong>und</strong> auf den entfernten PCs jeweils GNU<br />

Parallel installiert sein. Letzteres ist notwendig,<br />

damit die Software die Anzahl<br />

der Prozessoren ermitteln kann, Rsync<br />

dient zum Übertragen der Daten. Der<br />

folgende Befehl prüft, ob das Tool Zugriff<br />

auf die Rechner mit den IP-Adressen<br />

192.168.2.11 <strong>und</strong> 192.168.2.12 hat:<br />

$ parallel ‐‐sshlogin 192.168.2.1U<br />

1,192.168.2.12 'hostname; echo' :U<br />

:: 1 2<br />

GNU Parallel meldet sich damit per SSH<br />

auf den beiden Rechnern an, startet dort<br />

jeweils das Programm Hostname <strong>und</strong><br />

liefert dessen Ausgaben zurück 6 . Das<br />

echo dient dabei als kleine Hilfe: GNU<br />

Parallel startet den Befehl ja für jeden<br />

hinter ::: aufgelisteten Parameter – doch<br />

hostname verlangt gar keine Parameter.<br />

Abhilfe schafft das angehängte, harmlose<br />

echo, das der obige Befehl einfach<br />

eine Zahl ausgeben lässt. Die zwei Zahlen<br />

schließlich sind noch notwendig, damit<br />

GNU Parallel beide Rechner kontaktiert.<br />

Stünde dort lediglich die 1, würde<br />

das Tool den Befehl hostname; echo nur<br />

auf einem der Computer ausführen.<br />

Anstelle der IP-Adressen dürfen Sie die<br />

Hostnamen verwenden, weitere Rechner<br />

hängen Sie durch Kommata getrennt<br />

hintereinander. Abweichende Login-<br />

Namen stellen Sie wie von SSH gewohnt<br />

mit einem Klammeraffen (@) vor den<br />

Rechnernamen. Klappt die Kontaktaufnahme,<br />

beginnt die Arbeit.<br />

Das dazu notwendige, etwas längliche<br />

Kommando zeigt Listing 3. Hier greift<br />

sich GNU Parallel die nächste Bilddatei<br />

<strong>und</strong> kopiert sie (‐‐transfer) auf einen<br />

der Computer. Dort setzt es dann das<br />

Kommando mogrify ‐resize 50% auf<br />

die Datei an. Anschließend holt GNU Parallel<br />

die Datei wieder zurück (‐‐return<br />

{}) <strong>und</strong> löscht die Kopie auf dem entfernten<br />

Rechner (‐‐cleanup).<br />

Um den gesamten Befehl übersichtlich<br />

zu halten, überschreiben mogrify<br />

<strong>und</strong> GNU Parallel hier wieder einfach die<br />

Originaldateien. Da die drei Parameter<br />

‐‐transfer, ‐‐return <strong>und</strong> ‐‐cleanup in<br />

der Praxis häufig zum Einsatz kommen,<br />

dürfen Sie sie mit ‐‐trc abkürzen.<br />

Bei solchen verteilten Berechnungen<br />

im Netzwerk stellen die Verbindungen<br />

den Flaschenhals dar. So dauert der<br />

Transfer von <strong>und</strong> zu den Rechnern unter<br />

Umständen länger als das Bearbeiten<br />

auf dem lokalen PC. Die verteilte Berechnung<br />

lohnt daher meist nur, wenn diese<br />

Berechnungen umfangreich sind beziehungsweise<br />

besonders lange dauern.<br />

Fazit<br />

GNU Parallel spielt seine Stärken immer<br />

dann aus, wenn sich eine rechenintensive<br />

Aufgabe in mehrere, voneinander<br />

unabhängige Teilaufgaben zerlegen<br />

lässt. In Bash-<strong>Skripten</strong> können Sie häufig<br />

For- <strong>und</strong> While-Schleifen mit GNU Parallel<br />

beschleunigen, wie etwa im Beispiel mit<br />

den Bildern ganz zu Beginn des Artikels.<br />

Angenehmer Nebeneffekt: Die Kommandos<br />

lassen sich dank GNU Parallel<br />

auch noch wesentlich besser lesen.<br />

Listing 3<br />

Das kleine Werkzeug kennt noch unzählige<br />

weitere nützliche Parameter <strong>und</strong><br />

Funktionen, deren Beschreibung ein ansehnliches<br />

Buch füllen würden. Wer zum<br />

ersten Mal mit Parallel arbeitet, sollte<br />

sich daher erst die Beispiele im Handbuch<br />

ansehen û.<br />

Übrigens haben wir in den Beispielen<br />

etwas gemogelt: Mogrify muss nicht,<br />

wie zu Beginn des Artikels, in einer For-<br />

Schleife stecken, sondern bearbeitet<br />

selbst mehrere Dateien. Es nutzt dabei<br />

sogar automatisch mehrere Prozessorkerne.<br />

GNU Parallel ist folglich auch keine<br />

Allzweckwaffe. Sie sollten vor seinem<br />

Einsatz immer prüfen, ob die von Ihnen<br />

aufgerufenen Kommandozeilenbefehle<br />

nicht schon von sich aus mehrere Kerne<br />

nutzen. (jlu) n<br />

Weitere Infos <strong>und</strong><br />

interessante Links<br />

www. linux‐user. de/ qr/ 28516<br />

6 Das Kommando<br />

echo<br />

hilft dabei, jeden<br />

der angegebenen<br />

Server<br />

anzusprechen.<br />

01 parallel ‐‐sshlogin hans@192.168.2.11,peter@192.168.2.12<br />

‐‐transfer ‐‐return {} ‐‐cleanup mogrify ‐resize 50% {} ::: *.tif<br />

06.2013 www.linux-user.de<br />

17

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!