Salut, j'utilise Spark SQL en fait hiveContext.sql()
qui utilise le regroupement par requêtes et je rencontre des problèmes de OOM
. Donc, penser à augmenter la valeur de spark.sql.shuffle.partitions
De 200 par défaut à 1000, mais cela n'aide pas. Veuillez me corriger si je me trompe, ces partitions partageront la charge de mélange de données, donc plus les partitions moins de données à conserver. Veuillez guider Je suis nouveau sur Spark. J'utilise Spark 1.4.0 et j'ai environ 1 To de données non compressées à traiter à l'aide de hiveContext.sql()
group by queries.
Si vous manquez de mémoire sur le shuffle, essayez de définir spark.sql.shuffle.partitions
à 2001.
private[spark] object MapStatus {
def apply(loc: BlockManagerId, uncompressedSizes: Array[Long]): MapStatus = {
if (uncompressedSizes.length > 2000) {
HighlyCompressedMapStatus(loc, uncompressedSizes)
} else {
new CompressedMapStatus(loc, uncompressedSizes)
}
}
...
Je souhaite vraiment qu'ils vous laissent configurer cela indépendamment.
Au fait, j'ai trouvé cette information dans un jeu de diapositives Cloudera .
OK, donc je pense que votre problème est plus général. Ce n'est pas spécifique à Spark SQL, c'est un problème général avec Spark où il ignore le nombre de partitions que vous lui dites lorsque les fichiers sont peu nombreux. Spark semble avoir le même nombre de partitions que le nombre de fichiers sur HDFS, sauf si vous appelez repartition
. Donc, appeler repartition
devrait fonctionner, mais a la mise en garde de provoquant un brassage un peu inutilement.
J'ai soulevé cette question il y a un moment et je n'ai toujours pas obtenu de bonne réponse :(
Spark: augmenter le nombre de partitions sans provoquer de mélange?
Cela dépend en fait de vos données et de votre requête, si Spark doit charger 1 To, il y a quelque chose de mal dans votre conception.
Utilisez la superbe interface Web pour voir le DAG, voyez comment Spark traduit votre requête SQL en travaux/étapes et tâches).
Les métriques utiles sont "Input" et "Shuffle".
CLUSTER BY
fonctionnalité, pour travailler par partition de donnéesEn outre, OOM pourrait se produire sur votre pilote?
-> c'est un autre problème, le pilote collectera à la fin les données que vous souhaitez. Si vous demandez trop de données, le pilote sera MOO, essayez de limiter votre requête ou écrivez une autre table (syntaxe Spark CREATE TABLE ...AS
).
Je suis tombé sur ce post de Cloudera sur le partitionnement de la ruche. Consultez la section "Pointeurs" qui parle du nombre de partitions et du nombre de fichiers dans chaque partition entraînant une surcharge du nœud de nom, ce qui pourrait provoquer un MOO.