30
Apache Flink® Prise en main rapide http://www.meetup.com/fr/Paris-Apache-Flink-Meetup Bilal BALTAGI @bilal_baltagi 29/10/2015

Apache flink - prise en main rapide

Embed Size (px)

Citation preview

Page 1: Apache flink - prise en main rapide

Apache Flink®

Prise en main rapidehttp://www.meetup.com/fr/Paris-Apache-Flink-Meetup

Bilal BALTAGI@bilal_baltagi

29/10/2015

Page 2: Apache flink - prise en main rapide

Plan

1. Installation & config (en local)

2. Exécution des exemples : CLI & Job Client Web interface

3. Développement avec un IDE : Batch Vs Streaming

4. Développement interactif : Scala shell Vs Zeppelin

2

Page 3: Apache flink - prise en main rapide

Installation en local : Pré requis

1. Vérification de la présence de Java :

a. $ java -version #Linux, OS X ou Windows

Installer JAVA et configurer JAVA_HOME ou %PATH%: ==>https://www.java.com/fr/==>http://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/index.html 3

Page 4: Apache flink - prise en main rapide

Installation en local : Téléchargement

1. Téléchargement d’Apache Flink http://flink.apache.org/

2. Décompression de l’archive $ tar xzf flink-*.tgz

3. Facultative : Déplacer et renommer le répertoire$ mv flink-0.9.1 ~/tools/flink

4

Page 5: Apache flink - prise en main rapide

Installation en local : contenu

5

Page 6: Apache flink - prise en main rapide

Installation en local : configuration

1. Fichier de configuration unique$ gedit ./conf/flink-conf.yaml

https://ci.apache.org/projects/flink/flink-docs-release-0.9/setup/config.html

2. Nombre de managers taskmanager.numberOfTaskSlots : *Nombre de CPU*

https://ci.apache.org/projects/flink/flink-docs-release-0.9/setup/config.html#configuring-taskmanager-processing-slots

6

Page 7: Apache flink - prise en main rapide

Plan

1. Installation & config (en local)

2. Exécution des exemples : CLI & Job Client Web interface

3. Développement avec un IDE : Batch Vs Streaming

4. Développement interactif : Scala shell Vs Zeppelin

7

Page 8: Apache flink - prise en main rapide

Exécution des exemples : Command-Line Interface

1. Exécution des programmes *.jar en ligne de commandes

a. Indifférence entre localhost/cluster

b. Passage des paramètres simplifié args[*]

c. Test de performance avec différents parallélisme -p 8

2. Démarrer l’interpréteur Flink

a. $ ./bin/start-local.sh #UNIX or Windows Cygwin

b. $ \bin\start-local.bat #Windows3. Tableau de bord localhost:8081

8

Page 9: Apache flink - prise en main rapide

Exécution des exemples : Command-Line Interface

(Démo)

$ ./bin/flink run ./examples/flink-java-examples-0.9.1-WordCount.jar #UNIX

$ .\bin\flink.bat run .\examples\flink-java-examples-0.9.1-WordCount.jar #Windows

9

Page 10: Apache flink - prise en main rapide

Exécution des exemples : Command-Line Interface

(Démo)

$ ./bin/flink run -p 8 ./examples/flink-java-examples-0.9.1-WordCount.jar file:///home/bilal/tools/flink/LICENSE file:////home/bilal/tools/flink/output/WordCountOut.csv

==>https://ci.apache.org/projects/flink/flink-docs-release-0.9/apis/cli.html

run / info / cancel / list

10

Page 11: Apache flink - prise en main rapide

Exécution des exemples : Job Client Web interface

1. Permet l'exécution des programmes *.jar sur une interface web

a. Visualisation du plan d'exécution

b. Visualisation des performances

c. Passage des paramètres args[*]

d. Visualisation de l’utilisation des ressources11

Page 12: Apache flink - prise en main rapide

Exécution des exemples : Job Client Web interface

1. Démarrer l’interpréteur

a. $ ./bin/start-local.sh

b. $ ./bin/start-webclient.sh #Par defaut port 8080

c. localhost:8080

12

Page 13: Apache flink - prise en main rapide

Exécution des exemples : Job Client Web interface

13

Page 14: Apache flink - prise en main rapide

Exécution des exemples : Job Client Web interface

(Démo)

Envoi du programme : flink-java-examples-0.9.1-WordCount.jar Visualisation du plan d'exécutionExécution et visualisation des performances-p 1 file:////home/bilal/tools/resources/bigfile.txt file:////home/bilal/tools/flink/output/bigfileCountP1.txt-p 8 file:////home/bilal/tools/resources/bigfile.txt file:////home/bilal/tools/flink/output/bigfileCountP8.txt

14

Page 15: Apache flink - prise en main rapide

Exécution des exemples : Job Client Web interface

15

Page 16: Apache flink - prise en main rapide

Plan

1. Installation & config (en local)

2. Exécution des exemples : CLI & Job Client Web interface

3. Développement avec un IDE : Batch Vs Streaming

4. Développement interactif : Scala shell Vs Zeppelin

16

Page 17: Apache flink - prise en main rapide

Développement avec un IDE : Recommandations

1. Disposer d’une version récente de Maven

2. Deux IDE : Eclipse et IntelliJ IDEA

i. Java

ii. Scala

==>https://ci.apache.org/projects/flink/flink-docs-release-0.9/apis/programming_guide.html 17

Page 18: Apache flink - prise en main rapide

Développement avec un IDE : ExempleJAVA

$ mkdir workspace$ cd workspace$ mkdir javaflink$ cd javaflink$ mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=0.9.1

SCALA$ mkdir workspace$ cd workspace$ mkdir scalaflink$ cd scalaflink$ mvn archetype:generate -

DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-scala -DarchetypeVersion=0.9.1

⇒ Importation du projet dans l’IDE

18

Page 19: Apache flink - prise en main rapide

Développement avec un IDE : ExempleSCALA

<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-scala</artifactId> <version>0.9.1</version></dependency><dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients</artifactId> <version>0.9.1</version></dependency>

JAVA<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>0.9.1</version></dependency><dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients</artifactId> <version>0.9.1</version></dependency>

19

Page 20: Apache flink - prise en main rapide

Développement avec un IDE : Exemple

WordCount : Batch SocketTextStreamWordCount : Stream

1. Ouvrir un terminal pour écrire sur le port 9999a. $ nc -lk 9999 # Écrire quelques

2. Exécuter SocketTextStreamWordCount avec les argumentsa. localhost 9999 #Adresse et port d’écoute

20

Page 21: Apache flink - prise en main rapide

Plan

1. Installation & config (en local)

2. Exécution des exemples : CLI & Job Client Web interface

3. Développement avec un IDE : Batch Vs Streaming

4. Développement interactif : Scala shell Vs Zeppelin

21

Page 22: Apache flink - prise en main rapide

Développement interactif :

1. Avantages

a. Exécution interactive du code

b. Exploration rapide des données

c. API Scala complète

22

Page 23: Apache flink - prise en main rapide

Développement interactif : Scala shell

23

1. $ ./bin/start-scala-shell.sh

Page 24: Apache flink - prise en main rapide

Développement interactif : Scala shell

24

(Démo)

Scala-Flink> val input = env.fromElements(1,2,3,4)Scala-Flink> val doubleInput = input.map(_*2)Scala-Flink> doubleInput.print()

Page 25: Apache flink - prise en main rapide

Développement interactif : Scala shell

25

Défaut:

1. Pas de visualisation

2. Pas de sauvegarde

3. Pas de replay code

Page 26: Apache flink - prise en main rapide

Développement interactif : Zeppelin

26

1. Interface-web

2. Ajout des graphes

3. Destiné aux data-scientists

4. Reporting schedulé

==>https://zeppelin.incubator.apache.org==>https://zeppelin.incubator.apache.org/docs/interpreter/flink.html

Page 27: Apache flink - prise en main rapide

Développement interactif : Zeppelin

27

(Démo)

$ cd zeppelin$ ./bin/zeppelin-daemon.sh start http://localhost:8080 #Ports par défaut 8080 et 8081

Page 28: Apache flink - prise en main rapide

Développement interactif : Zeppelin

28

(Démo : Double)%flinkval input = env.fromElements(1,2,3,4)val doubleInput = input.map(_*2).collect

%flinkprintln("%table count\n")doubleInput.foreach(s=> println(s))

Page 29: Apache flink - prise en main rapide

Développement interactif : Zeppelin

29

(Démo : WordCount)%flinkval text = env.fromElements("To be, or not to be",”bla bla bla”)val counts = text.flatMap { _.toLowerCase.split("\\W+")}.map { (_,1)}.groupBy(0).sum(1)val wordcount = counts.collect

%flinkprintln("%table word\tcount\n")wordcount.foreach(s=> println(s._1 +"\t" + s._2))

Page 30: Apache flink - prise en main rapide

MERCI

30