Building highly reliable data pipeline @datadog par Quentin François
Spark tools by Jonathan Winandy
1. Paris Data Eng — Octobre 2019
Jonathan WINANDY
univalence.io
2. Jonathan Winandy
• Co-Organisateur du Paris Data Eng
• Fondateur d’univalence.io “Data made simple”
-> Cabinet d’expertise en Data Engineering
• Conférencier dans le domaine de la Méga Data :
• Construction de Datalakes (spark-adabra)
• Accélération des cycles de développement (fast-spark)
• Qualité des données (centrifuge)
• …
4. Univalence.IO
• On améliore les activités de d’ingénierie de la donnée :
• Conseil
• Audit
• Blog
• Formation (Scala débutant/avancé, Kafka et Spark)
• Outils => SparkTools
Data made simple
5. Scala et Spark
• Objet
• FP
• Fonction f de A => B
• Complète
∀a ∈ A, f(a) ∈ B
• Déterministe
∀a ∈ A, f(a) == f(a)
• Sans effets de bord
• JVM + très bonne interop
• Composition de programmes
complexes
• Calcul distribué en
mémoire (+ disque)
• Interop avec les sources
de données
• Intégration avec les
orchestrateurs
• Architecture plus flexible
• Plus facile pour développer
• R / Python / Java / Scala
6. • ‘opencore’
• Aujourd’hui le projet ‘ParkaViz’ est privé !
• Mono Repo, Mono Branche
• https: //github.com/univalence/spark-tools/tree/master
• Pour :
• Scala 2.11 et 2.12
• Spark 2.0 à 2.4
• Intégration continue avec Circle-CI
• https: //circleci.com/gh/univalence/workflows/spark-tools
• Livraison sur bintray
• https: //bintray.com/univalence/univalence-jvm
7. Mono Repo + Mono Branch + Release Early
Chaque commit entraîne une
livraison des projets
(si les tests passent)
0.3+130-4432b345
version+distance-hash
resolvers += "spark-test" at "http: //dl.bintray.com/univalence/univalence-jvm"
libraryDependencies += "io.univalence" %% "spark-test" % "0.3+79-4936e981" % Test
=> François : "SBT, monorepo et livraison"
9. Plumbus
• Un projet pour les expérimentations,
en particulier pour le blog.
• Eg :
• Le cogroup pour les dataframes en
Spark
• https: //github.com/univalence/
spark-tools/blob/master/plumbus/
src/main/scala/io/univalence/
plumbus/cogroup.scala
10. Spark-Test (1/2)
• Les tests avec Spark n’est pas si facile !
• Spark-Test permet de :
• Fournir une SparkSession (configurable)
• Créer facilement des dataframes
• Comparer les dataframes
• Rapidement
• En expliquant clairement les différences
11. Spark-Test (2/2)
class MyTestClass extends FunSuiteLike with SparkTest {
test("create df with json string") {
// create df from json string
val df = dfFromJsonString("{a:1}", "{a:2}")
}
}
val dfUT = Seq(1, 2, 3).toDF("id")
val dfExpected = Seq(2, 1, 4).toDF("id")
dfUT.assertEquals(dfExpected)
in value at id, 2 was not equal to 1
dataframe({id: 1})
dataframe({id: 2})
in value at id, 1 was not equal to 2
dataframe({id: 2})
dataframe({id: 1})
in value at id, 4 was not equal to 3
dataframe({id: 3})
dataframe({id: 4})
=> Harrison : "Tests Spark simples et efficaces avec Spark-Test"
12. Fenek (~alpha)
• Permet de modéliser des pipelines colonnes
par colonnes.
• Test des colonnes séparément.
• Meilleur gestion des “UDF”s.
13. Spark-ZIO
• Parce que l’API de Spark n’est pas (assez) pure !
• API plus propre
• Meilleur code pour les pipelines Spark
• Gestion de la SparkSession, du Load, du Write, …
• Permet d’améliorer la performance des petits pipelines.
• Mais aussi du ‘retry’, ‘recover’, ‘scheduling’, …
• A venir, gestion des appels “REST” au milieu d’un job
spark.
=> Phil : "Apprivoiser Spark avec ZIO"
14. Centrifuge -> Parka
• Outils de gestion de la qualité des données :
• Ligne à ligne
• Globale (DeltaQA)
->
15. Parka / DeltaQA
• Calcul d'indicateurs pour les tests de non-régression.
• Peut-on comparer f’ (la nouvelle transformation) et f
pour s’assurer que f’ est meilleure ?
f f’
Update
16. À la main ?
1. On prend un échantillon S
2. On map avec f => R
3. On map avec f’ => R’
4. ???
5. Profit !
18. Feuille de route
• Parka
• Meilleures analyses
• Données imbriquées
• …
• ParkaViz as a Service (gratuit ?)
• Intégration des projets encore dans les cartons
• Ex. SchemaUtils
• Avoir des contributeurs externes à Univalence