Skip to content
Andrea Notroff edited this page Sep 22, 2017 · 6 revisions

Notizen zum Hackathon

Vision

Wie können wir in möglichst kurzer Zeit (möglichst in Echtzeit) Ad-hoc-Analysen und -Transformationen auf grosse Mengen von (Meta-)Daten machen und den Workflow bei Bedarf mit möglichst wenig technischem Hintergrundwissen umstellen?

Key words:

  • Distributed Low-Latency Data Analysis
  • Interactive Data-Processing Queries

Description:

  • Wir möchten interaktive data-processing queries erstellen / möchten die Möglichkeit anbieten, interaktiv data-processing patterns zu erforschen
  • Dazu nutzen wir Zeppelin (Jupyter?)
    • ist interaktiv, zum kleinschrittigen Ausprobieren
    • visualisiert die Query-Ergebnisse
  • Basis der queries ist die "data-processing infrastructure" von swissbib. Diese basiert auf streaming Technologien (Flink, Spark)

Data

Swissbib bibliographical data

  • MARC21 XML Format
  • stored in Mongo DB? (Rohdatenexport, Formate)
  • CBS?
  • SRU-Schnittstelle

edoc Basel data

A similar case? edocs by BBAW (Berlin-Brandenburgische Akademie der Wissenschaften):

crossref data

Use Cases (to be decided around July 10)

Unique holdings (Fallback)

As a library, I want to know which of my holdings are nowhere else to be found. For example, for prioritizing which of our holdings should be digitized most urgently.

Profile of holdings (Bestandsprofile)

13.07., Silvia

As a librarian, I want to know what is special about the holdings of some library/institution. E.g., ... (?)

(any more details about this use case?)

Enriching a set of data about open access publications

13.07., Dominique

I want to add missing data to a set of open access publication data. E.g., I want to add the correct DOIs, I want to identify persons and match information from DBpedia, VIAF.

Copyright information

As a researcher/artist/editor/..., I want to know whether a text has copyright restrictions or not.

Automated subject cataloging (Sacherschliessung)

??

Tools

Kafka

Turntable that channels data from different producers to different consumers. E.g., Swissbib data is one producer.

Spark and Flink

Big data framework. Streaming technology. Links several data sets. Transforms data. Aggregates data (how many records with property xy?) Typical use case: Complex Event Processing (CEP), e.g. recognizing atypical event patterns in a huge VPN infrastructure.

Zeppelin

Interactive life note pad with which the end user queries data, then visualizes the result, then adapts the query, and so on...

Setting up Zeppelin:

  • For running a Flink cluster as backend Zeppelin must be compiled against the same version of Flink. E.g. the Flink cluster has version ''1.3.1'', Zeppelin has to be compiled with ''mvn clean package -Dflink.version=1.3.1 ''.

Some links:

Metafacture

Transforms metadata, especially for clean-up, normalization.

Three main parts:

  • Framework: foundation of the data processing pipelines (pipes and filters framework, implemented in Java)
  • Morph (Metamorph) "is a data flow-oriented language for transforming semi-structured data. Its declarative style facilitates communication between programmers and domain experts. It is both format-agnostic and extendable." (Böhme et.al. 2015)
  • Flux: scripting language to easily build and run processing pipelines. No Java programming is necessary, just a command line.

What is special about Metamorph?

  • Declarative approach, but no parallel processing, not for huge datasets.
    • "Metamorph uses the flow paradigm to enable declarative definition of transformations. It does not use the flow paradigm to enable parallelism. [...] The parallelism aspect of flow languages is not shared by Metamorph. Furthermore, Metamorph operates on rather small, self-contained data records (see also Section 3.2). For these reasons, there is no necessity to execute elements of the flow in parallel as parallelism may easily be achieved by splitting the input data along record boundaries and running several Metamorph instances in parallel." (Böhme et.al. 2015)
    • Is this the reason why we want to use Kafka and Spark/Flink in addition to Metamorph? To facilitate parallel processing, working with huge data sets, and with data sets from different sources?

More info:

Leider ist die Dokumentation von Metafacture nicht gerade besonders umfangreich. Daher hier lediglich ein paar vereinzelte Hinweise zur Benutzung (aus AnwenderInnensicht):

  • Christoph Böhme, einer der Hauptentwickler von Metafacture, hat an der SWIB13 einen Vortrag zu den Grundlagen von Metafacture gehalten. Die Folien findest du hier: http://swib.org/swib13/slides/boehme_swib13_131.pdf.
  • Etwas technischer, aber ziemlich konzis ist ein Artikel, den er zusammen mit Markus Geipel und Jan Hannemann geschrieben hat: http://dlib.org/dlib/may15/boehme/05boehme.html
  • Schau dir die Beispiele in metafacture-runner und metafacture-examples an. Zentral sind jeweils die Flux-Datei, welche den Workflow definiert, und - falls vorhanden - die Morph-Datei, die die Transformationen beschreibt.
  • Im github-Wiki von metafacture-core ist ebenfalls ein bisschen Dokumentation da. Interessant für den Einstieg:
    • Home
    • Flux User Guide
    • Metamorph User Guide
    • Metamorph Functions (für einen Überblick über die vorhandenen Funktionen schau dir auch das XML-Schema an: metamorph.xsd)
    • Metamorph Collectors
  • Ein vollständige Übersicht über die vorhanden Flux commands bietet dir die flux-commands.properties-Datei.
    • Für die Beschreibung der einzelnen Commands musst du dir leider das Javadoc der betreffenden Klassen anschauen. Im Anhang findest du zudem eine Liste, welche ich vor zwei Jahren erstellt habe. Sie ist sicher nicht mehr ganz aktuell, sollte dir aber schon einige Arbeit ersparen.
    • Die neuen Flux commands, welche die Swissbib-Extensions mitbringen, sind im README.md des Repositories beschrieben.
    • Java API von Metafacture, über die wir von Zeppelin aus auf die Daten zugreifen wollen. Metafacture-Java-Beispiel mit dieser API: https://github.com/hbz/metafacture-java-examples

Elastic Search and Kibana

Kibana visualizes Elastic Search.

  • [https://www.elastic.co/]

About Analyzers in Elasticsearch:

  • Analyzers dienen dazu, Text in einzelne Fragmente (Tokens) aufzuteilen, diese möglicherweise noch weiter zu bearbeiten (Filter) und schliesslich dem sog. invertierten Index hinzuzufügen. Invertiert deshalb, weil nicht ein Index der Tokens pro Dokument erzeugt wird, sondern umgekehrt ein Index der Dokumente pro Token.
  • Analyzers werden demzufolge nur auf den Datentyp text angewendet (daneben gibt es in ES noch eine Reihe weiterer Datentypen)
  • Ein Analyzer besteht aus einer Kombination verschiedenen Typen von Filtern und Tokenizers:
    • 0-n Character Filters, welche einzelne Zeichen im Text löschen oder ersetzen oder auch neue Zeichen hinzufügen
    • Ein Tokenizer, welcher den Text in einzelne Fragmente (Tokens) aufteilt, beispielsweise immer entlang von Leerzeichen
    • 0-n Token Filters, welche die einzelnen Tokens weiter bearbeiten (bspw. alle Gross- in Kleinbuchstaben umwandelt)
  • Es gibt in Elasticsearch eine Reihe von Analyzers, die bereits eine fertig konfigurierte Kombination aus den erwähnten Filtern/Tokenizers anbieten. Daneben gibt es aber auch die Möglichkeit, sich einen eigenen Analyzer zu bauen.

Ressourcen:

Interessant ist natürlich auch, wie die Analyzers in das Mapping eingebunden werden können: https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html

Für eine kurze Vorbereitung macht es keinen Sinn, wenn man sich jeden einzelnen Filter / Tokenizer im Detail anschaut, sondern sich einen generellen Überblick über die Möglichkeiten zur Filterung und Tokenisierung verschafft.

Team

  • Library/bibliography specialist (MARC 21, GND, RVK, CBS clustering...)
  • Subject matter expert for any other data used (e.g., legal stuff)
  • Specialists for the tools used
  • Erklärbär (explaining what we are doing to flaneurs during the hackathon)
  • Poster artist (can last year's poster be topped at all?)
  • Documentation enthusiast (web presentation on hackathon web site)
  • Interdisciplinary scrutinizer?
  • If we want to analyze profiles, patterns or anything the like - do we need some statistics expert?

Next prep steps

    1. July:
    • Deciding about tools
    • Deciding about use case
    • Deciding about publication platform (e.g. these notes)
    • Further enhancements on these notes
  • Getting tool setup running locally (using Docker?)
  • Setting up central tools and data host
  • Testing PC setups
  • Everybody: Getting familiar with Zeppelin usage details