SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
Bewirtschaftung vonData Lakes
in der Praxis
Hans-Peter Zorn, Dr. Dominik Benz, inovexGmbH
data2day Karlsruhe, 05.10.2016
Ein See, ein See, ... wozu?
http://p5.focus.de/img/fotos/crop287471/1000162586-cfreecrop-w960-h541-ocx0_y63-q75-p5/seeelefant.jpg
https://c2.staticflickr.com/6/5321/9283741715_ba20166c37_b.jpg
Unterschiedliche
Datenquellen,
Formate Integration,
Verknüpfung
Kosteneffiziente
Langzeit-
archivierung
Offloading
Vorverarbeitung
DWH
Zentrale
Anlaufstelle für
Daten
2
Inspiration für
neue
Datenprodukte
Spielwiese für
Analysten,
Exploration
3
Der Weg zum See
Definition,
Herausforderungen
Werkzeuge (Airflow/
Schedoscope)
Lösungsansätze
Vergleich&
Empfehlungen
Typischer Aufbau
raw processed datahub analysisingress egress
scheduling, orchestration, metadata
user access, system integration,
development
4
5
Herausforderungen
raw processed datahub analysisingress egress
Scheduling, orchestration, metadata
user access, system integration,
development
Agile
Anbindung
Modellierung
Abhängigkeiten
Testing der
Transformationen
Behandlung spät
ankommende
Daten
› Kleinste Einheit: Artefakt von zusammengehörigen Daten („Tabelle“)
› Jedes Artefakt ist als Hive-Tabelle registriert
› Bewirtschaftung = (Neu)Erstellung der Artefakte
› Berücksichtigung von Abhängigkeiten bei der Bewirtschaftung
› Fokus: kontinuierlich neue Daten (Batches, Daten in Zeitscheiben)
6
Definition
Data Lake in unserem Kontext:
7
Der Weg zum See
Werkzeuge (Airflow/
Schedoscope)
Lösungsansätze
Vergleich&
Empfehlungen
› Interne Datenplattformen u.a.
bei Otto Group BI
› Gestartet mit Oozie; Probleme:
› Langsame Entwicklungszyklen
› Viele redundante XML-Dateien
› UnzureichendeClusterauslastung
› Fehleranfällig
› Fehlersuche schwierig
8
Ausgangslage Werkzeuge
easy statt oozie J
› „Schemaiscode“
› Goal-drivenscheduling
› OpenSource, Scala(OttoGroupBI)
Airflow
› „Workflow iscode“
› Dynamische Daten-Pipelines
› OpenSource, Python(AirBnB)
9
s
Agile Anbindung
› Definition von „Views“ (Schema)
› Statisch typisierte Scala-DSL
› Agiles, schnelles Erstellen neuer
Quellen & Ansichten
Agile Anbindung
› Abhängigkeiten Teil der View-
Definition
› Integriertes Unit-TestFramework
› Entwickelt seit 2015bei Otto Group BI
› Open Source (Apache SL 2.0) Agile Anbindung
› Ziel-getriebene Beladung
(„Materialized Views on Demand“)
10
s
Agile Anbindung
case class Nodes(
year: Parameter[String],
month: Parameter[String]) extends View
with MonthlyParameterization
with Id
with PointOccurrence {
val version = fieldOf[Int]
val user_id = fieldOf[Int]
val longitude = fieldOf[Double]
val latitude = fieldOf[Double]
comment("View of nodes partitioned by year and
month with tags and geohash")
storedAs(Parquet())
}
11
s
Agile Anbindung
case class Nodes(
...
val version = fieldOf[Int]
val user_id = fieldOf[Int]
val longitude = fieldOf[Double]
val latitude = fieldOf[Double]
transformVia(() =>
HiveTransformation(
insertInto(this,
queryFromResource(“hql/insertnodes.hql")))
)
...
}
12
Airflow
Agile Anbindung
› Schemader (Hive-)Tabellenextern
verwaltet (z.B. mit db-deploy)
› Schema-Änderungenmüssenmanuell
nachgezogenwerden
Agile Anbindung
› DefinitionvonDaten-Pipelines/DAGsmit
Python
› Dynamische SpezifikationderAbhängigkeiten
› TransformationenviaOperatoren
› Entwickelt bei AirBnB
› Seit Juni 2015 OpenSource
Agile Anbindung
› ZeitbasiertesScheduling
› Konzept von„Sensoren“
13
Agile Anbindung
Airflow
upload_data = BashOperator(
task_id='upload_data',
bash_command='hadoop fs –put data.csv /data',
dag=dag)
process_data = HiveOperator(
task_id='process_data',
sql='hive_script.sql',
dag=dag)
upload_data.set_downstream(process_data)
Vergleich
Oozie Airflow Schedoscope
Sprache Java Python Scala
Workflow-Spezifikation XML Python Scala
Definition
Abhängigkeiten
Statisch(innerhalb XML);
Definition „globale
Struktur“
Dynamisch (via Python);
Definition „globale
Struktur“ (= DAG)
Dynamisch; Definition
„lokal“ (pro View)
Schema-Management extern extern intern (schema is code)
Change-Management
Transformationen
nein nein ja
Test-Framework nein nein ja
Scheduling-Optionen data, time data (via Sensors), time Ziel / Goal
Sonstige Features Coordinators, Bundles, ... GUI für Monitoring/Config;
Plugin-Erweiterbarkeit;
SLA-Management, ...
GUI (Metascope);
Anbindung an externe
Dienste (Redis,...); ...
14
15
GUIs
Airflow
(Metascope)
16
Der Weg zum See
Lösungsansätze
Vergleich&
Empfehlungen
Agilität
Entwicklung:
• Schema
• Transformation
• Workflow
Deployment
dev
Testen
Deployment
prod
Schema,
SQL/Spark, Oozie-
XML
Maven, Jenkins,..
FitNesse,
Explorativ, Tests
mit Hive
› Viele Schrauben
› Viele
Fehlerquellen
17
› Data Engineering == Softwareentwicklung
› Best Practices ähnlich
18
Agilität
Wie wird man schneller?
Agile Anbindung
› Weniger unterschiedliche Tools
weniger Konfigurationen an zu
passen
Agile Anbindung
› Früh testen
› Zeit bis zum entdeckten Fehler
reduzieren
› Continuous Integration/Delivery
› Automatisierung!
19
Testing
› Tippfehler (im XML, SQL)
› Logische Fehler
› Schema-Änderungen in
vorgelagerten Tabellen
› Änderungen im Verhalten
der Plattform, ...
end-to-end (zB FitNesse)
› Langsam, Tests getrennt
von Codebase
› trotzdem wichtig!
isoliert („unit-test style“)
› define input, run
transformation, check output
20
Testing
Schedoscope
1
1
1
3
3
2
"processed.Nodes" should "load correctly" in {
new Nodes(p("2013"), p("06")) with test {
basedOn(nodeTags, nodes)
then()
numRows shouldBe 1
row(v(id) shouldBe "122318",
v(occurredAt) shouldBe "2013-06-17 15:49:26Z",
v(version) shouldBe 6,
v(user_id) shouldBe 50299,
21
Testing
Airflow
1
1 3
Agile Anbindung
› Kein integriertes Testen
› Einzelne Tasks können über CLI separat ausgeführt werden
(„airflow test“)
› Keine direkte Unterstützung zur Erzeugung von
Eingabedaten, Prüfen von Assertions
› Aber: Python-Bordmittel (pyunit, ...) können nahtlos
angebunden werden
› Zügige manuelle Erstellung einer Testumgebung
22
Testing
Airflow - Code
1
1 3
processed_clicklog = HiveTestDataHook(
"src_omniture_clicklog",
"version='post',report_suite='testsuite',day=20151014")
for i in range(0,10):
processed_clicklog.add_row({"evar": {1:"evar_1_val", 2:"evar_2_val"}})
processed_clicklog.write()
self.run_task("omniture", "processed_to_datahub_events_pbox", "2015-10-14")
assertEquals(len(datahub_events_pbox.get_contents()), 17)
1
2
3
23
Abhängigkeiten
Wer A sagt, muss auch B sagen
Agile Anbindung
› Bereinigte Views basieren auf Rohdaten
› Analytische Views <- Processed
› Aggregationen und KPI
› Export in Serving oder Analyische DB (Exasol, Redis)
› Joins
› Aggregate über Zeiträume
› Sequentielle Verarbeitung, abhängig vom Vortag
24
Abhängigkeiten
Beispiel Schedoscope
case class Nodes(
year: Parameter[String],
month: Parameter[String]) extends View
with JobMetadata {
...
dependsOn(() => NodesWithGeohash(p(year), p(month)))
dependsOn(() => NodeTags(p(year), p(month)))
comment("View of nodes partitioned by year and month with
tags and geohash")
storedAs(Parquet())
}
Agile AnbindungDynamisch, frei definierbar
25
Abhängigkeiten
Beispiel Airflow
upload_data = BashOperator(
task_id=‘upload_data',
bash_command='hadoop fs –put data.csv
/data',
dag=dag)
process_data = HiveOperator(
task_id='process_data',
sql=‘hive_script.sql',
dag=dag)
upload_data.set_downstream(process_data)
Dynamische
Instantiierung der
Operatoren
Dynamische
Abhängigkeiten
26
Late arriving data
Lieber spät als nie
5.10.201621:59
5.10.201618:00
5.10.201618:00
5.10.201618:00
5.10.201618:00
5.10.201618:00
4.10.201623:02
4.10.201622:01
Batch: 6.10.2016
> Zeitzonen
> techn. Verzögerung
> falsche Systemzeit
27
Late Arriving Data
5.10.2016
3.10.2016
4.10.2016
3.10.2016
5.10.2016
4.10.2016
3.10.2016
5.10.2016
INSERT OVERWRITE
+ Idempotenz
- Daten ggfmüssen
wiederholt
verarbeitet werden
Ingest-Time Event-Time
Dynamic Partitions
+ Einfach
+ Einmalige Verarbeitung
- nicht idempotent
- Abhängigkeiten
28
Der Weg zum See
Agilität, Testing,
Abhängigkeiten, Late
arriving data
Vergleich&
Empfehlungen
29
Zusammenfassung
Schedoscope Airflow
• UmfassendesTool
• Testframework
• Schema-Management
• Export-Funktionen(jdbc,
Kafka)
• Metadaten: Metascope
• Leichtgewichtiger Ansatz
• Workflow iscode
• erweiterbar
• KomfortableGUIs
• Community (seit April im
Apache Incubator)
• kleine Community
• Lernkurve
• Alles-oder-nichts
• ÜberschaubaresSet an
Standard-Operatoren
• Verteilungerfordert zusätzliche
Infrastruktur
• Schema-/Change-Management
aussen vorDemo gerne zwischen
den Talks!
Vielen Dank
Hans-Peter Zorn
Dr. DominikBenz
inovex GmbH
ParkPlaza
Ludwig-Erhard-Allee 6
76131 Karlsruhe

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...
Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...
Arnold Bechtoldt, Inovex GmbH Linux systems engineer - Configuration Manageme...
 
Configuration Management vs. Container Automation
Configuration Management vs. Container AutomationConfiguration Management vs. Container Automation
Configuration Management vs. Container Automation
 
Agile (Software-) Prozesse - Quo Vadis? [in German]
Agile (Software-) Prozesse - Quo Vadis? [in German]Agile (Software-) Prozesse - Quo Vadis? [in German]
Agile (Software-) Prozesse - Quo Vadis? [in German]
 
Die dunkle Seite der Microservices - und wie du sie besiegen kannst
Die dunkle Seite der Microservices - und wie du sie besiegen kannst Die dunkle Seite der Microservices - und wie du sie besiegen kannst
Die dunkle Seite der Microservices - und wie du sie besiegen kannst
 
Dockerized Microservices
Dockerized MicroservicesDockerized Microservices
Dockerized Microservices
 
Gitlab meets Kubernetes
Gitlab meets KubernetesGitlab meets Kubernetes
Gitlab meets Kubernetes
 
SysDig Metriken zentralisieren
SysDig Metriken zentralisierenSysDig Metriken zentralisieren
SysDig Metriken zentralisieren
 
Automated Application Management with SaltStack
Automated Application Management with SaltStackAutomated Application Management with SaltStack
Automated Application Management with SaltStack
 
Hadoop 2.0 - The Next Level
Hadoop 2.0 - The Next LevelHadoop 2.0 - The Next Level
Hadoop 2.0 - The Next Level
 
Cloud Wars – what‘s the smartest data platform? Vergleich Microsoft Azure, Am...
Cloud Wars – what‘s the smartest data platform? Vergleich Microsoft Azure, Am...Cloud Wars – what‘s the smartest data platform? Vergleich Microsoft Azure, Am...
Cloud Wars – what‘s the smartest data platform? Vergleich Microsoft Azure, Am...
 
Wer gewinnt das SQL-Rennen auf der Hadoop-Strecke?
Wer gewinnt das SQL-Rennen auf der Hadoop-Strecke?Wer gewinnt das SQL-Rennen auf der Hadoop-Strecke?
Wer gewinnt das SQL-Rennen auf der Hadoop-Strecke?
 
Stackstorm – Event driven Automation
Stackstorm – Event driven AutomationStackstorm – Event driven Automation
Stackstorm – Event driven Automation
 
Real-life Customer Cases using Data Vault and Data Warehouse Automation
Real-life Customer Cases using Data Vault and Data Warehouse AutomationReal-life Customer Cases using Data Vault and Data Warehouse Automation
Real-life Customer Cases using Data Vault and Data Warehouse Automation
 
Metadaten und Data Vault (Meta Vault)
Metadaten und Data Vault (Meta Vault)Metadaten und Data Vault (Meta Vault)
Metadaten und Data Vault (Meta Vault)
 
Prometheus Monitoring
Prometheus MonitoringPrometheus Monitoring
Prometheus Monitoring
 
CDC und Data Vault für den Aufbau eines DWH in der Automobilindustrie
CDC und Data Vault für den Aufbau eines DWH in der AutomobilindustrieCDC und Data Vault für den Aufbau eines DWH in der Automobilindustrie
CDC und Data Vault für den Aufbau eines DWH in der Automobilindustrie
 
Monitoring with Graylog - a modern approach to monitoring?
Monitoring with Graylog - a modern approach to monitoring?Monitoring with Graylog - a modern approach to monitoring?
Monitoring with Graylog - a modern approach to monitoring?
 
Sprachsteuerung mit dem Google Assistant – Add a new User Interface to your P...
Sprachsteuerung mit dem Google Assistant – Add a new User Interface to your P...Sprachsteuerung mit dem Google Assistant – Add a new User Interface to your P...
Sprachsteuerung mit dem Google Assistant – Add a new User Interface to your P...
 
Data Vault DWH Automation
Data Vault DWH AutomationData Vault DWH Automation
Data Vault DWH Automation
 
Keeping Spark on Track: Productionizing Spark for ETL
Keeping Spark on Track: Productionizing Spark for ETLKeeping Spark on Track: Productionizing Spark for ETL
Keeping Spark on Track: Productionizing Spark for ETL
 

Mehr von inovex GmbH

Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
inovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
inovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
inovex GmbH
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
inovex GmbH
 

Mehr von inovex GmbH (20)

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
 

Bewirtschaftung von Data Lakes in der Praxis

  • 1. Bewirtschaftung vonData Lakes in der Praxis Hans-Peter Zorn, Dr. Dominik Benz, inovexGmbH data2day Karlsruhe, 05.10.2016
  • 2. Ein See, ein See, ... wozu? http://p5.focus.de/img/fotos/crop287471/1000162586-cfreecrop-w960-h541-ocx0_y63-q75-p5/seeelefant.jpg https://c2.staticflickr.com/6/5321/9283741715_ba20166c37_b.jpg Unterschiedliche Datenquellen, Formate Integration, Verknüpfung Kosteneffiziente Langzeit- archivierung Offloading Vorverarbeitung DWH Zentrale Anlaufstelle für Daten 2 Inspiration für neue Datenprodukte Spielwiese für Analysten, Exploration
  • 3. 3 Der Weg zum See Definition, Herausforderungen Werkzeuge (Airflow/ Schedoscope) Lösungsansätze Vergleich& Empfehlungen
  • 4. Typischer Aufbau raw processed datahub analysisingress egress scheduling, orchestration, metadata user access, system integration, development 4
  • 5. 5 Herausforderungen raw processed datahub analysisingress egress Scheduling, orchestration, metadata user access, system integration, development Agile Anbindung Modellierung Abhängigkeiten Testing der Transformationen Behandlung spät ankommende Daten
  • 6. › Kleinste Einheit: Artefakt von zusammengehörigen Daten („Tabelle“) › Jedes Artefakt ist als Hive-Tabelle registriert › Bewirtschaftung = (Neu)Erstellung der Artefakte › Berücksichtigung von Abhängigkeiten bei der Bewirtschaftung › Fokus: kontinuierlich neue Daten (Batches, Daten in Zeitscheiben) 6 Definition Data Lake in unserem Kontext:
  • 7. 7 Der Weg zum See Werkzeuge (Airflow/ Schedoscope) Lösungsansätze Vergleich& Empfehlungen
  • 8. › Interne Datenplattformen u.a. bei Otto Group BI › Gestartet mit Oozie; Probleme: › Langsame Entwicklungszyklen › Viele redundante XML-Dateien › UnzureichendeClusterauslastung › Fehleranfällig › Fehlersuche schwierig 8 Ausgangslage Werkzeuge easy statt oozie J › „Schemaiscode“ › Goal-drivenscheduling › OpenSource, Scala(OttoGroupBI) Airflow › „Workflow iscode“ › Dynamische Daten-Pipelines › OpenSource, Python(AirBnB)
  • 9. 9 s Agile Anbindung › Definition von „Views“ (Schema) › Statisch typisierte Scala-DSL › Agiles, schnelles Erstellen neuer Quellen & Ansichten Agile Anbindung › Abhängigkeiten Teil der View- Definition › Integriertes Unit-TestFramework › Entwickelt seit 2015bei Otto Group BI › Open Source (Apache SL 2.0) Agile Anbindung › Ziel-getriebene Beladung („Materialized Views on Demand“)
  • 10. 10 s Agile Anbindung case class Nodes( year: Parameter[String], month: Parameter[String]) extends View with MonthlyParameterization with Id with PointOccurrence { val version = fieldOf[Int] val user_id = fieldOf[Int] val longitude = fieldOf[Double] val latitude = fieldOf[Double] comment("View of nodes partitioned by year and month with tags and geohash") storedAs(Parquet()) }
  • 11. 11 s Agile Anbindung case class Nodes( ... val version = fieldOf[Int] val user_id = fieldOf[Int] val longitude = fieldOf[Double] val latitude = fieldOf[Double] transformVia(() => HiveTransformation( insertInto(this, queryFromResource(“hql/insertnodes.hql"))) ) ... }
  • 12. 12 Airflow Agile Anbindung › Schemader (Hive-)Tabellenextern verwaltet (z.B. mit db-deploy) › Schema-Änderungenmüssenmanuell nachgezogenwerden Agile Anbindung › DefinitionvonDaten-Pipelines/DAGsmit Python › Dynamische SpezifikationderAbhängigkeiten › TransformationenviaOperatoren › Entwickelt bei AirBnB › Seit Juni 2015 OpenSource Agile Anbindung › ZeitbasiertesScheduling › Konzept von„Sensoren“
  • 13. 13 Agile Anbindung Airflow upload_data = BashOperator( task_id='upload_data', bash_command='hadoop fs –put data.csv /data', dag=dag) process_data = HiveOperator( task_id='process_data', sql='hive_script.sql', dag=dag) upload_data.set_downstream(process_data)
  • 14. Vergleich Oozie Airflow Schedoscope Sprache Java Python Scala Workflow-Spezifikation XML Python Scala Definition Abhängigkeiten Statisch(innerhalb XML); Definition „globale Struktur“ Dynamisch (via Python); Definition „globale Struktur“ (= DAG) Dynamisch; Definition „lokal“ (pro View) Schema-Management extern extern intern (schema is code) Change-Management Transformationen nein nein ja Test-Framework nein nein ja Scheduling-Optionen data, time data (via Sensors), time Ziel / Goal Sonstige Features Coordinators, Bundles, ... GUI für Monitoring/Config; Plugin-Erweiterbarkeit; SLA-Management, ... GUI (Metascope); Anbindung an externe Dienste (Redis,...); ... 14
  • 16. 16 Der Weg zum See Lösungsansätze Vergleich& Empfehlungen
  • 17. Agilität Entwicklung: • Schema • Transformation • Workflow Deployment dev Testen Deployment prod Schema, SQL/Spark, Oozie- XML Maven, Jenkins,.. FitNesse, Explorativ, Tests mit Hive › Viele Schrauben › Viele Fehlerquellen 17
  • 18. › Data Engineering == Softwareentwicklung › Best Practices ähnlich 18 Agilität Wie wird man schneller? Agile Anbindung › Weniger unterschiedliche Tools weniger Konfigurationen an zu passen Agile Anbindung › Früh testen › Zeit bis zum entdeckten Fehler reduzieren › Continuous Integration/Delivery › Automatisierung!
  • 19. 19 Testing › Tippfehler (im XML, SQL) › Logische Fehler › Schema-Änderungen in vorgelagerten Tabellen › Änderungen im Verhalten der Plattform, ... end-to-end (zB FitNesse) › Langsam, Tests getrennt von Codebase › trotzdem wichtig! isoliert („unit-test style“) › define input, run transformation, check output
  • 20. 20 Testing Schedoscope 1 1 1 3 3 2 "processed.Nodes" should "load correctly" in { new Nodes(p("2013"), p("06")) with test { basedOn(nodeTags, nodes) then() numRows shouldBe 1 row(v(id) shouldBe "122318", v(occurredAt) shouldBe "2013-06-17 15:49:26Z", v(version) shouldBe 6, v(user_id) shouldBe 50299,
  • 21. 21 Testing Airflow 1 1 3 Agile Anbindung › Kein integriertes Testen › Einzelne Tasks können über CLI separat ausgeführt werden („airflow test“) › Keine direkte Unterstützung zur Erzeugung von Eingabedaten, Prüfen von Assertions › Aber: Python-Bordmittel (pyunit, ...) können nahtlos angebunden werden › Zügige manuelle Erstellung einer Testumgebung
  • 22. 22 Testing Airflow - Code 1 1 3 processed_clicklog = HiveTestDataHook( "src_omniture_clicklog", "version='post',report_suite='testsuite',day=20151014") for i in range(0,10): processed_clicklog.add_row({"evar": {1:"evar_1_val", 2:"evar_2_val"}}) processed_clicklog.write() self.run_task("omniture", "processed_to_datahub_events_pbox", "2015-10-14") assertEquals(len(datahub_events_pbox.get_contents()), 17) 1 2 3
  • 23. 23 Abhängigkeiten Wer A sagt, muss auch B sagen Agile Anbindung › Bereinigte Views basieren auf Rohdaten › Analytische Views <- Processed › Aggregationen und KPI › Export in Serving oder Analyische DB (Exasol, Redis) › Joins › Aggregate über Zeiträume › Sequentielle Verarbeitung, abhängig vom Vortag
  • 24. 24 Abhängigkeiten Beispiel Schedoscope case class Nodes( year: Parameter[String], month: Parameter[String]) extends View with JobMetadata { ... dependsOn(() => NodesWithGeohash(p(year), p(month))) dependsOn(() => NodeTags(p(year), p(month))) comment("View of nodes partitioned by year and month with tags and geohash") storedAs(Parquet()) } Agile AnbindungDynamisch, frei definierbar
  • 25. 25 Abhängigkeiten Beispiel Airflow upload_data = BashOperator( task_id=‘upload_data', bash_command='hadoop fs –put data.csv /data', dag=dag) process_data = HiveOperator( task_id='process_data', sql=‘hive_script.sql', dag=dag) upload_data.set_downstream(process_data) Dynamische Instantiierung der Operatoren Dynamische Abhängigkeiten
  • 26. 26 Late arriving data Lieber spät als nie 5.10.201621:59 5.10.201618:00 5.10.201618:00 5.10.201618:00 5.10.201618:00 5.10.201618:00 4.10.201623:02 4.10.201622:01 Batch: 6.10.2016 > Zeitzonen > techn. Verzögerung > falsche Systemzeit
  • 27. 27 Late Arriving Data 5.10.2016 3.10.2016 4.10.2016 3.10.2016 5.10.2016 4.10.2016 3.10.2016 5.10.2016 INSERT OVERWRITE + Idempotenz - Daten ggfmüssen wiederholt verarbeitet werden Ingest-Time Event-Time Dynamic Partitions + Einfach + Einmalige Verarbeitung - nicht idempotent - Abhängigkeiten
  • 28. 28 Der Weg zum See Agilität, Testing, Abhängigkeiten, Late arriving data Vergleich& Empfehlungen
  • 29. 29 Zusammenfassung Schedoscope Airflow • UmfassendesTool • Testframework • Schema-Management • Export-Funktionen(jdbc, Kafka) • Metadaten: Metascope • Leichtgewichtiger Ansatz • Workflow iscode • erweiterbar • KomfortableGUIs • Community (seit April im Apache Incubator) • kleine Community • Lernkurve • Alles-oder-nichts • ÜberschaubaresSet an Standard-Operatoren • Verteilungerfordert zusätzliche Infrastruktur • Schema-/Change-Management aussen vorDemo gerne zwischen den Talks!
  • 30. Vielen Dank Hans-Peter Zorn Dr. DominikBenz inovex GmbH ParkPlaza Ludwig-Erhard-Allee 6 76131 Karlsruhe