Отправка приложения Spark через AWS [EMR]

Здравствуйте, я новичок в облачных вычислениях, поэтому прошу прощения за (возможно) глупый вопрос. Мне нужна помощь, чтобы узнать, действительно ли то, что я делаю, выполняется на кластере или только на мастере (бесполезная вещь).

ЧТО Я МОГУ СДЕЛАТЬ: Ну, я могу настроить кластер из определенного количества узлов с установленным Spark на всех из них с помощью консоли AWS. Я могу подключиться к главному узлу через SSH. Что нужно, чтобы запустить мою банку с кодом Spark на кластере.

ЧТО Я СДЕЛАЛ: я бы вызвал spark-submit для запуска моего кода:

spark-submit --class cc.Main /home/ubuntu/MySparkCode.jar 3 [arguments] 

МОИ СОМНЕНИЯ:

  1. Нужно ли указывать мастер с --master и ссылкой «spark://» мастера? Где я мог найти эту ссылку? Должен ли я запускать сценарий в sbin/start-master.sh, чтобы запустить автономный менеджер кластера, или он уже установлен? Если я запущу приведенный выше код, я думаю, что этот код будет выполняться только локально на мастере, верно?

  2. Могу ли я хранить входные файлы только на главном узле? Предположим, я хочу посчитать слова огромного текстового файла, могу ли я хранить его только на диске мастера? Или для поддержания параллелизма мне нужна распределенная память типа HDFS? Я этого не понимаю, я бы сохранил его на диске главного узла, если он подходит.

Так что спасибо за ответ.

ОБНОВЛЕНИЕ 1: я попытался запустить пример Pi в кластере и не могу получить результат.

$ sudo spark-submit   --class org.apache.spark.examples.SparkPi   --master yarn   --deploy-mode cluster   /usr/lib/spark/examples/jars/spark-examples.jar   10

Я бы ожидал получить строку с напечатанным Pi is roughly 3.14... вместо этого я получаю:

17/04/15 13:16:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/04/15 13:16:03 INFO RMProxy: Connecting to ResourceManager at ip-172-31-37-222.us-west-2.compute.internal/172.31.37.222:8032
17/04/15 13:16:03 INFO Client: Requesting a new application from cluster with 2 NodeManagers 
17/04/15 13:16:03 INFO Client: Verifying our application has not requested more than the maximum memory capability of the cluster (5120 MB per container)
17/04/15 13:16:03 INFO Client: Will allocate AM container, with 5120 MB memory including 465 MB overhead
17/04/15 13:16:03 INFO Client: Setting up container launch context for our AM
17/04/15 13:16:03 INFO Client: Setting up the launch environment for our AM container
17/04/15 13:16:03 INFO Client: Preparing resources for our AM container
17/04/15 13:16:06 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
17/04/15 13:16:10 INFO Client: Uploading resource file:/mnt/tmp/spark-aa757ca0-4ff7-460c-8bee-27bc8c8dada9/__spark_libs__5838015067814081789.zip -> hdfs://ip-172-31-37-222.us-west-2.compute.internal:8020/user/root/.sparkStaging/application_1492261407069_0007/__spark_libs__5838015067814081789.zip
17/04/15 13:16:12 INFO Client: Uploading resource file:/usr/lib/spark/examples/jars/spark-examples.jar -> hdfs://ip-172-31-37-222.us-west-2.compute.internal:8020/user/root/.sparkStaging/application_1492261407069_0007/spark-examples.jar
17/04/15 13:16:12 INFO Client: Uploading resource file:/mnt/tmp/spark-aa757ca0-4ff7-460c-8bee-27bc8c8dada9/__spark_conf__1370316719712336297.zip -> hdfs://ip-172-31-37-222.us-west-2.compute.internal:8020/user/root/.sparkStaging/application_1492261407069_0007/__spark_conf__.zip
17/04/15 13:16:13 INFO SecurityManager: Changing view acls to: root
17/04/15 13:16:13 INFO SecurityManager: Changing modify acls to: root
17/04/15 13:16:13 INFO SecurityManager: Changing view acls groups to: 
17/04/15 13:16:13 INFO SecurityManager: Changing modify acls groups to: 
17/04/15 13:16:13 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users  with view permissions: Set(root); groups with view permissions: Set(); users  with modify permissions: Set(root); groups with modify permissions: Set()

17/04/15 13:16:13 INFO Client: Submitting application application_1492261407069_0007 to ResourceManager
17/04/15 13:16:13 INFO YarnClientImpl: Submitted application application_1492261407069_0007
17/04/15 13:16:14 INFO Client: Application report for application_1492261407069_0007 (state: ACCEPTED)
17/04/15 13:16:14 INFO Client: 
     client token: N/A
     diagnostics: N/A
     ApplicationMaster host: N/A
     ApplicationMaster RPC port: -1
     queue: default
     start time: 1492262173096
     final status: UNDEFINED
     tracking URL: http://ip-172-31-37-222.us-west-2.compute.internal:20888/proxy/application_1492261407069_0007/
     user: root
17/04/15 13:16:15 INFO Client: Application report for application_1492261407069_0007 (state: ACCEPTED)
17/04/15 13:16:24 INFO Client: Application report for application_1492261407069_0007 (state: ACCEPTED)
17/04/15 13:16:25 INFO Client: Application report for application_1492261407069_0007 (state: RUNNING)
17/04/15 13:16:25 INFO Client: 
     client token: N/A
     diagnostics: N/A
     ApplicationMaster host: 172.31.33.215
     ApplicationMaster RPC port: 0
     queue: default
     start time: 1492262173096
     final status: UNDEFINED
     tracking URL: http://ip-172-31-37-222.us-west-2.compute.internal:20888/proxy/application_1492261407069_0007/
     user: root
17/04/15 13:16:26 INFO Client: Application report for application_1492261407069_0007 (state: RUNNING)
17/04/15 13:16:55 INFO Client: Application report for application_1492261407069_0007 (state: RUNNING)
17/04/15 13:16:56 INFO Client: Application report for application_1492261407069_0007 (state: FINISHED)
17/04/15 13:16:56 INFO Client: 
     client token: N/A
     diagnostics: N/A
     ApplicationMaster host: 172.31.33.215
     ApplicationMaster RPC port: 0
     queue: default
     start time: 1492262173096
     final status: SUCCEEDED
     tracking URL: http://ip-172-31-37-222.us-west-2.compute.internal:20888/proxy/application_1492261407069_0007/
     user: root
17/04/15 13:16:56 INFO ShutdownHookManager: Shutdown hook called
17/04/15 13:16:56 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-aa757ca0-4ff7-460c-8bee-27bc8c8dada9

person Matt    schedule 15.04.2017    source источник
comment
Вы можете просто попробовать это ниже. sudo spark-submit --class org.apache.spark.examples.SparkPi --master yarn /usr/lib/spark/examples/jars/spark-examples.jar 10   -  person Aravind Kumar Anugula    schedule 15.04.2017
comment
@ArvindKumarAnugula спасибо, это работает, мы уверены, что это все еще будет работать в кластере, несмотря на то, что мы не используем --deploy-mode?   -  person Matt    schedule 15.04.2017
comment
@ArvindKumarAnugula работает, но работает в клиентском режиме :(   -  person Matt    schedule 15.04.2017
comment
да, он работает в режиме клиента. но клиентский режим не означает, что задачи выполняются на одном узле. вы можете увидеть информацию в журналах, которая показывает идентификатор задач и завершение на конкретном узле. вы можете заметить, что разные задачи выполняются на разных узлах. Но я согласен, что задание должно выполняться и в кластерном режиме. Я проверяю это, сообщу вам, как только у меня будет прогресс в этом.   -  person Aravind Kumar Anugula    schedule 15.04.2017
comment
@ArvindKumarAnugula Спасибо, чувак, я очень запутался, я тоже пытаюсь понять это. Я отмечу ваш ответ как решение в конце.   -  person Matt    schedule 15.04.2017
comment
обновленный ответ, проверьте это. кластерный режим также работает нормально, но с той лишь разницей, что вы не видите вывод на самой машине. если вы работаете в кластерном режиме, вы можете использовать следующую команду, чтобы проверить свои результаты для программы pi. yarn logs -applicationId applicationid | grep 3.14358   -  person Aravind Kumar Anugula    schedule 15.04.2017
comment
Давайте продолжим это обсуждение в чате.   -  person Aravind Kumar Anugula    schedule 15.04.2017


Ответы (2)


Ответ на 1-е сомнение:

Я предполагаю, что вы хотите запустить искру на пряже. Вы можете просто передать --master yarn --deploy-mode cluster, драйвер Spark запускается внутри главного процесса приложения, которым управляет YARN в кластере.

spark-submit --master yarn  --deploy-mode cluster \
    --class cc.Main /home/ubuntu/MySparkCode.jar 3 [arguments] 

Справочник по другим режимам

когда вы запускаете задание в кластере --deploy-mode, вы не видите вывод (если вы что-то печатаете) на машине, на которой вы запускаете.

Причина: вы выполняете задание в режиме кластера, поэтому мастер будет работать на одном из узлов в кластере, а выходные данные будут выдаваться на той же машине.

Чтобы проверить вывод, вы можете увидеть его в журнале приложений, используя следующую команду.

yarn logs -applicationId application_id

Ответ на второе сомнение:

Вы можете хранить свои входные файлы где угодно (мастер-узел/HDFS).

параллелизм полностью зависит от количества разделов RDD/DataFrame, созданных при загрузке данных. количество разделов зависит от размера данных, хотя вы можете управлять, передавая параметры при загрузке данных.

если вы загружаете данные из мастера:

 val rdd =   sc.textFile("/home/ubumtu/input.txt",[number of partitions])

rdd будет создано с количеством пройденных вами разделов. если вы не передадите ряд разделов, он будет считать spark.default.parallelism настроенным в spark conf.

если вы загружаете данные из HDFS:

 val rdd =  sc.textFile("hdfs://namenode:8020/data/input.txt")

rdd будет создан с количеством разделов, равным числу блоков внутри HDFS.

Надеюсь, мои ответы помогут вам.

person Aravind Kumar Anugula    schedule 15.04.2017
comment
Благодарю вас! Я пытался, и, похоже, это работает, но если я запускаю пример Pi в искре, кажется, что он не показывает значение. Посмотрите ОБНОВЛЕНИЕ. Я не могу понять, почему, вроде бы все идет хорошо... - person Matt; 15.04.2017

Вы можете использовать это:

spark-submit --deploy-mode client --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar
person D10s    schedule 18.02.2020