Amazon EMR и режим развертывания пряжи - PullRequest
0 голосов
/ 26 января 2020

Я изучаю основы Spark и для тестирования своего приложения Pyspark создал экземпляр EMR со Spark, Yarn, Had oop, Ooz ie на AWS. Я успешно смог выполнить простое приложение pyspark с узла драйвера, используя spark-submit. У меня есть файл /etc/spark/conf/spark-default.conf по умолчанию, созданный AWS, который использует Yarn Resource Manager. Все работает нормально, и я также могу отслеживать URL отслеживания. Но я не в состоянии различить, выполняется ли задание «спарк» в режиме «клиент» или в режиме «кластер». Как мне это определить?

Выдержки из /etc/spark/conf/spark-default.conf

spark.master                     yarn                                                                                                            
spark.driver.extraLibraryPath    /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native                                                       
spark.executor.extraClassPath    :/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/goodies/lib/emr-spark-goodies.jar:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/usr/share/aws/emr/s3select/lib/emr-s3-select-spark-connector.jar    
spark.executor.extraLibraryPath  /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs:///var/log/spark/apps
spark.history.fs.logDirectory    hdfs:///var/log/spark/apps
spark.sql.warehouse.dir          hdfs:///user/spark/warehouse
spark.sql.hive.metastore.sharedPrefixes com.amazonaws.services.dynamodbv2
spark.yarn.historyServer.address ip-xx-xx-xx-xx.ec2.internal:18080 
spark.history.ui.port            18080
spark.shuffle.service.enabled    true 
spark.driver.extraJavaOptions    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70 -XX:+CMSClassUnloadingEnabled -XX:OnOutOfMemoryError='kill -9 %p'
spark.sql.parquet.fs.optimized.committer.optimization-enabled true
spark.sql.emr.internal.extensions com.amazonaws.emr.spark.EmrSparkSessionExtensions                                                              
spark.executor.memory            4743M                                                                                                           
spark.executor.cores             2                                                                                                               
spark.yarn.executor.memoryOverheadFactor 0.1875
spark.driver.memory              2048M

Выдержки из моей работы в pypspark:

import os.path
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf   
from boto3.session import Session 

conf = SparkConf().setAppName('MyFirstPySparkApp')
spark = SparkSession.builder.config(conf=conf).getOrCreate()
sc = spark.sparkContext 
spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", ACCESS_KEY)
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", SECRET_KEY) 
spark._jsc.hadoopConfiguration().set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
....# access S3 bucket
....
....

Существует ли режим развертывания под названием «клиент-пряжа» или это просто «клиент» и «кластер»? Кроме того, почему «num-executors» не указана в файле конфигурации AWS? Это то, что мне нужно добавить?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

По умолчанию приложение spark работает в режиме клиента, т.е. драйвер запускается на узле, с которого вы отправляете приложение. Подробную информацию об этих конфигурациях развертывания можно найти здесь . Легко проверить, что можно было бы завершить запущенный процесс, нажав Ctrl + c на терминале после того, как задание перейдет в состояние RUNNING . Если он работает в режиме client , приложение будет d ie. Если он работает в режиме cluster , он продолжит работу, потому что драйвер работает на одном из рабочих узлов в кластере EMR. Пример команды spark-submit для запуска задания в режиме cluster будет

spark-submit --master yarn \
--py-files my-dependencies.zip \
--num-executors 10 \
--executor-cores 2 \
--executor-memory 5g \
--name sample-pyspark \
--deploy-mode cluster \
package.pyspark.main

По умолчанию количество исполнителей установлено на 1. Вы можете проверить значения по умолчанию для всех конфигураций spark здесь .

0 голосов
/ 02 февраля 2020

Это определяется тем, как вы отправляете опцию при отправке задания, см. Документация .

После доступа к серверу истории искр с консоли EMR или веб-сервера. , вы можете найти параметр spark.submit.deployMode на вкладке Environment. В моем случае это режим клиента.

enter image description here

...