• Comment installer Apache Flink sur votre PC ou Mac et comment se familiariser avec CLI, Job Client Web interface et Job Manager Web Interface?
• Comment développer une application Big Data en Java / Scala en utilisant un IDE?
• Comment développer avec Apache Flink en mode interactif avec Flink Shell ou Zeppelin Notebook (Scala)?
http://www.meetup.com/fr/Paris-Apache-Flink-Meetup/events/225577395/
1. Apache Flink®
Prise en main rapide
http://www.meetup.com/fr/Paris-Apache-Flink-Meetup
Bilal BALTAGI
@bilal_baltagi
29/10/2015
2. 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
3. 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
4. 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
6. 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
1. 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
7. 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
8. 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
8
9. Exécution des exemples : Command-Line Interface
(Démo)
$ ./bin/flink run ./examples/flink-java-examples-0.9.1-
WordCount.jar #UNIX
$ .binflink.bat run .examplesflink-java-examples-0.9.1-
WordCount.jar #Windows
9
10. 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
11. 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 ressources
11
12. 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
14. 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écution
Exé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
16. 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
17. 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
18. Développement avec un IDE : Exemple
JAVA
$ 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
19. Développement avec un IDE : Exemple
SCALA
<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
20. Développement avec un IDE : Exemple
WordCount : Batch SocketTextStreamWordCount : Stream
1. Ouvrir un terminal pour écrire sur le port 9999
a. $ nc -lk 9999 # Écrire quelques
2. Exécuter SocketTextStreamWordCount avec les arguments
a. localhost 9999 #Adresse et port d’écoute
20
21. 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
22. Développement interactif :
1. Avantages
a. Exécution interactive du code
b. Exploration rapide des données
c. API Scala complète
22
24. 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()
25. Développement interactif : Scala shell
25
Défaut:
1. Pas de visualisation
2. Pas de sauvegarde
3. Pas de replay code
26. 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
27. Développement interactif : Zeppelin
27
(Démo)
$ cd zeppelin
$ ./bin/zeppelin-daemon.sh start
http://localhost:8080 #Ports par défaut 8080 et 8081
28. Développement interactif : Zeppelin
28
(Démo : Double)
%flink
val input = env.fromElements(1,2,3,4)
val doubleInput = input.map(_*2).collect
%flink
println("%table countn")
doubleInput.foreach(s=> println(s))
29. Développement interactif : Zeppelin
29
(Démo : WordCount)
%flink
val 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
%flink
println("%table wordtcountn")
wordcount.foreach(s=> println(s._1 +"t" + s._2))