11 Novembre 2016

Partitionement des données en Scala

La methode repartition applicable sur un DataSet n’utilise pas la même fonction de hash que les RDD (API 1.6), il est donc possible que deux entiers aient le même hash rendant ainsi cette méthode inutile dans notre cas.

Une solution est d’utiliser la méthode partitionBy qui peut s’utiliser sur un DataFrameWriter (s’obtenant par df.write avec df notre DataSet). Cette méthode prend un nom de colone comme argument sous la forme d’une String. Au moment de sauvegarder les fichiers un dossier sera créé pour chaque valeur différente de cette colone. Par exemple dans notre cas on pourrait avoir :

/mnt/data # hdfs dfs -ls /sdss9.json
Found 25 items
-rw-r--r--   1 root supergroup          0 2016-11-14 17:00 /sdss9.json/_SUCCESS
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=0.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=1.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=10.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=11.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=12.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=13.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=14.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=15.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=16.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=17.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=18.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=19.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=2.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=20.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=21.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=22.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=23.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=3.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=4.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=5.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=6.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=7.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=8.0
drwxr-xr-x   - root supergroup          0 2016-11-14 17:00 /sdss9.json/modulo=9.0

Pour le moment plusieurs partitions sont créées par modulo, il faudrait en n’avoir qu’une seule afin de faciliter les déplacements eventuels.

Optimisation compilation avec Drone

Le plus long est le téléchargement des dépendances, il suffit donc de mettre ces dépendences en cache :

cache:
  mount:
    - /drone/.m2/repository

Ainsi que de rajouter cette option a maven : -Dmaven.repo.local=/drone/.m2/repository

Attention : il n’est possible de mettre en cache que les sous-dossiers de /drone

Comparaison performances

Sans le cache

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 55.950 s
[INFO] Finished at: 2016-11-15T14:35:27+00:00
[INFO] Final Memory: 38M/254M
[INFO] ------------------------------------------------------------------------

Avec le cache

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.874 s
[INFO] Finished at: 2016-11-15T14:46:05+00:00
[INFO] Final Memory: 35M/291M
[INFO] ------------------------------------------------------------------------