RAPPORT TECHNIQUE PRÉSENTÉ À L’ÉCOLE DE TECHNOLOGIE SUPÉRIEURE DANS LE CADRE DU COURS GTI792 PROJET DE FIN D’ÉTUDES EN GÉNIE DES TI ADAMCLOUD UNE INFRASTRUCTURE PORTABLE POUR LE TRAITEMENT DE DONNÉES GÉNOMIQUES SÉBASTIEN BONAMI BONS22049000 DÉPARTEMENT DE GÉNIE LOGICIEL ET DES TI Professeur-superviseur Alain April MONTRÉAL, 15 DÉCEMBRE 2014 AUTOMNE 2014
79
Embed
RAPPORT TECHNIQUE PRÉSENTÉ À L’ÉCOLE DE TECHNOLOGIE …publicationslist.org/data/a.april/ref-518/Bonami... · 2015-12-30 · rapport technique prÉsentÉ À l’École de technologie
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
RAPPORT TECHNIQUE
PRÉSENTÉ À L’ÉCOLE DE TECHNOLOGIE SUPÉRIEURE
DANS LE CADRE DU COURS GTI792 PROJET DE FIN D’ÉTUDES EN GÉNIE DES TI
ADAMCLOUD
UNE INFRASTRUCTURE PORTABLE
POUR LE TRAITEMENT DE DONNÉES GÉNOMIQUES
SÉBASTIEN BONAMI
BONS22049000
DÉPARTEMENT DE GÉNIE LOGICIEL ET DES TI
Professeur-superviseur
Alain April
MONTRÉAL, 15 DÉCEMBRE 2014
AUTOMNE 2014
REMERCIEMENTS
Tout d’abord, je remercie mon professeur-superviseur, Alain April, pour l’encadrement qu’il y a
offert tout au long du projet. J’ai beaucoup apprécié son enthousiasme et sa complicité dès notre
première rencontre.
Je remercie également David Lauzon pour sa grande collaboration qui a permis de tenir un
avancement continu du projet chaque semaine. Son implication dans le projet a été très précieuse et
ses efforts consacrés furent très appréciés. Il était très disponible pour m’aider dans la réalisation des
tâches et pour répondre à de nombreuses interrogations.
Ensuite, je remercie Patrice Dion, technicien à l’ÉTS, qui a fait les démarches pour l’emprunt de
matériel et pour son temps accordé à la fin du projet concernant l’implantation sur un serveur de
l’ÉTS. Il fut ouvert et disponible aux moments cruciaux.
Aussi, je veux mentionner Tony Bussières, un entrepreneur, que j’ai rencontré lors de l’évènement
« Big Data Montréal » [1] et qui m’a donné un coup de pouce à quelques reprises pour apporter son
expertise.
Enfin, je donne une petite mention à Abdoulaye Mbaye, étudiant à la maitrise, qui a participé aux
discussions lors des réunions. Il fait un projet d’études en lien avec ma réalisation et je lui souhaite
bon succès.
ADAMCLOUD
UNE INFRASTRUCTURE PORTABLE
POUR LE TRAITEMENT DE DONNÉES GÉNOMIQUES
SÉBASTIEN BONAMI
BONS22049000
RÉSUMÉ
Ce rapport regroupe la documentation se rattachant au projet de fin d’études réalisé dans le cadre du
programme génie des technologies de l’information à l’ÉTS. Le nom du projet AdamCloud fait
référence à deux éléments qui sont au cœur du projet. Adam est l’outil au centre de la chaîne de
traitement de génomes. Cloud veut signifier que le projet envisage de se reposer sur un ensemble de
processus utilisant des serveurs informatiques accessibles à distance. Le but de ce projet est de
conceptualiser une infrastructure portable en big data incluant des outils performants en génomique.
Les hôpitaux, notamment au Québec, utilisent une procédure fastidieuse pour faire le traitement de
données génomiques chez leurs patients. Une amélioration envisageable est d’accélérer cette
procédure avec de nouvelles technologies.
En plus d’Adam, il y a aussi deux autres outils qui font partie de la chaîne de traitement étudiée :
Snap et Avocado. Ces trois outils combinés permettent justement un traitement complet de données
génomiques. Ce sont des logiciels qui sont en plein développement voulant innover par rapport à
d’anciennes technologies.
Afin d’automatiser le déploiement des applications, l’outil principal utilisé pour arriver à une solution
apportant portabilité est Docker. Docker ne fait pas de virtualisation, mais amène une approche
différente. Docker peut construire automatiquement des images en lisant les instructions d'un
Dockerfile qui ressemble à un script. Un Dockerfile est un document texte qui contient toutes les
commandes qu’un utilisateur devrait entrer pour installer et configurer manuellement un logiciel. Un
conteneur Linux peut alors être exécuté à partir de cette image et un nouvel environnement est mis à
disposition rapidement.
La solution se récapitule en la création de plusieurs images Docker notamment pour les technologies
Snap, Adam, Avocado, Spark et Hadoop (HDFS). Aussi, l’utilisation d’images déjà existantes soit
Weave et cAdvisor pour ajouter des fonctionnalités externes à Docker. Aussi, une mise en place de
trois environnements fonctionnels qui se distinguent.
Enfin, il reste des itérations intéressantes dans les mois et années à avenir qui pourraient amener une
continuation à ce projet comme un approfondissement des tests de performance et une vérification de
la qualité des résultats pour éventuellement amener la solution en production.
CHAPITRE 1 MISE EN CONTEXTE ......................................................................................2 1.1 Big data ..........................................................................................................................2 1.2 Génomique .....................................................................................................................2 1.3 Problématique ................................................................................................................3 1.4 Objectifs .........................................................................................................................4
CHAPITRE 2 ANALYSE ET MÉTHODOLOGIE ..................................................................5
CHAPITRE 3 TECHNOLOGIES UTILISÉES .........................................................................7 3.1 Ubuntu Server ................................................................................................................7 3.2 Big data ..........................................................................................................................7
CHAPITRE 5 ARCHITECTURE............................................................................................16 5.1 Équipement mis à disposition ......................................................................................16
6.2.3.1 Étapes sur l’hôte maître ...................................................................25 6.2.3.2 Étapes sur un hôte esclave ...............................................................26
CHAPITRE 9 TRAVAUX FUTURS ......................................................................................37 9.1 À court terme ...............................................................................................................37 9.2 À moyen terme .............................................................................................................37
9.3 À long terme ................................................................................................................38
singlehost_images.sh Fait un pull des images google/cadvisor et ubuntu:14.04. Construit aussi les images snap-adam-avocado-spark, oracle_jdk7 et spark_1.1.0-prebuilthadoop2.3.
XI singlehost_containers.sh Exécute des conteneurs pour cAdvisor, Snap-Adam-Avocado, Spark Master et Spark Worker.
XII
multihosts_pri_images.sh Fait un pull des images google/cadvisor, zettio/weave et ubuntu:14.04. Construit aussi les images snap, adam, avocado, oracle_jdk7, spark_1.1.0-prebuilthadoop2.3 et hadoop_2.3.0.
XIII
multihosts_pri_containers.sh Exécute des conteneurs pour cAdvisor, Weave, Snap, Adam, Avocado, Spark Master, HDFS NameNode et HDFS SecondaryNameNode.
XIV
multihosts_sec_images.sh Fait un pull des images google/cadvisor, zettio/weave et ubuntu:14.04. Construis aussi les images oracle_jdk7, spark_1.1.0-prebuilthadoop2.3 et hadoop_2.3.0.
XV multihosts_sec_containers.sh Exécute des conteneurs pour cAdvisor, Weave, Spark Worker et HDFS DataNode.
Tableau 3 Détails des scripts bash
Remarque : certains de ces scripts utilisent la nouvelle commande « exec » existante depuis la version 1.3.0 de Docker [15].
Aussi, il faut avoir un utilisateur avec les privilèges administrateur et qui soit présent le groupe « docker ».
Annexe Image
Image
parente Service Description Taille
- google/cadvisor - Interface Web
Téléchargée à partir de Docker Hub, il peut
surveiller les conteneurs. 17.56 Mo
- zettio/weave - Routage virtuel
Téléchargée à partir de Docker Hub, il peut créer
des liens de réseau entre des conteneurs sur des
machines physiques distinctes. 10.83 Mo
- ubuntu:14.04 - -
Téléchargée à partir de Docker Hub, c’est Ubuntu
Server 14.04 LTS 64-bit. 192.7 Mo
III snap ubuntu:14.04 - Snap dernière version. Démarré à la demande. 446.9 Mo
IV adam ubuntu:14.04 -
Adam dernière version avec les binaires Spark 1.1.0
précompilés pour Hadoop 2.3. Démarré à la
demande. 1.732 Go
V avocado ubuntu:14.04 -
Avocado dernière version avec les binaires Spark
1.1.0 précompilés pour Hadoop 2.3. Démarré à la
demande. 1.87 Go
VI
snap-adam-
avocado-spark ubuntu:14.04 -
Snap, Adam et Avocado dernières versions avec les
binaires Spark 1.1.0 précompilés pour Hadoop 2.3.
Démarrés à la demande. 2.39 Go
VII oraclejdk_7 ubuntu:14.04 Java Oracle JDK version 7. 735.6 Mo
VIII
spark_1.1.0-
prebuilthadoop2.3 oraclejdk_7
Spark Master /
Spark Worker Binaires Spark 1.1.0 précompilés pour Hadoop 2.3. 1.349 Go
IX hadoop_2.3.0 oraclejdk_7
NameNode /
SecondaryNameNode /
DataNode
Hadoop version 2.3.0 configurée pour YARN et
HDFS (utile pour HDFS dans ce projet). 1.323 Go
24
6.2.1 Environnement autonome
Pour la création de l’environnement autonome, c’est relativement simple d’y procéder manuellement
étant donné la complexité réduite. Comme préalable, il faut uniquement avoir Docker d’installé.
1. Téléchargement du seul Dockerfile présent dans le chemin « Dockerfiles/snap-adam-avocado-
spark ».
2. Faire un pull et construction des images nécessaires avec les commandes suivantes :
Ces étapes sont réalisées sur un seul hôte que nous appelons le maître. Il n'y a donc pas d'autres hôtes.
Comme préalable, il faut uniquement avoir Docker d’installé.
1. Téléchargement des Dockerfiles et des scripts suivants :
Dockerfiles/snap-adam-avocado-spark
Dockerfiles/oraclejdk_7
Dockerfiles/spark_1.1.0-prebuilthadoop2.3
singlehost_images.sh
singlehost_containers.sh
2. Exécution du script pour obtenir les images nécessaires. Préalablement, il faut donner la
permission d'exécution avec la commande suivante :
sudo chmod +x singlehost_images.sh
25
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./singlehost_images.sh
Remarque : cette étape prend environ 35 minutes sur un Mac mini avec une vitesse de téléchargement de 30 Mbit/s.
3. Exécution du script pour exécuter les conteneurs. Préalablement, il faut donner la permission
d'exécution avec la commande suivante :
sudo chmod +x singlehost_containers.sh
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./singlehost_containers.sh
6.2.3 Environnement distribué
6.2.3.1 Étapes sur l’hôte maître
Ces étapes sont réalisées sur l’hôte que nous appelons le maître. Comme préalables, il faut avoir
Docker et Weave d’installés.
1. Téléchargement des Dockerfiles et des scripts suivants :
Dockerfiles/snap
Dockerfiles/adam
Dockerfiles/avocado
Dockerfiles/oraclejdk_7
Dockerfiles/spark_1.1.0-prebuilthadoop2.3
Dockerfiles/hadoop_2.3.0
multihosts_pri_images.sh
multihosts_pri_containers.sh
2. Exécution du script pour obtenir les images nécessaires. Préalablement, il faut donner la
permission d'exécution avec la commande suivante :
sudo chmod +x multihosts_pri_images.sh
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./multihosts_pri_images.sh
Remarque : cette étape prend environ 45 minutes sur un Mac mini avec une vitesse de téléchargement de 30 Mbit/s.
26
3. Exécution du script pour exécuter les conteneurs. Préalablement, il faut donner la permission
d'exécution avec la commande suivante :
sudo chmod +x multihosts_pri_containers.sh
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./ multihosts_pri_containers.sh
6.2.3.2 Étapes sur un hôte esclave
Ces étapes sont réalisées sur un hôte que nous appelons un esclave. Il peut y en avoir plusieurs.
1. Téléchargement des Dockerfiles et des scripts suivants :
Dockerfiles/oraclejdk_7
Dockerfiles/spark_1.1.0-prebuilthadoop2.3
Dockerfiles/hadoop_2.3.0
multihosts_sec_images.sh
multihosts_sec_containers.sh
2. Exécution du script pour obtenir les images nécessaires. Préalablement, il faut donner la
permission d'exécution avec la commande suivante :
sudo chmod +x multihosts_sec_images.sh
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./multihosts_sec_images.sh
Remarque : cette étape prend environ 7 minutes sur un Mac mini avec une vitesse de téléchargement de 30 Mbit/s.
3. Exécution du script pour exécuter les conteneurs. Préalablement, il faut donner la permission
d'exécution avec la commande suivante :
sudo chmod +x multihosts_sec_containers.sh
Ensuite, le script peut être exécuté avec la commande suivante :
sudo ./ multihosts_sec_containers.sh
Remarque : le sous-réseau utilisé dans ces scripts est 192.168.0.0/24. Les adresses IP sont configurées avec Weave.
27
CHAPITRE 7
TESTS
7.1 Données
Les données suivantes utilisées pour faire les tests sont pour la plupart tirées du site FTP public de
« 1000 Genomes » [16].
Chromosome de référence GRCh37 (1 fichier FASTA compressé de 70 Mo) : o http://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes/chr1.fa.gz
Génome de référence GRCh37 (1 fichier FASTA compressé de 851 Mo) : o ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.gz
Unique séquence du génome HG00096 (1 fichier FASTQ compressé de 24.1 Mo) : o ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/sequence_read/SRR062634.filt.fastq.gz
Paire de séquences du génome HG00096 (2 fichiers FASTQ compressés de 1.8 Go chaque) : o ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/sequence_read/SRR062634_1.filt.fastq.gz
o ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/sequence_read/SRR062634_2.filt.fastq.gz
Génome déjà aligné HG00096 (1 fichier BAM de 14.5 Go) : o ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/alignment/HG00096.mapped.ILLUMINA
.bwa.GBR.low_coverage.20120522.bam
Les informations relatives à ces données se trouvent, entre autres, dans les fichiers commençant par
« README » au lien suivant : ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp.
Ces données doivent être placées dans le répertoire « /docker-volume » qui sert en tant que point de
montage à l'exécution des scripts de conteneurs.
La plupart des données sont compressées avec un taux de compression d'environ 3:1. Pour
décompresser un fichier, l’outil Gzip est nécessaire [17].
Voici la commande pour simplement décompresser un fichier :
gzip -d FICHIER
Remarque : Snap ne peut pas effectuer une indexation avec un fichier FASTA compressé, mais il peut effectuer un
Produire des scripts pour automatiser un exemple de déploiement.
Compléter la documentation concernant l’infrastructure.
Élément(s) bloquant(s) :
Voir le problème 6 dans l’Annexe XVII.
Plan d'action :
Fournir les instructions à Patrice Dion pour le déploiement sur les serveurs de l’ÉTS.
Faire des tests sur le(s) serveur(s) de l’ÉTS mis à disposition.
Lundi 8 décembre 2014
Ce qui a été fait :
Fournir les instructions à Patrice Dion pour le déploiement sur les serveurs de l’ÉTS.
Faire des tests sur un premier serveur de l’ÉTS.
Élément(s) bloquant(s) :
Voir le problème 7 dans l’Annexe XVII. J’ai décidé d’utiliser un autre génome pour
remplacer celui choisi.
Plan d'action :
Continuer les tests en utilisant aussi un deuxième serveur de l’ÉTS (distribué).
Préparer la présentation orale.
Terminer la rédaction du rapport final.
52
ANNEXE III
DOCKERFILE POUR SNAP
# Building the image using UBUNTU 14.04 FROM ubuntu:14.04 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Installing GIT, MAKE and G++ RUN sudo apt-get update && sudo apt-get install -y git make g++ # Installing ZLIB 1.2.8 ADD http://zlib.net/zlib-1.2.8.tar.gz / RUN sudo tar -xf /zlib-1.2.8.tar.gz RUN sudo rm /zlib-1.2.8.tar.gz RUN sudo mv /zlib-1.2.8 /usr/local RUN sudo ln -s /usr/local/zlib-1.2.8 /usr/local/zlib RUN cd /usr/local/zlib-1.2.8 && sudo ./configure && sudo make && sudo make install # Installing SNAP RUN sudo git clone https://github.com/amplab/snap RUN sudo mv /snap /usr/local RUN cd /usr/local/snap && sudo make ENV SNAP_HOME /usr/local/snap # Adding the home directory to system variable to make SNAP run easier ENV PATH $PATH:$SNAP_HOME # Autostarting SNAP to show available commands RUN bash -c 'echo "snap" >> ~/.bashrc'
53
ANNEXE IV
DOCKERFILE POUR ADAM
# Building the image using UBUNTU 14.04 FROM ubuntu:14.04 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Getting SPARK 1.1.0 binaries pre-built for HADOOP 2.3 ADD http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0-bin-hadoop2.3.tgz / RUN sudo tar -zxf /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo rm /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo mv /spark-1.1.0-bin-hadoop2.3 /usr/local RUN sudo ln -s /usr/local/spark-1.1.0-bin-hadoop2.3 /usr/local/spark ENV SPARK_HOME /usr/local/spark # Installing GIT and JDK RUN sudo apt-get update && sudo apt-get install -y git default-jdk # Getting MAVEN 3.2.3 ADD http://mirror.its.dal.ca/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz / RUN sudo tar -zxf /apache-maven-3.2.3-bin.tar.gz RUN sudo rm /apache-maven-3.2.3-bin.tar.gz RUN sudo mv /apache-maven-3.2.3 /usr/local RUN sudo ln -s /usr/local/apache-maven-3.2.3/bin/mvn /usr/bin/mvn # Giving more memory for MAVEN ENV MAVEN_OPTS -Xmx512m -XX:MaxPermSize=128m # Installing ADAM RUN git clone https://github.com/bigdatagenomics/adam RUN sudo mv /adam /usr/local RUN sed -i /usr/local/adam/pom.xml -e '27s!2.2!2.3!' RUN cd /usr/local/adam && sudo mvn clean package -DskipTestexp ENV ADAM_HOME /usr/local/adam # Adding the home directory to system variable to make ADAM run easier ENV PATH $PATH:$ADAM_HOME/bin # Autostarting ADAM to show available commands RUN bash -c 'echo "adam-submit" >> ~/.bashrc'
54
ANNEXE V
DOCKERFILE POUR AVOCADO
# Building the image using UBUNTU 14.04 FROM ubuntu:14.04 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Getting SPARK 1.1.0 binaries pre-built for HADOOP 2.3 ADD http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0-bin-hadoop2.3.tgz / RUN sudo tar -zxf /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo rm /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo mv /spark-1.1.0-bin-hadoop2.3 /usr/local RUN sudo ln -s /usr/local/spark-1.1.0-bin-hadoop2.3 /usr/local/spark ENV SPARK_HOME /usr/local/spark # Installing GIT and JDK RUN sudo apt-get update && sudo apt-get install -y git default-jdk
# Getting MAVEN 3.2.3 ADD http://mirror.its.dal.ca/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz / RUN sudo tar -zxf /apache-maven-3.2.3-bin.tar.gz RUN sudo rm /apache-maven-3.2.3-bin.tar.gz RUN sudo mv /apache-maven-3.2.3 /usr/local RUN sudo ln -s /usr/local/apache-maven-3.2.3/bin/mvn /usr/bin/mvn # Giving more memory for MAVEN ENV MAVEN_OPTS -Xmx512m -XX:MaxPermSize=128m # Installing AVOCADO RUN git clone https://github.com/bigdatagenomics/avocado RUN sudo mv /avocado /usr/local RUN cd /usr/local/avocado && sudo mvn package ENV AVOCADO_HOME /usr/local/avocado # Adding the home directory to system variable to make AVOCADO run easier ENV PATH $PATH:$AVOCADO_HOME/bin # Autostarting AVOCADO to show available commands RUN bash -c 'echo "avocado-submit" >> ~/.bashrc'
55
ANNEXE VI
DOCKERFILE POUR SNAP, ADAM ET AVOCADO
# Building the image using UBUNTU 14.04 FROM ubuntu:14.04 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Getting SPARK 1.1.0 binaries pre-built for HADOOP 2.3 ADD http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0-bin-hadoop2.3.tgz / RUN sudo tar -zxf /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo rm /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo mv /spark-1.1.0-bin-hadoop2.3 /usr/local RUN sudo ln -s /usr/local/spark-1.1.0-bin-hadoop2.3 /usr/local/spark ENV SPARK_HOME /usr/local/spark # Installing GIT, MAKE, G++ and JDK RUN sudo apt-get update && sudo apt-get install -y git make g++ default-jdk # Installing ZLIB 1.2.8 (for SNAP) ADD http://zlib.net/zlib-1.2.8.tar.gz / RUN sudo tar -xf /zlib-1.2.8.tar.gz RUN sudo rm /zlib-1.2.8.tar.gz RUN sudo mv /zlib-1.2.8 /usr/local RUN sudo ln -s /usr/local/zlib-1.2.8 /usr/local/zlib RUN cd /usr/local/zlib-1.2.8 && sudo ./configure && sudo make && sudo make install # Installing SNAP RUN sudo git clone https://github.com/amplab/snap RUN sudo mv /snap /usr/local RUN cd /usr/local/snap && sudo make ENV SNAP_HOME /usr/local/snap # Getting MAVEN 3.2.3 (for ADAM and AVOCADO) ADD http://mirror.its.dal.ca/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz / RUN sudo tar -zxf /apache-maven-3.2.3-bin.tar.gz RUN sudo rm /apache-maven-3.2.3-bin.tar.gz RUN sudo mv /apache-maven-3.2.3 /usr/local RUN sudo ln -s /usr/local/apache-maven-3.2.3/bin/mvn /usr/bin/mvn # Giving more memory for MAVEN ENV MAVEN_OPTS -Xmx512m -XX:MaxPermSize=128m # Installing ADAM RUN git clone https://github.com/bigdatagenomics/adam RUN sudo mv /adam /usr/local RUN sed -i /usr/local/adam/pom.xml -e '27s!2.2!2.3!' RUN cd /usr/local/adam && sudo mvn clean package -DskipTestexp ENV ADAM_HOME /usr/local/adam # Installing AVOCADO RUN git clone https://github.com/bigdatagenomics/avocado RUN sudo mv /avocado /usr/local RUN cd /usr/local/avocado && sudo mvn package ENV AVOCADO_HOME /usr/local/avocado # Adding the home directories to system variable to make SNAP, ADAM and AVOCADO run easier ENV PATH $PATH:$SNAP_HOME:$ADAM_HOME/bin:$AVOCADO_HOME/bin
56
ANNEXE VII
DOCKERFILE POUR ORACLE JDK
# Building the image using UBUNTU 14.04 FROM ubuntu:14.04 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Installing Oracle JDK 7 RUN sudo apt-get update && sudo apt-get install -y software-properties-common RUN sudo add-apt-repository ppa:webupd8team/java -y RUN sudo apt-get update && sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && sudo apt-get install -y oracle-java7-installer RUN ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/jdk ENV JAVA_HOME /usr/lib/jvm/jdk
57
ANNEXE VIII
DOCKERFILE POUR SPARK
# Building the image using my Oracle JDK 7 FROM oraclejdk_7 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Getting SPARK 1.1.0 binaries pre-built for HADOOP 2.3 ADD http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0-bin-hadoop2.3.tgz / RUN sudo tar -zxf /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo rm /spark-1.1.0-bin-hadoop2.3.tgz RUN sudo mv /spark-1.1.0-bin-hadoop2.3 /usr/local RUN sudo ln -s /usr/local/spark-1.1.0-bin-hadoop2.3 /usr/local/spark ENV SPARK_HOME /usr/local/spark # Adding the home directory to system variable to make SPARK run easier ENV PATH $PATH:$SPARK_HOME/bin # Autostarting SPARK to show available commands RUN bash -c 'echo "spark-submit" >> ~/.bashrc'
58
ANNEXE IX
DOCKERFILE POUR HADOOP
# Building the image using my Oracle JDK 7 FROM oraclejdk_7 # Naming me as the maintainer MAINTAINER Sebastien Bonami # Installing HADOOP 2.3.0 ADD http://archive.apache.org/dist/hadoop/core/hadoop-2.3.0/hadoop-2.3.0.tar.gz / RUN sudo tar -zxf /hadoop-2.3.0.tar.gz RUN sudo rm /hadoop-2.3.0.tar.gz RUN sudo mv /hadoop-2.3.0 /usr/local RUN sudo ln -s /usr/local/hadoop-2.3.0 /usr/local/hadoop # Setting HADOOP environment variables ENV HADOOP_INSTALL /usr/local/hadoop ENV PATH $PATH:$HADOOP_INSTALL/bin ENV PATH $PATH:$HADOOP_INSTALL/sbin ENV HADOOP_MAPRED_HOME $HADOOP_INSTALL ENV HADOOP_COMMON_HOME $HADOOP_INSTALL ENV HADOOP_HDFS_HOME $HADOOP_INSTALL ENV HADOOP_COMMON_LIB_NATIVE_DIR $HADOOP_INSTALL/lib/native ENV YARN_HOME $HADOOP_INSTALL # Setting JAVA_HOME environment variable for HADOOP RUN sed -i 's/JAVA_HOME=${JAVA_HOME}/JAVA_HOME=\/usr\/lib\/jvm\/jdk/g' /usr/local/hadoop/etc/hadoop/hadoop-env.sh # Creating HDFS directories RUN mkdir -p /hdfs-volume/namenode RUN mkdir -p /hdfs-volume/datanode # Copying HADOOP configuration files ADD core-site.xml $HADOOP_INSTALL/etc/hadoop/core-site.xml ADD yarn-site.xml $HADOOP_INSTALL/etc/hadoop/yarn-site.xml ADD mapred-site.xml $HADOOP_INSTALL/etc/hadoop/mapred-site.xml ADD hdfs-site.xml $HADOOP_INSTALL/etc/hadoop/hdfs-site.xml
SCRIPT POUR CONTENEURS – MAÎTRE – PSEUDO-DISTRIBUÉ
#!/bin/bash #Running cAdvisor with web interface on port 8079 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8079:8080 --detach=true --name=cadvisor google/cadvisor:latest
#Running the client (SNAP, ADAM and AVOCADO) docker run -d -ti --name client-genomics -h client-genomics -v /docker-volume:/docker-volume snap-adam-avocado-spark
#Running the Spark Master and Worker with web interfaces on ports 8080 and 8081 docker run -d -ti --name spark -h spark -p 8080:8080 -p 8081:8081 --link client-genomics:client-genomics -v /docker-volume:/docker-volume spark_1.1.0-prebuilthadoop2.3 docker exec -d spark /usr/local/spark/bin/spark-class org.apache.spark.deploy.master.Master docker exec -d spark /usr/local/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark:7077
#Add hosts entry for Spark IP Address in the client SPARK_IP=`eval "docker inspect --format '{{ .NetworkSettings.IPAddress }}' spark"` docker exec client-genomics sudo -- sh -c "echo $SPARK_IP spark >> /etc/hosts"
#!/bin/bash #Choosing an IP or Hostname to peer to for Weave echo "Please enter the IP or Hostname of the primary node." read input_hostname #Asking if it's the first (1), second (2), ... secondary node on the cluster echo "Please enter the rank number. Example, enter 1 if it's the first secondary node on the cluster." read input_number if [ "$input_number" -lt 1 ] || [ "$input_number" -gt 8 ]; then echo "Invalid number ($input_number). Must be between 1 and 8." else echo "Number ($input_number) is valid." #Running cAdvisor with web interface on port 8079
Command being timed: "snap index chr1.fa chr1.snap" User time (seconds): 132.95 System time (seconds): 5.31 Percent of CPU this job got: 116% Elapsed (wall clock) time (h:mm:ss or m:ss): 1:58.99 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 2844944 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 4 Minor (reclaiming a frame) page faults: 580700 Voluntary context switches: 3804 Involuntary context switches: 32455 Swaps: 0 File system inputs: 497272 File system outputs: 4760464 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
66
ANNEXE XVII
DÉTAILS DE PROBLÈMES RENCONTRÉS
Voici certains des problèmes techniques rencontrés en cours de route lors d’installations, de
configurations ou de tests sur les différents logiciels utilisés.
1. Erreur empêchant d’exécuter Adam.
Description
Erreur lors de l’exécution de n’importe quelle commande d’Adam :
Error: Unrecognized option '--conf'.
Solution
Installer la version 1.1.0 (ou plus récente) de Spark. Le flag « --conf » est seulement
disponible depuis cette version et la nouvelle version d’Adam l’utilise lorsqu’il appelle spark-