2016-04-14 1 views
0

J'utilise le script d'allumage soumettre à télécharger mon script python au cluster Spark, mais je reçois l'erreur suivante:Bluemix: Apache Spark: Configuration de la mémoire de pilote pour étincelle soumettre

Traceback (most recent call last): 
    File "/gpfs/fs01/user/sf6d-7c3a9c08343577-05540e1c503a/data/workdir/spark-driver-cc30d6d8-1518-45b1-a4a7-8421deaa3482/2_do_extract.py", line 139, in do_extraction 
    r = resRDD.collect() 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/pyspark.zip/pyspark/rdd.py", line 771, in collect 
    port = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/pyspark.zip/pyspark/traceback_utils.py", line 78, in __exit__ 
    self._context._jsc.setCallSite(None) 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 811, in __call__ 
    answer = self.gateway_client.send_command(command) 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 624, in send_command 
    connection = self._get_connection() 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 579, in _get_connection 
    connection = self._create_connection() 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 585, in _create_connection 
    connection.start() 
    File "/usr/local/src/spark160master/spark-1.6.0-bin-2.6.0/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 697, in start 
    raise Py4JNetworkError(msg, e) 
Py4JNetworkError: An error occurred while trying to connect to the Java server 
> 

Je suis certain que cette erreur se produit en raison de l'absence de pilote-mémoire lors de l'exécution du script, car pour un jeu de données de plus petite taille, le script s'exécute correctement et pour un ensemble de données plus grand, j'obtiens cette erreur.

lecture de la documentation d'allumage soumettre, j'ai essayé toutes les configurations pour augmenter la mémoire du pilote, exécuteur mémoire etc comme suit

/bin/sh spark-submit.sh --vcap vcap.json my_python_script.py --master https://169.54.219.20 --deploy-mode cluster --driver-memory 5g --executor-memory 5g --driver-maxResultSize 5g --worker-memory 5g 

Mais il semble impossible de changer la mémoire.

S'il vous plaît me expliquer comment puis-je définir des variables, parce que usuage mémoire même modérée échoue.

Répondre

1

Les ressources vos travaux d'allumage sont autorisés est déterminé par le plan que vous choisissez lorsque vous approvisionnez une instance de service Spark Bluemix Apache. Par conséquent, vous ne pouvez pas choisir des paramètres arbitraires (mémoire, exécuteurs, etc.) sur une base de travail par spark-submit. Au lieu de cela, vous obtiendrez le maximum que votre plan dicte. Pour votre erreur particulière, ce que nous voyons est que votre application casse dans RDD.collect(), qui est par définition: "Retour tous les éléments de l'ensemble de données comme un tableau dans le programme du pilote. un filtre ou une autre opération qui renvoie un sous-ensemble suffisamment petit des données. ". La documentation de l'étincelle décrit: «on peut utiliser la méthode collect() pour amener d'abord le RDD sur le nœud du pilote ... Cela peut provoquer un manque de mémoire pour le pilote, car collect() récupère le RDD dans son intégralité. seule machine. (http://spark.apache.org/docs/latest/programming-guide.html). pour surmonter la taille limitée tas dans le pilote, l'application peut utiliser RDD.toLocalIterator() pour retourner un itérateur qui contient tous les éléments de cette RDD. le iterator consommera autant de mémoire que la plus grande partition ce RDD. Ici, les détails http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD.toLocalIterator.

L'autre chose à considérer est de savoir si votre programme est la définition explicite maître au niveau local, ce qui aura des limites des ressources importantes. par exemple. conf = SparkConf().setAppName('myapp').setMaster('local')