Nachbesserungen Kapitel 7.8 und zugehöriges Script
This commit is contained in:
parent
4662f2ab83
commit
90f90a5fe7
|
@ -142,10 +142,9 @@ Wie Variante 1 mit folgenden Verbesserungen:
|
||||||
* Die IDs der zu verarbeitenden Projekte können nun an den Befehl zum Aufruf des Scripts angehängt werden. Wenn keine Projekt-IDs angegeben werden, dann werden diejenigen Projekte verarbeitet, deren Name mit dem Codewort (voreingestellt: ```TRANSFORM```) beginnt. Dazu werden die vorhandenen Projekte ausgelesen und daraus die Projektnummern mit einem grep-Befehl ausgefiltert und in eine Variable geschrieben.
|
* Die IDs der zu verarbeitenden Projekte können nun an den Befehl zum Aufruf des Scripts angehängt werden. Wenn keine Projekt-IDs angegeben werden, dann werden diejenigen Projekte verarbeitet, deren Name mit dem Codewort (voreingestellt: ```TRANSFORM```) beginnt. Dazu werden die vorhandenen Projekte ausgelesen und daraus die Projektnummern mit einem grep-Befehl ausgefiltert und in eine Variable geschrieben.
|
||||||
* Die anzuwendenden Transformationsdateien werden zu Beginn in einer Variable ```jsonfiles``` definiert (voreingestellt: 07_3.json und 07_5_minimal.json) und können direkt im Script geändert werden). Das Script wendet diese Transformationsdateien in der genannten Reihenfolge auf alle zu verarbeitenden Projekte an. Um Arbeitsspeicher zu schonen, wird der Docker-Container mit OpenRefine nach jeder Transformation neu gestartet.
|
* Die anzuwendenden Transformationsdateien werden zu Beginn in einer Variable ```jsonfiles``` definiert (voreingestellt: 07_3.json und 07_5_minimal.json) und können direkt im Script geändert werden). Das Script wendet diese Transformationsdateien in der genannten Reihenfolge auf alle zu verarbeitenden Projekte an. Um Arbeitsspeicher zu schonen, wird der Docker-Container mit OpenRefine nach jeder Transformation neu gestartet.
|
||||||
* Das Script lädt selbsttätig die aktuellen Transformationsdateien aus dem Script in Gitbook, d.h. aus dem Verzeichnis https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/ in das Arbeitsverzeichnis von OpenRefine und überschreibt ggf. gleichlautende Dateien.
|
* Das Script lädt selbsttätig die aktuellen Transformationsdateien aus dem Script in Gitbook, d.h. aus dem Verzeichnis https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/ in das Arbeitsverzeichnis von OpenRefine und überschreibt ggf. gleichlautende Dateien.
|
||||||
* Der Server wird für jedes Projekt einzeln gestartet und beendet, damit der Arbeitsspeicher nicht voll läuft.
|
|
||||||
* Statt der festen Wartezeit (sleep 15) erfolgt eine Abfrage, ob der Server erreichbar ist, bevor das Script fortschreitet. Das beschleunigt die Verarbeitung, wenn der Server schneller als in 15 Sekunden startet und beugt Fehlern vor, falls der Server ausgelastet ist und mal länger als 15 Sekunden braucht.
|
* Statt der festen Wartezeit (sleep 15) erfolgt eine Abfrage, ob der Server erreichbar ist, bevor das Script fortschreitet. Das beschleunigt die Verarbeitung, wenn der Server schneller als in 15 Sekunden startet und beugt Fehlern vor, falls der Server ausgelastet ist und mal länger als 15 Sekunden braucht.
|
||||||
* Am Ende werden zur Erfolgskontrolle die exportierten TSV-Dateien ausgegeben.
|
* Am Ende werden zur Erfolgskontrolle die exportierten TSV-Dateien ausgegeben.
|
||||||
* Das Script gibt die Konfigurationswerte sowie regelmäßig Start- und Endzeitpunkte aus.
|
* Das Script gibt die Konfigurationswerte, regelmäßig Start- und Endzeitpunkte und Statistiken zum Ressourcenverbrauch aus.
|
||||||
* Arbeitsverzeichnis, Port und maximaler Arbeitsspeicher für den OpenRefine-Server werden zu Beginn als Variable definiert (Standard: ```/home/stud/refine/```, ```8888```, ```3G```), was eine Anpassung später leichter macht.
|
* Arbeitsverzeichnis, Port und maximaler Arbeitsspeicher für den OpenRefine-Server werden zu Beginn als Variable definiert (Standard: ```/home/stud/refine/```, ```8888```, ```3G```), was eine Anpassung später leichter macht.
|
||||||
|
|
||||||
**Script als Datei: [transform+export.sh](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/scripte/transform+export.sh)**
|
**Script als Datei: [transform+export.sh](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/scripte/transform+export.sh)**
|
||||||
|
@ -158,11 +157,6 @@ Wie Variante 1 mit folgenden Verbesserungen:
|
||||||
* Script ausführbar machen: ```chmod +x transform+export.sh```
|
* Script ausführbar machen: ```chmod +x transform+export.sh```
|
||||||
* Script starten mit ```./transform+export.sh```
|
* Script starten mit ```./transform+export.sh```
|
||||||
|
|
||||||
Das Script gibt jetzt auch Rückmeldungen zum aktuellen Status, manche Meldungen sind aber vielleicht irritierend:
|
|
||||||
|
|
||||||
* Die Meldung "(23) Failed writing body" können Sie ignorieren, falls diese erscheinen sollte, das macht nichts ;-).
|
|
||||||
* Am Ende werden schließlich alle TSV-Dateien gelistet, die im Arbeitsverzeichnis liegen. Daher tauchen auch die TSV-Dateien aus der vorigen Aufgabe mit auf.
|
|
||||||
|
|
||||||
Prüfen Sie die transformierten Projekte im Browser. Dazu müssen Sie zunächst wieder OpenRefine manuell starten.
|
Prüfen Sie die transformierten Projekte im Browser. Dazu müssen Sie zunächst wieder OpenRefine manuell starten.
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,10 +204,18 @@ Projekt anlegen:
|
||||||
|
|
||||||
## Ergebnis
|
## Ergebnis
|
||||||
|
|
||||||
Die exportierte TSV-Datei im Ordner ```~/refine/``` ist das Endergebnis der Verarbeitung. Sie können diese Datei mit der vorher manuell erstellten Datei ```haw-prozessiert.tsv``` im Ordner ```~/tsv/``` vergleichen. Im Idealfall sollte das folgende Kommando keine Differenz zwischen den beiden Dateien feststellen können:
|
Die exportierte TSV-Datei im Ordner ```~/refine/``` ist das Endergebnis der Verarbeitung. Sie können diese Datei mit der vorher manuell erstellten Datei ```haw-prozessiert.tsv``` im Ordner ```~/tsv/``` vergleichen.
|
||||||
|
|
||||||
|
Anzahl der Zeilen vergleichen:
|
||||||
|
|
||||||
```
|
```
|
||||||
diff ~/refine/*.tsv ~/tsv/haw-prozessiert.tsv
|
wc -l ~/refine/*.tsv ~/tsv/haw-prozessiert.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
Spaltenüberschriften vergleichen:
|
||||||
|
|
||||||
|
```
|
||||||
|
head -n 1 ~/refine/*.tsv ~/tsv/haw-prozessiert.tsv
|
||||||
```
|
```
|
||||||
|
|
||||||
## Literatur
|
## Literatur
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Script zur Transformation und zum Export von Projekten mit OpenRefine
|
# Script zur Transformation und zum Export von Projekten mit OpenRefine
|
||||||
# Variante "Komfort", Stand: 06.01.2017
|
# Variante "Komfort", Stand: 08.01.2017
|
||||||
#
|
#
|
||||||
# Voraussetzungen:
|
# Voraussetzungen:
|
||||||
# 1. Docker
|
# 1. Docker
|
||||||
|
@ -14,13 +14,12 @@
|
||||||
# Codewort manuell in OpenRefine in den Namen der zu verarbeitenden Projekten aufnehmen
|
# Codewort manuell in OpenRefine in den Namen der zu verarbeitenden Projekten aufnehmen
|
||||||
# und Script ohne weitere Parameter starten.
|
# und Script ohne weitere Parameter starten.
|
||||||
# Beispiel: ./transform+export.sh
|
# Beispiel: ./transform+export.sh
|
||||||
#
|
codewort="TRANSFORM"
|
||||||
# Transformationen aus den folgenden Dateien werden (in dieser Reihenfolge) durchgeführt
|
|
||||||
# (bei Bedarf direkt hier im Script ändern)
|
# Transformationsregeln aus den folgenden Dateien werden (in dieser Reihenfolge) durchgeführt
|
||||||
jsonfiles=(07_3.json 07_5_minimal.json)
|
jsonfiles=(07_3.json 07_5_minimal.json)
|
||||||
|
|
||||||
# Weitere Programmvariablen
|
# Weitere Programmvariablen
|
||||||
codewort="TRANSFORM"
|
|
||||||
workdir="/home/stud/refine"
|
workdir="/home/stud/refine"
|
||||||
port=8888
|
port=8888
|
||||||
ram=3G
|
ram=3G
|
||||||
|
@ -52,7 +51,7 @@ sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data feli
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Warten bis Server vollständig gestartet ist
|
# Warten bis Server vollständig gestartet ist
|
||||||
until curl --silent http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 3; done
|
until curl --silent -N http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 1; done
|
||||||
|
|
||||||
# Abfrage der Projekt-IDs, wenn mit dem Startbefehl keine benannt wurden
|
# Abfrage der Projekt-IDs, wenn mit dem Startbefehl keine benannt wurden
|
||||||
if [ -z "$1" ]
|
if [ -z "$1" ]
|
||||||
|
@ -103,18 +102,26 @@ for projectid in "${projects[@]}" ; do
|
||||||
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
|
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
|
||||||
|
|
||||||
# Warten bis Server vollständig gestartet ist
|
# Warten bis Server vollständig gestartet ist
|
||||||
until curl --silent http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 3; done
|
until curl --silent -N http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 1; done
|
||||||
|
echo ""
|
||||||
|
|
||||||
# Transformationen durchführen
|
# Transformationen durchführen
|
||||||
for jsonfile in "${jsonfiles[@]}" ; do
|
for jsonfile in "${jsonfiles[@]}" ; do
|
||||||
echo "Transformiere mit ${jsonfile}..."
|
echo "Transformiere mit ${jsonfile}..."
|
||||||
|
# Meldungen aus Docker-Container refine-server ausgeben (Hintergrundprozess)
|
||||||
|
sudo docker attach refine-server &
|
||||||
|
# Transformation mit Python-Client anstoßen
|
||||||
sudo docker run --rm --link refine-server -v ${workdir}:/data felixlohmeier/openrefine:client-py -f ${jsonfile} ${projectid}
|
sudo docker run --rm --link refine-server -v ${workdir}:/data felixlohmeier/openrefine:client-py -f ${jsonfile} ${projectid}
|
||||||
# Neustart des Docker-Containers nach jeder Transformation, um Arbeitsspeicher zu schonen
|
# Statistik des Java-Prozesses
|
||||||
echo "Server neu starten ..."
|
echo "Statistik zum Ressourcenverbrauch..."
|
||||||
docker stop -t=500 ${dockername}
|
ps -o start,etime,%mem,%cpu,rss -C java
|
||||||
docker rm ${dockername}
|
# Neustart des Docker-Containers refine-server nach jeder Transformation, um Arbeitsspeicher zu schonen
|
||||||
|
echo "Projekt speichern und Server neu starten ..."
|
||||||
|
sudo docker stop -t=5000 refine-server
|
||||||
|
sudo docker rm refine-server
|
||||||
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
|
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
|
||||||
until curl --silent http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 3; done
|
until curl --silent -N http://localhost:${port} | cat | grep -q -o "OpenRefine" ; do sleep 1; done
|
||||||
|
echo ""
|
||||||
done
|
done
|
||||||
|
|
||||||
# Daten exportieren
|
# Daten exportieren
|
||||||
|
@ -123,7 +130,7 @@ for projectid in "${projects[@]}" ; do
|
||||||
|
|
||||||
# Server beenden und Container löschen
|
# Server beenden und Container löschen
|
||||||
echo "Server beenden und Container löschen..."
|
echo "Server beenden und Container löschen..."
|
||||||
sudo docker stop -t=500 refine-server
|
sudo docker stop -t=5000 refine-server
|
||||||
sudo docker rm refine-server
|
sudo docker rm refine-server
|
||||||
|
|
||||||
echo "Ende Projekt $projectid @ $(date)"
|
echo "Ende Projekt $projectid @ $(date)"
|
||||||
|
|
Loading…
Reference in New Issue