Я не могу настроить YARN и Spark для использования всех ресурсов моего кластера Datapro c Spark на GCP.
Я использую 1 master (4 ядра) и 2 рабочих (16 ядер) ), и я хочу, чтобы мое приложение Spark использовало 30 ядер из 32 ядер, доступных на рабочих экземплярах. Но когда я смотрю на YARN UI, он говорит, что используются только 5 ядер. Когда я смотрю на интерфейс Spark Executors, он говорит, что используются 20 ядер. Когда я смотрю на активность процессора на рабочих, там почти нет активности.
Я совершенно сбит с толку. Пожалуйста, помогите.
Команда для создания кластера Datapro c:
gcloud dataproc clusters create default-cluster \
--region europe-west1 --subnet default --zone europe-west1-d \
--master-machine-type n1-standard-4 --master-boot-disk-size 500 \
--num-workers 2 --worker-machine-type n1-standard-16 --worker-boot-disk-size 500 \
--image-version 1.4-debian9 \
--project product-normalyzr
Команда для отправки задания:
gcloud dataproc jobs submit spark --cluster=default-cluster \
--region=europe-west1 \
--properties=spark.executor.instances=6,spark.executor.cores=5,spark.executor.memory=14g \
--jars=dist/yzr-core-scala_2.11-0.1.jar,dist/deps/gson-2.8.6.jar,dist/deps/picocli-4.2.0.jar \
--class=solutions.yzr.pnormalyzr.similarity.Main
Способ создания контекст Spark:
def buildSession(appName: String): SparkSession = {
SparkSession
.builder()
.appName(appName)
.getOrCreate()
}
На случай, если проблема может быть связана с spark logi c (возможно, с разделением или чем-то другим), я также предоставляю основную часть кода приложения spark. Я сомневаюсь, что это может быть причиной, потому что, когда я запускаю это локально на моей машине, я вижу, что загрузка ЦП полностью взрывается, и это то, что я ожидаю увидеть на рабочих узлах.
println("Load features")
val features = session.sparkContext.textFile(inputPath)
.map((rawText: String) => {
new Gson().fromJson(rawText, classOf[DocFeatures])
})
features.take(5).foreach(println)
println("Compute Scores")
val scores = features.cartesian(features)
// compute similarity
.map((d: (DocFeatures, DocFeatures)) => {
val docA = d._1
val docB = d._2
val (score, explain) = SimilarityMetric.score(docA, docB)
SimilarityScore(
pA = docA.slug,
pB = docB.slug,
score = score,
explain = explain)
})
// filter items with no similarity
.filter(s => s.score > 0)
scores.take(5).foreach(println)
println("Export")
// store to disk
val scoreStrings = scores.map(d => {
new Gson().toJson(d)
})
scoreStrings.take(5).foreach(println)
scoreStrings.saveAsTextFile(outputPath)
session.close()
println("End")
На Пользовательский интерфейс Yarn говорит только о том, что выделено 5 виртуальных ядер, тогда как я хотел выделить 6 экземпляров по 5 ядер в каждом, всего 30 ядер.
![YARN UI](https://i.stack.imgur.com/CgtaK.png)
В интерфейсе Spark Job говорится, что были добавлены только 4 исполнителя, тогда как я хотел 6 экземпляров исполнителя.
![Spark UI](https://i.stack.imgur.com/VSF3I.png)
В интерфейсе Spark Executors говорится, что Каждому из 4 исполнителей выделено по 5 ядер, что соответствует моим настройкам, но когда я смотрю на загрузку ЦП на рабочих, там абсолютно нет активности.
![Spark Executors UI](https://i.stack.imgur.com/8qBLi.png)
Htop не показывает активность процессора на рабочих узлах.
![Htop Workers](https://i.stack.imgur.com/3HDa8.jpg)
Мне кажется, что я путаю все разные переменные YARN и Spark. Любая помощь будет по достоинству оценена.