Lors d'une lecture aléatoire, ma tâche Spark échoue et indique "il ne reste plus d'espace sur le périphérique", mais lorsque j'exécute df -h
, il indique qu'il me reste de la place! Pourquoi cela se produit-il et comment puis-je résoudre le problème?
Vous devez également surveiller df -i
, qui indique le nombre d'inodes utilisés.
sur chaque machine, nous créons des fichiers temporaires M * R pour la lecture aléatoire, où M = nombre de tâches de carte, R = nombre de tâches de réduction.
https://spark-project.atlassian.net/browse/SPARK-751
Si vous constatez effectivement que les disques sont à court d’inodes pour résoudre le problème, vous pouvez:
coalesce
avec shuffle = false
).spark.shuffle.consolidateFiles
et de voir https://spark-project.atlassian.net/secure/attachment/10600/Consolidating%20Shuffle%20Files%20in%20Spark.pdf . MODIFIER
La consolidation des fichiers a été supprimée de spark depuis la version 1.6 . https://issues.Apache.org/jira/browse/SPARK-9808
Par défaut, Spark
utilise le répertoire /tmp
pour stocker les données intermédiaires. Si vous avez réellement de la place sur sur un périphérique -, vous pouvez le modifier en créant le fichier SPARK_HOME/conf/spark-defaults.conf
et en ajoutant la ligne. Ici, SPARK_HOME
se trouve où que se trouve votre répertoire racine pour l’installation par étincelle.
spark.local.dir SOME/DIR/WHERE/YOU/HAVE/SPACE
J'ai rencontré un problème similaire. Par défaut, spark utilise "/ tmp" pour enregistrer les fichiers intermédiaires. Lorsque le travail est en cours d'exécution, vous pouvez utiliser l'onglet df -h
pour voir la taille de l'espace utilisé de fs monté dans "/". Lorsque l'espace du dev est épuisé, cette exception est levée. Pour résoudre le problème, j'ai défini le SPARK_LOCAL_DIRS
dans le fichier SPARK_HOME/conf/spark_defaults.conf avec un chemin dans un fs laissant assez d'espace.
Un autre scénario pour cette erreur:
Problème :
Erreur de lancement de travail "Il ne reste plus d’espace sur le périphérique" . Comme vous pouvez le constater, mon travail nécessite de nombreux remaniements. Pour contrer ce problème, j’avais utilisé 20 nœuds au départ, puis une augmentation à 40 nœuds. D'une manière ou d'une autre, le problème se posait toujours. J'ai essayé tout ce que je pouvais faire, comme changer le spark.local.dir
, la repartitionnement, les partitions personnalisées et le réglage des paramètres (compression, spiling, mémoire, fraction de mémoire, etc.). De plus, j'ai utilisé le type d'instance r3.2xlarge qui contient 1 x 160 SSD, mais le problème persiste.
Solution :
Je me suis connecté à l'un des nœuds et j'ai exécuté df -h /
. Le nœud n'a qu'un seul volume EBS monté (8 Go), mais il n'y avait pas de disque SSD (160 Go). Ensuite, j'ai regardé dans ls /dev/
et SSD était attaché. Ce problème ne se produisait pas pour tous les nœuds du cluster. L'erreur "Il ne reste plus d'espace sur le périphérique" ne se produit que pour les nœuds sur lesquels aucun disque SSD n'est monté. Comme ils ne traitent que de 8 Go (EBS), environ 4 Go d’espace étaient disponibles.
J'ai créé un autre script bash qui lance le cluster spark à l'aide du script spark-ec2, puis monte le disque après l'avoir formaté.
ec2-script
pour lancer le clusterMASTER_Host = <ec2-script> get-master $CLUSTER_NAME
ssh -o StrictHostKeyChecking=no root@$MASTER_Host "cd /root/spark/sbin/ && ./slaves.sh mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdb && ./slaves.sh mount -o defaults,noatime,nodiratime /dev/sdb /mnt"
Sur la machine de travail, définissez la variable d'environnement "SPARK_LOCAL_DIRS" à l'emplacement où vous avez de l'espace disponible. La définition de la variable de configuration "spark.local.dir" ne fonctionne pas à partir de Spark 1.0 ou version ultérieure.
Quelques autres solutions de contournement:
Suppression explicite des fichiers de lecture intermittente. Si vous ne voulez pas conserver le rdd pour un calcul ultérieur, vous pouvez appeler .unpersist () Qui marquera les fichiers de mélange aléatoire à supprimer (vous pouvez également redéfinir la variable rdd à Aucun).
Utiliser plus de travailleurs, l’ajout de plus de travailleurs réduira en moyenne le nombre de De fichiers suffisants intermédiaires/travailleurs nécessaires.
Plus d'informations sur l'erreur "Il ne reste plus d'espace sur le périphérique" sur ce fil de stockage de données: https://forums.databricks.com/questions/277/how-do-i-avoid-the-no-space-left -on-device-error.html
Veuillez changer le répertoire SPARK_HOME , car nous devons donner le répertoire qui a plus d’espace disponible pour exécuter notre travail en douceur.