Принос от Prithviraj Bose
Spark’s Устойчиви разпределени набори от данни (програмната абстракция) се оценяват мързеливо и трансформациите се съхраняват като насочени ациклични графики (DAG). Така че всяко действие върху RDD ще накара Spark да преизчисли DAG. По този начин се постига устойчивост в Spark, защото ако някой работен възел се провали, DAG просто трябва да се преизчисли.
То е също задължително за кеширане (продължават с подходящо ниво на съхранение) RDD, така че честите действия върху RDD не принуждават Spark да преизчисли DAG.Темите, разгледани в този блог, по същество се изискват за сертифициране на Apache Spark и Scala. Темите, обхванати в този блог, по същество са необходими за .
Защо да използвам дял?
При клъстерните изчисления основното предизвикателство е да се минимизира мрежовият трафик. Когато данните са ориентирани към ключ-стойност, разделянето става задължително, тъй като за последващите трансформации на RDD има достатъчно разместване на данни в мрежата. Ако подобни ключове или диапазон от ключове се съхраняват в същия дял, тогава разбъркването е сведено до минимум и обработката става значително бърза.
Трансформациите, които изискват разместване на данни между работни възли, имат голяма полза от разделянето. Такива трансформации са cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combByKey и погледни нагоре .
Дяловете могат да се конфигурират, при условие че RDD е базиран на ключ-стойност.Свойства на дяла
- Гарантирано е, че кортежи в един и същ дял са в една и съща машина.
- Всеки възел в клъстер може да съдържа повече от един дял.
- Общият брой на дяловете е конфигурируем, по подразбиране той е зададен на общия брой ядра на всички изпълнителни възли.
Видове разделяне в Spark
Spark поддържа два вида разделяне,
- Разделяне на хеш : Използва Java Object.hashCode метод за определяне на дяла като дял = key.hashCode ()% numPartitions.
- Разделяне на обхвата : Използва диапазон за разпределяне на съответните дялове на ключовете, които попадат в диапазона. Този метод е подходящ, когато има естествено подреждане в ключовете и клавишите са неотрицателни. Долният кодов фрагмент показва използването на разделител на диапазон.
Пример за код
Нека да видим пример за това как да разделяте данни между работни възли. Наличен е пълният код на Scala тук .
Ето някои тестови данни от 12 координати (като кортежи),
Създайте org.apache.spark.HashPartitioner с размер 2, където ключовете ще бъдат разделени на тези два дяла въз основа на хеш кода на ключовете.
След това можем да инспектираме двойките и да правим различни ключови трансформации, като foldByKey и намаляванеByKey.
Обобщавайки, разделянето значително подобрява скоростта на изпълнение за ключови трансформации.
Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас.
Подобни публикации:
как да направя до силата на
Защо трябва да научите Spark след овладяване на Hadoop