SlideShare a Scribd company logo
BYOI: Build you own index
Build your own discovery index of scholary e-resources
40th European Library Automation Group (ELAG) Conference 2016,
2016–06–06, Copenhagen, Den Sorte Diamant, is.gd/nDh4TY
Martin Czygan, David Aumüller, Leander Seige
Leipzig University Library
https://ub.uni-leipzig.de
https://finc.info
https://amsl.technology
itprojekte@ub.uni-leipzig.de
Welcome
During the next few hours, we will create an small aggregated index
from scratch.
You can code along if you like. Code, data and slides are distributed
in a VM (on a USB stick).
Why
At Leipzig University Library we built a version that serves as a
successor to a commercial product.
Index includes data from Crossref, DOAJ, JSTOR, Elsevier, Genios,
Thieme, DeGruyter among others.
About 55% of our holdings covered. Potentially growable in breadth
and depth.
Format
We will use a combination of
slides to motivate concepts and
live coding and experimentation
–
We will not use a product, we will build it.
Goals
a running VuFind 3 with a small aggregated index
learn about a batch processing framework
First Steps
Figure 1: First steps
Prerequisites
Virtualbox: https://www.virtualbox.org/wiki/Downloads
Import Appliance
On the USB-Stick you can find an OVA file that you can import
into Virtualbox (or try to download it from https://goo.gl/J7hcYC).
This VM contains:
a VuFind 3 installation – /usr/local/vufind
raw metadata (around 3M records) – ~/Bootcamp/input
scripts and stubs for processing – ~/Bootcamp/code
these slides – ~/Bootcamp/slides.pdf
Forwarded ports
Guest (VM) >> Host
80 >> 8085 (HTTP, VuFind)
8080 >> 8086 (SOLR)
8082 >> 8087 (luigi)
22 >> 2200 (SSH)
3306 >> 13306 (MySQL)
SSH tip:
$ curl -sL https://git.io/vrxoC > vm.sh
$ chmod +x vm.sh
$ ./vm.sh
Outline
Bootcamp play book:
intro: problem setting (heterogenous data, batch processing)
VM setup - during intro
Then we will write some code:
a basic pipeline with luigi python library
combine various sources into a common format
apply licensing information
index into solr
Outline DAG
Figure 2: Tour
Intro: Problem setting
batch processing, not small data (but not too big, either)
regular processing required
varying requirements
multiple small steps to apply on all data
iterative development
Intro: Rise of the DAG
DAG = directed acyclic graph, partial ordering
many things use DAGs, make, Excel, scheduling problems
model tasks in a DAG, then run topological sort to determine
order
Examples:
http://goo.gl/FCpxiK (history is a DAG)
http://i.stack.imgur.com/iVNcu.png (airflow)
https://git.io/vw9rW (luigi)
https://goo.gl/vMEezR (Azkaban)
Intro: Immutability
immutability = data is not modified, after it is created
immutable data has some advantages, e.g.
“human fault tolerance”
performance
our use case: recompute everything from raw data
tradeoff: more computation, but less to think about
Intro: Frameworks
many libraries and frameworks for batch processing and
scheduling, e.g. Oozie, Askaban, Airflow, luigi, . . .
even more tools, when working with stream, Kafka, various
queues, . . .
luigi is nice, because it has only a few prerequisities
Intro: Luigi in one slide
import luigi
class MyTask(luigi.Task):
param = luigi.Parameter(default='ABC')
def requires(self):
return SomeOtherTask()
def run(self):
with self.output().open('w') as output:
output.write('%s business' % self.param)
def output(self):
return luigi.LocalTarget(path='output.txt')
if __name__ == '__main__':
luigi.run()
Intro: luigi
many integrations, e.g. MySQL, Postgres, elasticsearch, . . .
support for Hadoop and HDFS, S3, Redshift, . . .
200+ contributors, 350+ ML
hackable, extendable – e.g.
https://github.com/ubleipzig/gluish
Intro: Decomposing our goal
clean and rearrange input data files
convert data into a common (intermediate) format
apply licensing information (from kbart)
index into solr
Intro: Incremental Development
when we work with unknown data sources, we have to
gradually move forward
Intro: Wrap up
many approaches to data processing
we will focus on one library only here
concepts like immutability, recomputation and incremental
development are more general
–
now back to the code
Test VuFind installation
We can SSH into the VM and start VuFind:
$ ./vm.sh
(vm) $ cd /usr/local/vufind
(vm) $ ./solr.sh start
Starting VuFind ...
...
http://localhost:8085/vufind
http://localhost:8085/vufind/Install/Home
Hello World
Test a Python script on guest. Go to the Bootcamp directory:
$ cd $HOME/Bootcamp
$ python hello.py
...
Note: Files follow PEP-8, so indent with space, here: 4.
Setup wrap-up
You can now edit Python files on your guest (or host) and run them
inside the VM. You can start and stop VuFind inside the VM and
access it through a browser on your host.
We are all set ot start exploring the data and to write some code.
Bootcamp outline
parts 0 to 6: intro, crossref, doaj, combination, licensing, export
each part is self contained, although we will reuse some
artifacts
Bootcamp outline
you can use scaffoldP_. . . , if you want to code along
the partP_. . . files contain the target code
code/part{0-6}_....py
code/scaffold{0-6}_....py
Coding: Part 0
Hello World from luigi
$ cd code
$ python part0_helloworld.py
Coding: Part 0 Recap
simple things should be simple
basic notion of a task
command line integration
Coding: Part 1
An input and a task
$ python part1_require.py
Coding: Part 1 Recap
it is easy to start with static data
business logic in python, can reuse any existing python library
Coding: Part 2
a first look at Crossref data
harvest via API, the files contain batch responses
custom format
Coding: Part 2
Three things to do:
find all relevant files (we will use just one for now)
extract the records from the batch
convert to an intermediate format
Coding: Part 2
Now on to the code
$ python part2_crossref.py
Coding: Part 2 Recap
used command line tools (fast, simple interface)
chained three tasks together
Excursion: Normalization
suggested and designed by system librarian
internal name: intermediate schema –
https://github.com/ubleipzig/intermediateschema
enough fields to accomodate various inputs
can be extended carefully, if necessary
tooling (licensing, export, quality checks) only for a single
format
Excursion: Normalization
{
"finc.format": "ElectronicArticle",
"finc.mega_collection": "DOAJ",
"finc.record_id": "ai-28-00001...",
"finc.source_id": "28",
"rft.atitle": "Importância da vitamina B12 na ...",
"rft.epage": "78",
"rft.issn": [
"1806-5562",
"1980-6108"
],
"rft.jtitle": "Scientia Medica",
...
}
Coding: Part 3
DOAJ index data
a complete elasticsearch dump
Coding: Part 3
This source is not batched and comes in a single file, so it is a bit
simpler:
locate file
convert to intermediate schema
$ python part3_require.py
Coding: Part 3 Recap
it is easy to start with static data
business logic in python, can reuse any existing python library
Coding: Part 4
after normalization, we can merge the two data sources
$ python part4_combine.py
Coding: Part 4 Recap
a list of dependencies
python helps with modularization
using the shell for performance and to reuse existing tools
Coding: Part 5
licensing turned out to be an important issue
a complex topic
we need to look at every record, so it is performance critical
we use AMSL for ERM, and are on the way to a self-service
interface
AMSL has great APIs
we convert collection information to an expression-tree-ish
format – https://is.gd/Fxx0IU, https://is.gd/ZTqLqB
Coding: Part 5
$ python part5_licensing.py
Coding: Part 5
boolean expression trees allow us to specify complex licensing
rules
the result is a file, where each record is annotated with an ISIL
at Leipzig University Library we currently do this for about 20
ISILs
Coding: Part 5 Recap
dependencies as dictionary
flexibility in modeling workflows
again: use command line tools for performance critical parts
Coding: Part 6
a final conversion to a SOLR-importable format
Coding: Part 6
$ python part6_export.py
Coding: Part 6
slightly different from SOLRMARC style processing
keep things (conversion, indexing) a bit separate
standalone tool: solrbulk
Coding: Part 6 Recap
flexibility in modeling workflows
again: use command line tools for performance critical parts
Indexing
finally, we can index the data into SOLR
make sure SOLR is running on your VM
Indexing
$ solrbulk -host localhost -port 8080 
-w 2 -z -verbose -commit 100000 
-collection biblio 
output/6/Export/output.ldj.gz
might want to increase SOLR_HEAP (defaults to 512M)
Indexing
go to http://localhost:8085
index should be slowly growing
Code recap
_ Export()
_ ApplyLicensing()
_ CombinedIntermediateSchema()
_ DOAJIntermediateSchema()
_ DOAJInput()
_ CrossrefIntermediateSchema()
_ CrossrefItems()
_ CrossrefInput()
_ CreateConfiguration()
_ HoldingFile()
Code recap
$ python deps.py
_ Export()
_ ApplyLicensing()
_ CombinedIntermediateSchema()
_ DOAJIntermediateSchema()
_ DOAJInput()
_ CrossrefIntermediateSchema()
_ CrossrefItems()
_ CrossrefInput()
_ CreateConfiguration()
_ HoldingFile()
Code recap
Figure 3: Deps
Follow up with workflow changes
https://git.io/vOZFQ
Indexing
Production data points:
sustained indexing rates between 2000-4000 docs/s
a full reindex of about 100M docs currently takes about 10h
with SOLR
Discussion
what we left out:
more data sets
larger data sets
XML
errors
parameters
collaboration and deployment
Discussion
what are your experiences with batch systems?
how do you manage large heterogeneous data?
what could we add to the pipeline?
Q & A
Thanks for your attention.
For any questions, please get in touch during the conference or via
e-mail:
{czygan,aumueller,seige}@ub.uni-leipzig.de
Ad

More Related Content

What's hot (20)

Hadoop Tutorial For Beginners
Hadoop Tutorial For BeginnersHadoop Tutorial For Beginners
Hadoop Tutorial For Beginners
Dataflair Web Services Pvt Ltd
 
Introduction to MongoDB and CRUD operations
Introduction to MongoDB and CRUD operationsIntroduction to MongoDB and CRUD operations
Introduction to MongoDB and CRUD operations
Anand Kumar
 
NoSql
NoSqlNoSql
NoSql
Girish Khanzode
 
SQL-on-Hadoop Tutorial
SQL-on-Hadoop TutorialSQL-on-Hadoop Tutorial
SQL-on-Hadoop Tutorial
Daniel Abadi
 
Hadoop Overview & Architecture
Hadoop Overview & Architecture  Hadoop Overview & Architecture
Hadoop Overview & Architecture
EMC
 
Bigquery 101
Bigquery 101Bigquery 101
Bigquery 101
Cesar Orozco Manotas
 
Capabilities for Resources and Effects
Capabilities for Resources and EffectsCapabilities for Resources and Effects
Capabilities for Resources and Effects
Martin Odersky
 
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Karel Minarik
 
6.hive
6.hive6.hive
6.hive
Prashant Gupta
 
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Simplilearn
 
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
Simplilearn
 
NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
Filip Ilievski
 
Mongo indexes
Mongo indexesMongo indexes
Mongo indexes
paradokslabs
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
Prashant Gupta
 
Google Cloud Storage backup and archive
Google Cloud Storage backup and archiveGoogle Cloud Storage backup and archive
Google Cloud Storage backup and archive
Ido Green
 
Overview of big data in cloud computing
Overview of big data in cloud computingOverview of big data in cloud computing
Overview of big data in cloud computing
Viet-Trung TRAN
 
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Jose Pinilla
 
Unit-3_BDA.ppt
Unit-3_BDA.pptUnit-3_BDA.ppt
Unit-3_BDA.ppt
PoojaShah174393
 
High Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go AssemblyHigh Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go Assembly
Minio
 
Dspace الدليل العملي لتنصيب
Dspace الدليل العملي لتنصيبDspace الدليل العملي لتنصيب
Dspace الدليل العملي لتنصيب
الدكتور طلال ناظم الزهيري
 
Introduction to MongoDB and CRUD operations
Introduction to MongoDB and CRUD operationsIntroduction to MongoDB and CRUD operations
Introduction to MongoDB and CRUD operations
Anand Kumar
 
SQL-on-Hadoop Tutorial
SQL-on-Hadoop TutorialSQL-on-Hadoop Tutorial
SQL-on-Hadoop Tutorial
Daniel Abadi
 
Hadoop Overview & Architecture
Hadoop Overview & Architecture  Hadoop Overview & Architecture
Hadoop Overview & Architecture
EMC
 
Capabilities for Resources and Effects
Capabilities for Resources and EffectsCapabilities for Resources and Effects
Capabilities for Resources and Effects
Martin Odersky
 
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)
Karel Minarik
 
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Pig Tutorial | Apache Pig Tutorial | What Is Pig In Hadoop? | Apache Pig Arch...
Simplilearn
 
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
What Is Apache Spark? | Introduction To Apache Spark | Apache Spark Tutorial ...
Simplilearn
 
Google Cloud Storage backup and archive
Google Cloud Storage backup and archiveGoogle Cloud Storage backup and archive
Google Cloud Storage backup and archive
Ido Green
 
Overview of big data in cloud computing
Overview of big data in cloud computingOverview of big data in cloud computing
Overview of big data in cloud computing
Viet-Trung TRAN
 
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Summary - Adaptive Insertion Policies for High Performance Caching. Qureshi, ...
Jose Pinilla
 
High Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go AssemblyHigh Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go Assembly
Minio
 

Similar to Build your own discovery index of scholary e-resources (20)

Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with Kubernetes
Nicola Ferraro
 
Open erp technical_memento_v0.6.3_a4
Open erp technical_memento_v0.6.3_a4Open erp technical_memento_v0.6.3_a4
Open erp technical_memento_v0.6.3_a4
openerpwiki
 
maXbox starter30 Web of Things
maXbox starter30 Web of ThingsmaXbox starter30 Web of Things
maXbox starter30 Web of Things
Max Kleiner
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical Memento
Odoo
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
Diego Freniche Brito
 
Apache Spark Tutorial
Apache Spark TutorialApache Spark Tutorial
Apache Spark Tutorial
Ahmet Bulut
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
Yoni Davidson
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
sparkfabrik
 
An introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-REDAn introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-RED
Boris Adryan
 
Fast and Reproducible Deep Learning
Fast and Reproducible Deep LearningFast and Reproducible Deep Learning
Fast and Reproducible Deep Learning
Greg Gandenberger
 
NodeJS
NodeJSNodeJS
NodeJS
LinkMe Srl
 
Microservices Application Tracing Standards and Simulators - Adrians at OSCON
Microservices Application Tracing Standards and Simulators - Adrians at OSCONMicroservices Application Tracing Standards and Simulators - Adrians at OSCON
Microservices Application Tracing Standards and Simulators - Adrians at OSCON
Adrian Cockcroft
 
Python the lingua franca of FEWS
Python the lingua franca of FEWSPython the lingua franca of FEWS
Python the lingua franca of FEWS
Lindsay Millard
 
Javascript mynotes
Javascript mynotesJavascript mynotes
Javascript mynotes
AntoniaSymeonidou1
 
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
EUDAT
 
Headless approach for offloading heavy tasks in Magento
Headless approach for offloading heavy tasks in MagentoHeadless approach for offloading heavy tasks in Magento
Headless approach for offloading heavy tasks in Magento
Sander Mangel
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Luciano Resende
 
Node-RED and getting started on the Internet of Things
Node-RED and getting started on the Internet of ThingsNode-RED and getting started on the Internet of Things
Node-RED and getting started on the Internet of Things
Boris Adryan
 
Introduction-to-C-Part-1.pdf
Introduction-to-C-Part-1.pdfIntroduction-to-C-Part-1.pdf
Introduction-to-C-Part-1.pdf
AnassElHousni
 
Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with Kubernetes
Nicola Ferraro
 
Open erp technical_memento_v0.6.3_a4
Open erp technical_memento_v0.6.3_a4Open erp technical_memento_v0.6.3_a4
Open erp technical_memento_v0.6.3_a4
openerpwiki
 
maXbox starter30 Web of Things
maXbox starter30 Web of ThingsmaXbox starter30 Web of Things
maXbox starter30 Web of Things
Max Kleiner
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical Memento
Odoo
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
Diego Freniche Brito
 
Apache Spark Tutorial
Apache Spark TutorialApache Spark Tutorial
Apache Spark Tutorial
Ahmet Bulut
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
Yoni Davidson
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
sparkfabrik
 
An introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-REDAn introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-RED
Boris Adryan
 
Fast and Reproducible Deep Learning
Fast and Reproducible Deep LearningFast and Reproducible Deep Learning
Fast and Reproducible Deep Learning
Greg Gandenberger
 
Microservices Application Tracing Standards and Simulators - Adrians at OSCON
Microservices Application Tracing Standards and Simulators - Adrians at OSCONMicroservices Application Tracing Standards and Simulators - Adrians at OSCON
Microservices Application Tracing Standards and Simulators - Adrians at OSCON
Adrian Cockcroft
 
Python the lingua franca of FEWS
Python the lingua franca of FEWSPython the lingua franca of FEWS
Python the lingua franca of FEWS
Lindsay Millard
 
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
EUDAT
 
Headless approach for offloading heavy tasks in Magento
Headless approach for offloading heavy tasks in MagentoHeadless approach for offloading heavy tasks in Magento
Headless approach for offloading heavy tasks in Magento
Sander Mangel
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Luciano Resende
 
Node-RED and getting started on the Internet of Things
Node-RED and getting started on the Internet of ThingsNode-RED and getting started on the Internet of Things
Node-RED and getting started on the Internet of Things
Boris Adryan
 
Introduction-to-C-Part-1.pdf
Introduction-to-C-Part-1.pdfIntroduction-to-C-Part-1.pdf
Introduction-to-C-Part-1.pdf
AnassElHousni
 
Ad

Recently uploaded (19)

Perguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolhaPerguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolha
socaslev
 
(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security
aluacharya169
 
project_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptxproject_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptx
redzuriel13
 
White and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptxWhite and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptx
canumatown
 
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation TemplateSmart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
yojeari421237
 
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
DataProvider1
 
Determining Glass is mechanical textile
Determining  Glass is mechanical textileDetermining  Glass is mechanical textile
Determining Glass is mechanical textile
Azizul Hakim
 
highend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptxhighend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptx
elhadjcheikhdiop
 
IT Services Workflow From Request to Resolution
IT Services Workflow From Request to ResolutionIT Services Workflow From Request to Resolution
IT Services Workflow From Request to Resolution
mzmziiskd
 
Best web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you businessBest web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you business
steve198109
 
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC
 
OSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description fOSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description f
cbr49917
 
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHostingTop Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
steve198109
 
5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx
andani26
 
Understanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep WebUnderstanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep Web
nabilajabin35
 
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry SweetserAPNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC
 
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 SupportReliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
steve198109
 
DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)
APNIC
 
Computers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers NetworksComputers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers Networks
Tito208863
 
Perguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolhaPerguntas dos animais - Slides ilustrados de múltipla escolha
Perguntas dos animais - Slides ilustrados de múltipla escolha
socaslev
 
(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security(Hosting PHising Sites) for Cryptography and network security
(Hosting PHising Sites) for Cryptography and network security
aluacharya169
 
project_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptxproject_based_laaaaaaaaaaearning,kelompok 10.pptx
project_based_laaaaaaaaaaearning,kelompok 10.pptx
redzuriel13
 
White and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptxWhite and Red Clean Car Business Pitch Presentation.pptx
White and Red Clean Car Business Pitch Presentation.pptx
canumatown
 
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation TemplateSmart Mobile App Pitch Deck丨AI Travel App Presentation Template
Smart Mobile App Pitch Deck丨AI Travel App Presentation Template
yojeari421237
 
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...Mobile database for your company telemarketing or sms marketing campaigns. Fr...
Mobile database for your company telemarketing or sms marketing campaigns. Fr...
DataProvider1
 
Determining Glass is mechanical textile
Determining  Glass is mechanical textileDetermining  Glass is mechanical textile
Determining Glass is mechanical textile
Azizul Hakim
 
highend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptxhighend-srxseries-services-gateways-customer-presentation.pptx
highend-srxseries-services-gateways-customer-presentation.pptx
elhadjcheikhdiop
 
IT Services Workflow From Request to Resolution
IT Services Workflow From Request to ResolutionIT Services Workflow From Request to Resolution
IT Services Workflow From Request to Resolution
mzmziiskd
 
Best web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you businessBest web hosting Vancouver 2025 for you business
Best web hosting Vancouver 2025 for you business
steve198109
 
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC -Policy Development Process, presented at Local APIGA Taiwan 2025
APNIC
 
OSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description fOSI TCP IP Protocol Layers description f
OSI TCP IP Protocol Layers description f
cbr49917
 
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHostingTop Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
Top Vancouver Green Business Ideas for 2025 Powered by 4GoodHosting
steve198109
 
5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx5-Proses-proses Akuisisi Citra Digital.pptx
5-Proses-proses Akuisisi Citra Digital.pptx
andani26
 
Understanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep WebUnderstanding the Tor Network and Exploring the Deep Web
Understanding the Tor Network and Exploring the Deep Web
nabilajabin35
 
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry SweetserAPNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC Update, presented at NZNOG 2025 by Terry Sweetser
APNIC
 
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 SupportReliable Vancouver Web Hosting with Local Servers & 24/7 Support
Reliable Vancouver Web Hosting with Local Servers & 24/7 Support
steve198109
 
DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)DNS Resolvers and Nameservers (in New Zealand)
DNS Resolvers and Nameservers (in New Zealand)
APNIC
 
Computers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers NetworksComputers Networks Computers Networks Computers Networks
Computers Networks Computers Networks Computers Networks
Tito208863
 
Ad

Build your own discovery index of scholary e-resources

  • 1. BYOI: Build you own index Build your own discovery index of scholary e-resources 40th European Library Automation Group (ELAG) Conference 2016, 2016–06–06, Copenhagen, Den Sorte Diamant, is.gd/nDh4TY Martin Czygan, David Aumüller, Leander Seige Leipzig University Library https://ub.uni-leipzig.de https://finc.info https://amsl.technology [email protected]
  • 2. Welcome During the next few hours, we will create an small aggregated index from scratch. You can code along if you like. Code, data and slides are distributed in a VM (on a USB stick).
  • 3. Why At Leipzig University Library we built a version that serves as a successor to a commercial product. Index includes data from Crossref, DOAJ, JSTOR, Elsevier, Genios, Thieme, DeGruyter among others. About 55% of our holdings covered. Potentially growable in breadth and depth.
  • 4. Format We will use a combination of slides to motivate concepts and live coding and experimentation – We will not use a product, we will build it. Goals a running VuFind 3 with a small aggregated index learn about a batch processing framework
  • 5. First Steps Figure 1: First steps
  • 7. Import Appliance On the USB-Stick you can find an OVA file that you can import into Virtualbox (or try to download it from https://goo.gl/J7hcYC). This VM contains: a VuFind 3 installation – /usr/local/vufind raw metadata (around 3M records) – ~/Bootcamp/input scripts and stubs for processing – ~/Bootcamp/code these slides – ~/Bootcamp/slides.pdf
  • 8. Forwarded ports Guest (VM) >> Host 80 >> 8085 (HTTP, VuFind) 8080 >> 8086 (SOLR) 8082 >> 8087 (luigi) 22 >> 2200 (SSH) 3306 >> 13306 (MySQL) SSH tip: $ curl -sL https://git.io/vrxoC > vm.sh $ chmod +x vm.sh $ ./vm.sh
  • 9. Outline Bootcamp play book: intro: problem setting (heterogenous data, batch processing) VM setup - during intro Then we will write some code: a basic pipeline with luigi python library combine various sources into a common format apply licensing information index into solr
  • 11. Intro: Problem setting batch processing, not small data (but not too big, either) regular processing required varying requirements multiple small steps to apply on all data iterative development
  • 12. Intro: Rise of the DAG DAG = directed acyclic graph, partial ordering many things use DAGs, make, Excel, scheduling problems model tasks in a DAG, then run topological sort to determine order Examples: http://goo.gl/FCpxiK (history is a DAG) http://i.stack.imgur.com/iVNcu.png (airflow) https://git.io/vw9rW (luigi) https://goo.gl/vMEezR (Azkaban)
  • 13. Intro: Immutability immutability = data is not modified, after it is created immutable data has some advantages, e.g. “human fault tolerance” performance our use case: recompute everything from raw data tradeoff: more computation, but less to think about
  • 14. Intro: Frameworks many libraries and frameworks for batch processing and scheduling, e.g. Oozie, Askaban, Airflow, luigi, . . . even more tools, when working with stream, Kafka, various queues, . . . luigi is nice, because it has only a few prerequisities
  • 15. Intro: Luigi in one slide import luigi class MyTask(luigi.Task): param = luigi.Parameter(default='ABC') def requires(self): return SomeOtherTask() def run(self): with self.output().open('w') as output: output.write('%s business' % self.param) def output(self): return luigi.LocalTarget(path='output.txt') if __name__ == '__main__': luigi.run()
  • 16. Intro: luigi many integrations, e.g. MySQL, Postgres, elasticsearch, . . . support for Hadoop and HDFS, S3, Redshift, . . . 200+ contributors, 350+ ML hackable, extendable – e.g. https://github.com/ubleipzig/gluish
  • 17. Intro: Decomposing our goal clean and rearrange input data files convert data into a common (intermediate) format apply licensing information (from kbart) index into solr
  • 18. Intro: Incremental Development when we work with unknown data sources, we have to gradually move forward
  • 19. Intro: Wrap up many approaches to data processing we will focus on one library only here concepts like immutability, recomputation and incremental development are more general – now back to the code
  • 20. Test VuFind installation We can SSH into the VM and start VuFind: $ ./vm.sh (vm) $ cd /usr/local/vufind (vm) $ ./solr.sh start Starting VuFind ... ... http://localhost:8085/vufind http://localhost:8085/vufind/Install/Home
  • 21. Hello World Test a Python script on guest. Go to the Bootcamp directory: $ cd $HOME/Bootcamp $ python hello.py ... Note: Files follow PEP-8, so indent with space, here: 4.
  • 22. Setup wrap-up You can now edit Python files on your guest (or host) and run them inside the VM. You can start and stop VuFind inside the VM and access it through a browser on your host. We are all set ot start exploring the data and to write some code.
  • 23. Bootcamp outline parts 0 to 6: intro, crossref, doaj, combination, licensing, export each part is self contained, although we will reuse some artifacts
  • 24. Bootcamp outline you can use scaffoldP_. . . , if you want to code along the partP_. . . files contain the target code code/part{0-6}_....py code/scaffold{0-6}_....py
  • 25. Coding: Part 0 Hello World from luigi $ cd code $ python part0_helloworld.py
  • 26. Coding: Part 0 Recap simple things should be simple basic notion of a task command line integration
  • 27. Coding: Part 1 An input and a task $ python part1_require.py
  • 28. Coding: Part 1 Recap it is easy to start with static data business logic in python, can reuse any existing python library
  • 29. Coding: Part 2 a first look at Crossref data harvest via API, the files contain batch responses custom format
  • 30. Coding: Part 2 Three things to do: find all relevant files (we will use just one for now) extract the records from the batch convert to an intermediate format
  • 31. Coding: Part 2 Now on to the code $ python part2_crossref.py
  • 32. Coding: Part 2 Recap used command line tools (fast, simple interface) chained three tasks together
  • 33. Excursion: Normalization suggested and designed by system librarian internal name: intermediate schema – https://github.com/ubleipzig/intermediateschema enough fields to accomodate various inputs can be extended carefully, if necessary tooling (licensing, export, quality checks) only for a single format
  • 34. Excursion: Normalization { "finc.format": "ElectronicArticle", "finc.mega_collection": "DOAJ", "finc.record_id": "ai-28-00001...", "finc.source_id": "28", "rft.atitle": "Importância da vitamina B12 na ...", "rft.epage": "78", "rft.issn": [ "1806-5562", "1980-6108" ], "rft.jtitle": "Scientia Medica", ... }
  • 35. Coding: Part 3 DOAJ index data a complete elasticsearch dump
  • 36. Coding: Part 3 This source is not batched and comes in a single file, so it is a bit simpler: locate file convert to intermediate schema $ python part3_require.py
  • 37. Coding: Part 3 Recap it is easy to start with static data business logic in python, can reuse any existing python library
  • 38. Coding: Part 4 after normalization, we can merge the two data sources $ python part4_combine.py
  • 39. Coding: Part 4 Recap a list of dependencies python helps with modularization using the shell for performance and to reuse existing tools
  • 40. Coding: Part 5 licensing turned out to be an important issue a complex topic we need to look at every record, so it is performance critical we use AMSL for ERM, and are on the way to a self-service interface AMSL has great APIs we convert collection information to an expression-tree-ish format – https://is.gd/Fxx0IU, https://is.gd/ZTqLqB
  • 41. Coding: Part 5 $ python part5_licensing.py
  • 42. Coding: Part 5 boolean expression trees allow us to specify complex licensing rules the result is a file, where each record is annotated with an ISIL at Leipzig University Library we currently do this for about 20 ISILs
  • 43. Coding: Part 5 Recap dependencies as dictionary flexibility in modeling workflows again: use command line tools for performance critical parts
  • 44. Coding: Part 6 a final conversion to a SOLR-importable format
  • 45. Coding: Part 6 $ python part6_export.py
  • 46. Coding: Part 6 slightly different from SOLRMARC style processing keep things (conversion, indexing) a bit separate standalone tool: solrbulk
  • 47. Coding: Part 6 Recap flexibility in modeling workflows again: use command line tools for performance critical parts
  • 48. Indexing finally, we can index the data into SOLR make sure SOLR is running on your VM
  • 49. Indexing $ solrbulk -host localhost -port 8080 -w 2 -z -verbose -commit 100000 -collection biblio output/6/Export/output.ldj.gz might want to increase SOLR_HEAP (defaults to 512M)
  • 51. Code recap _ Export() _ ApplyLicensing() _ CombinedIntermediateSchema() _ DOAJIntermediateSchema() _ DOAJInput() _ CrossrefIntermediateSchema() _ CrossrefItems() _ CrossrefInput() _ CreateConfiguration() _ HoldingFile()
  • 52. Code recap $ python deps.py _ Export() _ ApplyLicensing() _ CombinedIntermediateSchema() _ DOAJIntermediateSchema() _ DOAJInput() _ CrossrefIntermediateSchema() _ CrossrefItems() _ CrossrefInput() _ CreateConfiguration() _ HoldingFile()
  • 54. Follow up with workflow changes https://git.io/vOZFQ
  • 55. Indexing Production data points: sustained indexing rates between 2000-4000 docs/s a full reindex of about 100M docs currently takes about 10h with SOLR
  • 56. Discussion what we left out: more data sets larger data sets XML errors parameters collaboration and deployment
  • 57. Discussion what are your experiences with batch systems? how do you manage large heterogeneous data? what could we add to the pipeline?
  • 58. Q & A Thanks for your attention. For any questions, please get in touch during the conference or via e-mail: {czygan,aumueller,seige}@ub.uni-leipzig.de