GNU Parallel

GNU Parallel

"wget http://ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2"
"tar -xf parallel-latest.tar.bz2"
"cd parallel-20160622/"
"./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include"
"make"
"make install"
"parallel --citation"
	"will cite"

"parallel -V"

#Test
time parallel md5sum {} ::: *.iso
time find *.iso -type f | parallel -j 2 md5sum
time parallel wget --no-check-certificate ::: www.kernel.org/pub/linux/kernel/v3.x/linux-3.11.tar.xz www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.xz
parallel gzip ::: *.log

###############################################################################################
#Prozesse Parallelisieren (zumindest mehrer Prozesse mit unterschiedlichen Argumenten gleichzeitig starten)
"time find *.iso -type | parallel -j 24 md5sum" = Keine Zeitlich Signifikanten unterschide zu xargs
#Geschwindigkeitsvergleich
"time ( seq 1000 | xargs -n 1 echo | wc -l )"
	1000
	real    1m8.835s
	user    0m0.075s
	sys     0m0.299s
"time ( seq 1000 | parallel echo | wc -l )"
	1000
	real    0m19.959s
	user    0m3.848s
	sys     0m5.177s
#Unterschied zwischen parallel und xargs
"time find *.iso -type f | parallel md5sum" = erstellt zwei separate Prozesse
	19687 root      20   0    4512   1328   1240 D 6.645 0.034   0:03.14 md5sum openSUSE-13.2-DVD-x86_64.iso                                                                             
	19688 root      20   0    4512   1384   1296 D 6.645 0.035   0:03.06 md5sum openSUSE-Leap-42.1-DVD-x86_64.iso                                                                        

"time find *.iso -type f -print | xargs -P 0 md5sum" = Zwei Argumente werden übergeben.
	21046 root      20   0    4512   1292   1204 D 15.23 0.033   0:03.94 md5sum openSUSE-13.2-DVD-x86_64.iso openSUSE-Leap-42.1-DVD-x86_64.iso                                
real    2m47.517s
user    0m23.346s
sys     0m4.209s
###############################################################################################

###############################################################################################
#Mulitple Nodes find pattern in file on shared storage. Zuvor SSH RSA Key austauschen.
#falls bei vielen Kernen viele Job gestartet werden können.
vi /etc/ssh/sshd_config ->
	MaxStartups 60
	
vi host_file.txt ->
	#CPU 1
	user@host
	#CPU 1
	user@host
	#CPU 8. benutzt 6 Cores
	6/user@host
	#CPU 6. benutzt 2 Cores
	4/user@host
	#CPU 88. benutzt 44 Cores
	44/user@host
	#CPU 72. benutzt 36 Cores
	36/user@host

#"find" liefert 3 Dateien und diese werden an zwei Rechner mit jeweis 1 Core verteilt. Wobei ein Server zwei Job bearbeitet.
time find /mnt/cd_save/temporaer/AOOR/proxy_logs/SG_main__10312081* -type f | ./parallel -P 3 --sshloginfile hosts 'zgrep -iE "*149.249.158.30*" '
	#--jobs 100% = vergibt jeder verfügbaren CPU 100 % Rechenleistung zum suchen der pattern
	time find /mnt/cd_save/temporaer/AOOR/proxy_logs/Nach_2017_12_20_1500/SG_main__10312210* -type f | ./parallel --jobs 100% --sshloginfile hosts 'zgrep -iE "*149.249.158.30*" '
	#Zeigt den Core Status
	time find /mnt/cd_save/temporaer/AOOR/proxy_logs/Nach_2017_12_20_1500/SG_main__10312210* -type f | ./parallel --progress --jobs 100% --sshloginfile hosts 'zgrep -iE "*149.249.158.30*" '
	#mit Job Log
	time find /root/temp/wordlist/wordsEn.txt -type f | parallel --progress --jobs 100% --joblog /tmp/joblog.txt --sshloginfile /root/temp/hack/parallel_nodes.txt 'grep -i zymoscope'
	
Dateninhalt analysieren. Der Nachteil bei dieser Methode ist, das alle Nodes dieselbe Datei von Anfang bis Ende analysieren, also doppelte Arbeit :-(
"cat /root/temp/wordlist/wordsEn.txt | parallel --progress --joblog /tmp/joblog.txt --jobs 100% --sshloginfile /root/temp/hack/parallel_nodes.txt --pipe "grep zymoscope" "

Besser die zu analysierende Datei, gemäß der Anzahl der zur Verfügung stehen Kerne aufspillten.
"split -n 4 -d wordsEn.txt wordsEn.txt."
"time find /root/temp/wordlist/wordsEn.txt.* -type f | parallel -v --progress --jobs 100% --joblog /tmp/joblog.txt --sshloginfile /root/temp/hack/parallel_nodes.txt 'grep -i zymoscope'"
	#Files senden, falls kein shared storage zur Verfügung steht.
	"time find /root/temp/hack/wordlist/wordsEn.txt.* -type f | parallel -v --transferfile {} --cleanup --progress --jobs 100% --sshloginfile /root/temp/hack/parallel_nodes.txt  'grep -i zymoscope' "

Noch besser "parallel" das aufspillten bzw. Prozess Paralleisierung der Daten zu überlassen. Bei sehr großen Files ist es sinnvoll diese auf einem shared storgae zu lagern.
	"--pipepart" Spread input to jobs on stdin (standard input). Read a block of data from a physical file (given by -a) and give one block of data as input to one job. https://www.upf.edu/web/sct-sit/gnu-parallel-tutorial"
" time parallel --progress --joblog /tmp/joblog.txt --jobs 100% --sshloginfile /root/temp/hack/parallel_nodes.txt --pipepart -a /root/temp/wordlist/weakpass_2a --block 100M "grep <SUCHMUSTER>" "
	
"cat /tmp/joblog.txt | column -t"
	um zu sehen welche Node oder welcher File das Suchmuster gefunden hat.
	In der Spalte "Receive" muss eine Zahl stehen und dort ist abzulesen welche Node das Ergebnis gefunden hatt

###############################################################################################
https://www.gnu.org/software/parallel/man.html
###############################################################################################
Parameter

--eta = Zeigt die voraussichtliche Zeit der bearbeitung an.
--progress = Laufstatus anzeigen
--joblog /tmp/joblog.txt = Job Log schreiben
--jobs 100% = 100% der zur Verfügung stehen CPU Last nutzen
--sshloginfile /root/temp/hack/parallel_nodes.txt = Nodes File
--pipepart -a /root/temp/wordlist/weakpass_2a --block 100M "grep <SUCHMUSTER>" = Teilt einen File im 100M Stücke zur Bearbeitung an die Nodes und sucht ein Muster innerhalt des Files.
###############################################################################################

Post Revisions: