Lucidworks Big Data & Oozie Workflow mit VizOozie
In diesem Beitrag erfahren Sie, wie Sie ein visualisiertes Workflow-Diagramm für Oozie erstellen können. Oozie ist ein Workflow-Management-System für Hadoop-Jobs.…
In diesem Beitrag erfahren Sie, wie Sie ein visualisiertes Workflow-Diagramm für Oozie erstellen können. Oozie ist ein Workflow-Management-System für Hadoop-Jobs. Oozie Workflow-Jobs sind DAGs (Directed Acyclical Graphs) von Aktionen: http://oozie.apache.org
Bei Lucidworks verwenden wir Oozie in unserem Produkt Lucidworks Big Data. Die Workflows, die wir mit der Plattform bereitstellen, werden mit Oozie konfiguriert und ausgeführt. Die Entwickler erstellen workflow.xml, Workflow-Definitionsdateien für Oozie, und stellen sie in Hadoop bereit. Eine gute Erklärung, wie das funktioniert, finden Sie hier:http://www.infoq.com/articles/oozieexample
Manche Workflows werden schnell kompliziert und können Sub-Workflows, Forks und Joins und andere Aktionen enthalten, die in XML nur schwer zu verfolgen sind. Ein Visualisierungstool würde dann dabei helfen, das Design von Workflows zu rationalisieren und schnell zu erfassen, was der Workflow im Wesentlichen tut.
VizOozie ist ein Open-Source-Tool, das Ihnen hilft, Ihre statischen xml-Workflow-Definitionen in Dot-Dateien zu konvertieren, die vom Graphviz-Dot-Programm zur Erstellung von pdf oder anderen Formaten verwendet werden können: http://www.graphviz.org/
Sie benötigen eine Unix-ähnliche Umgebung, Python und Graphviz Dot, um dies auszuführen.
Probieren Sie es von github aus und führen Sie es aus:
python vizoozie/vizoozie.py example/workflow.xml example/workflow.dot
oder verwenden Sie Ihre eigene Oozie-Workflow-xml-Datei.
Dadurch wird eine Dot-Datei erzeugt, die mit Dot leicht in ein PDF-Dokument konvertiert werden kann:
dot -Tpdf example/workflow.dot -o example/workflow.pdf
Für die Start-, End-, Prozess-, Join-, Fork- und Entscheidungsknoten werden Standard-Workflowformen verwendet. Die Farben der Aktionsknoten sind in der Datei vizoozie.properties konfigurierbar (z.B. ist die Java-Aktion blau).
Der Code ist ziemlich einfach. Er nimmt jeden Knotentyp und konvertiert xml mit xml.dom.minidom in einen Punktstring und gibt ihn aus. Nehmen wir zum Beispiel einen XML-Ausschnitt:
<fork name="post-process"> <path start="complex-math" /> <path start="more-complex" /> <path start="geek-candy-process" /> </fork>
Der Code für einen Fork-Knoten sieht wie folgt aus:
def processFork(self, doc): output = '' for node in doc.getElementsByTagName("fork"): name = self.getName(node) output += 'n' + name.replace('-', '_') + " [shape=octagon];n" for path in node.getElementsByTagName("path"): start = path.getAttribute("start") output += 'n' + name.replace('-', '_') + " -> " + start.replace('-', '_') + ";n" return output
In dieser Methode werden lediglich die Knotennamen mit name.replace(‚-‚, ‚_‘) normalisiert und eine bestimmte Knotenform eingefügt (shape=octagon). Dann wird einfach nach den Startpfaden des Forks gesucht, wie hier: <path start=“complex-math“ />. In unserem obigen Beispiel wird diese Methode eine Ausgabe wie diese erzeugen:
post_process [shape=octagon]; post_process -> complex_math; post_process -> more_complex; post_process -> geek_candy_process;
Wenn Sie es mit dem Programm dot verwenden, erzeugt es einen Gabelknoten mit drei Unterknoten. Ich hoffe, Sie finden diese Erklärung nützlich.
IP