Apache Spark et RDD issu d'un fichier texte

a marqué ce sujet comme résolu.

Bonjour à tous,

J’ai installé Spark sur un esclave et sur son maître, j’ai connecté les deux machines (l’esclave apparaît bien dans la liste des Workers du maître), et j’ai distribué un programme sur le cluster.

Ce programme fait usage d’un RDD (transformation map et action reduce), et ce RDD existe grâce à un appel à la méthode textFile qui lit un fichier.

Ce fichier est situé uniquement sur le maître. Je lance apache-spark/sbin/spark-submit.sh en pensant que le maître donnerait ce fichier à l’esclave… mais apparemment… ce n’est pas le cas : il faut vraiment que je fasse un copier/coller de ce fichier dans l’esclave, sinon le maître m’affiche une exception FileNotFound.

Me serais-je trompé quelque part ?

Environ. Chaque noeud du cluster a Spark et HDFS. Quand tu mets ton fichier sur HDFS, il sera généralement découpé en morceau et chaque morceau sera placé sur 3 noeuds. Spark chargera ce fichier en mémoire depuis HDFS. Tu n’as pas à te soucier d’où se situe physiquement ce fichier.

+0 -0

@victor, pourrais-tu me dire si mes affirmations sont bonnes s’il te plaît ?

  1. le ./bin/spark-submit.sh est à lancer sur chaque client, pas sur le maître

  2. Chaque client doit avoir l’application (fichier .JAR)

Je pensais que le spark-submit était à lancer sur le maître, mais dans ce cas : pourquoi l’argument --master existe-t-il ? La doc c’est pas très claire à ce sujet : https://spark.apache.org/docs/2.1.0/submitting-applications.html

Edit important concernant le fichier

J’avais bien raison : les Workers ET le Master doivent chacun avoir accès au fichier local :

"If using a path on the local filesystem, the file must also be accessible at the same path on worker nodes. Either copy the file to all workers or use a network-mounted shared file system." (https://spark.apache.org/docs/2.1.0/programming-guide.html#external-datasets, partie External Datasets)

+0 -0

J’ai jamais eu ce genre de problème et je crois qu’on se comprend mal, ou que tu n’as pas compris ce qu’est hdfs.

Je mets les fichiers sur hdfs, donc ils sont répartis–au risque de me répéter–sur les machines du cluster. Je n’en fais donc pas du tout une copie par machine du cluster. Je ne le copie qu’une seule fois vers hdfs. J’assemble un jar avec sbt assembly,puis je le submit qu’une seule fois depuis le le gateway. Je ne copie donc pas le jar sur chaque machine.

+0 -0

Je ne parle pas du jar (qui selon moi est à submit sur le maître, dis-moi si je me trompe stp ? - à cause de l’option --master, qui me semble étrange du coup) mais bien d’un fichier de données ("external dataset"). La doc m’a l’air très claire à ce sujet, après je peux me tromper ?

OK, on tourne en rond là. Montre-moi comment tu as copié le fichier sur hdfs, puis connecte-toi à un nœud et montre-moi que le fichier est bien accessible sur hdfs à l’emplacement auquel ton programme le cherche.

+0 -0

Je n’ai effectivement pas copié mon fichier de données dans une quelconque partition gérée par HDFS, je suis bien dans le cas "If using a path on the local filesystem" (i.e. : je n’utilise pas le syst. de fichiers HDFS).

C’est bien pour cette raison que je dois partager mon fichier de données entre mon maître et mes esclaves avec NFS.

Par contre je voudrais bien faire comme toi tu fais (i.e. : utiliser HDFS), je vois à peu près ce que c’est, et ce n’est pas un système de fichiers directement lié à Spark. Je suppose donc que je ne vais pas trouver de doc° à ce sujet sur le site de Spark.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte