Перейти к основному содержимому

Массовая загрузка данных с использованием Spark Load

Этот тип загрузки использует внешние ресурсы Apache Spark™ для предварительной обработки импортируемых данных, что улучшает производительность импорта и экономит вычислительные ресурсы. Он в основном используется для первоначальной миграции и импорта больших объемов данных в Selena (объемы данных до уровня TB).

Spark load является асинхронным методом импорта, который требует от пользователей создания заданий импорта типа Spark через протокол MySQL и просмотра результатов импорта с помощью SHOW LOAD.

ВНИМАНИЕ

  • Только пользователи с привилегией INSERT на таблицу Selena могут загружать данные в эту таблицу. Вы можете следовать инструкциям, предоставленным в GRANT, чтобы предоставить необходимую привилегию.
  • Spark Load нельзя использовать для загрузки данных в таблицу с Primary Key.

Объяснение терминологии

  • Spark ETL: В основном отвечает за ETL данных в процессе импорта, включая построение глобального словаря (тип BITMAP), разбиение на разделы, сортировку, агрегацию и т.д.
  • Broker: Broker — это независимый процесс без состояния. Он инкапсулирует интерфейс файловой системы и предоставляет Selena возможность чтения файлов из удаленных систем хранения.
  • Global Dictionary: Сохраняет структуру данных, которая отображает данные от исходного значения к закодированному значению. Исходное значение может быть любого типа данных, в то время как закодированное значение является целым числом. Глобальный словарь в основном используется в сценариях, где точный подсчет distinct предварительно вычисляется.

Основы

Пользователь отправляет задание импорта типа Spark через клиент MySQL; FE записывает метаданные и возвращает результат отправки.

Выполнение задачи spark load разделено на следующие основные фазы.

  1. Пользователь отправляет задание spark load в FE.
  2. FE планирует отправку задачи ETL в кластер Apache Spark™ для выполнения.
  3. Кластер Apache Spark™ выполняет задачу ETL, которая включает построение глобального словаря (тип BITMAP), разбиение на разделы, сортировку, агрегацию и т.д.
  4. После завершения задачи ETL, FE получает путь к данным каждого предварительно обработанного среза и планирует соответствующий BE для выполнения задачи Push.
  5. BE читает данные через процесс Broker из HDFS и преобразует их в формат хранения Selena.

    Если вы выбираете не использовать процесс Broker, BE читает данные из HDFS напрямую.

  6. FE планирует эффективную версию и завершает задание импорта.

Следующая диаграмма иллюстрирует основной поток spark load.

Spark load


Global Dictionary

Применимые сценарии

В настоящее время столбец BITMAP в Selena реализован с использованием Roaringbitmap, который имеет только целое число в качестве входного типа данных. Поэтому, если вы хотите реализовать предварительное вычисление для столбца BITMAP в процессе импорта, то вам нужно преобразовать входной тип данных в целое число.

В существующем процессе импорта Selena структура данных глобального словаря реализована на основе таблицы Hive, которая сохраняет отображение от исходного значения к закодированному значению.

Процесс построения

  1. Прочитать данные из источника данных upstream и сгенерировать временную таблицу Hive с именем hive-table.
  2. Извлечь значения полей дедупликации из hive-table для генерации новой таблицы Hive с именем distinct-value-table.
  3. Создать новую таблицу глобального словаря с именем dict-table с одним столбцом для исходных значений и одним столбцом для закодированных значений.
  4. Выполнить левое соединение между distinct-value-table и dict-table, а затем использовать оконную функцию для кодирования этого набора. Наконец, как исходное значение, так и закодированное значение дедуплицированного столбца записываются обратно в dict-table.
  5. Соединить dict-table и hive-table для завершения работы по замене исходного значения в hive-table на целочисленное закодированное значение.
  6. hive-table будет прочитана при следующей предварительной обработке данных, а затем импортирована в Selena после вычисления.

Предварительная обработка данных

Основной процесс предварительной обработки данных выглядит следующим образом:

  1. Прочитать данные из источника данных upstream (файл HDFS или таблица Hive).
  2. Завершить отображение полей и вычисление для прочитанных данных, затем сгенерировать bucket-id на основе информации о разделах.
  3. Сгенерировать RollupTree на основе метаданных Rollup таблицы Selena.
  4. Итерировать через RollupTree и выполнять иерархические операции агрегации. Rollup следующей иерархии может быть вычислен из Rollup предыдущей иерархии.
  5. Каждый раз при завершении вычисления агрегации данные группируются по bucket-id, а затем записываются в HDFS.
  6. Последующий процесс Broker будет извлекать файлы из HDFS и импортировать их в узел Selena BE.

Основные операции

Настройка ETL кластеров

Apache Spark™ используется как внешний вычислительный ресурс в Selena для работы ETL. Могут быть добавлены другие внешние ресурсы в Selena, такие как Spark/GPU для запросов, HDFS/S3 для внешнего хранения, MapReduce для ETL и т.д. Поэтому мы вводим Resource Management для управления этими внешними ресурсами, используемыми Selena.

Перед отправкой задания импорта Apache Spark™ настройте кластер Apache Spark™ для выполнения задач ETL. Синтаксис операции следующий:

-- создать ресурс Apache Spark™
CREATE EXTERNAL RESOURCE resource_name
PROPERTIES
(
type = spark,
spark_conf_key = spark_conf_value,
working_dir = path,
broker = broker_name,
broker.property_key = property_value
);

-- удалить ресурс Apache Spark™
DROP RESOURCE resource_name;

-- показать ресурсы
SHOW RESOURCES
SHOW PROC "/resources";

-- привилегии
GRANT USAGE_PRIV ON RESOURCE resource_name TO user_identityGRANT USAGE_PRIV ON RESOURCE resource_name TO ROLE role_name;
REVOKE USAGE_PRIV ON RESOURCE resource_name FROM user_identityREVOKE USAGE_PRIV ON RESOURCE resource_name FROM ROLE role_name;
  • Создание ресурса

Например:

-- режим yarn cluster
CREATE EXTERNAL RESOURCE "spark0"
PROPERTIES
(
"type" = "spark",
"spark.master" = "yarn",
"spark.submit.deployMode" = "cluster",
"spark.jars" = "xxx.jar,yyy.jar",
"spark.files" = "/tmp/aaa,/tmp/bbb",
"spark.executor.memory" = "1g",
"spark.yarn.queue" = "queue0",
"spark.hadoop.yarn.resourcemanager.address" = "127.0.0.1:9999",
"spark.hadoop.fs.defaultFS" = "hdfs://127.0.0.1:10000",
"working_dir" = "hdfs://127.0.0.1:10000/tmp/starrocks",
"broker" = "broker0",
"broker.username" = "user0",
"broker.password" = "password0"
);

-- режим yarn HA cluster
CREATE EXTERNAL RESOURCE "spark1"
PROPERTIES
(
"type" = "spark",
"spark.master" = "yarn",
"spark.submit.deployMode" = "cluster",
"spark.hadoop.yarn.resourcemanager.ha.enabled" = "true",
"spark.hadoop.yarn.resourcemanager.ha.rm-ids" = "rm1,rm2",
"spark.hadoop.yarn.resourcemanager.hostname.rm1" = "host1",
"spark.hadoop.yarn.resourcemanager.hostname.rm2" = "host2",
"spark.hadoop.fs.defaultFS" = "hdfs://127.0.0.1:10000",
"working_dir" = "hdfs://127.0.0.1:10000/tmp/starrocks",
"broker" = "broker1"
);

resource-name — это имя ресурса Apache Spark™, настроенного в Selena.

PROPERTIES включает параметры, относящиеся к ресурсу Apache Spark™, следующие:

Примечание

Для подробного описания PROPERTIES ресурса Apache Spark™, пожалуйста, см. CREATE RESOURCE

  • Параметры, связанные со Spark:

    • type: Тип ресурса, обязательный, в настоящее время поддерживается только spark.
    • spark.master: Обязательный, в настоящее время поддерживается только yarn.
      • spark.submit.deployMode: Режим развертывания программы Apache Spark™, обязательный, в настоящее время поддерживаются как cluster, так и client.
      • spark.hadoop.fs.defaultFS: Обязательный, если master — yarn.
      • Параметры, связанные с менеджером ресурсов yarn, обязательные.
        • один ResourceManager на одном узле spark.hadoop.yarn.resourcemanager.address: Адрес менеджера ресурсов одной точки.
        • ResourceManager HA

          Вы можете выбрать указание hostname или адреса ResourceManager.

          • spark.hadoop.yarn.resourcemanager.ha.enabled: Включить HA менеджера ресурсов, установить в true.
          • spark.hadoop.yarn.resourcemanager.ha.rm-ids: список логических идентификаторов менеджера ресурсов.
          • spark.hadoop.yarn.resourcemanager.hostname.rm-id: Для каждого rm-id укажите hostname, соответствующий менеджеру ресурсов.
          • spark.hadoop.yarn.resourcemanager.address.rm-id: Для каждого rm-id укажите host:port для клиента для отправки заданий.
  • *working_dir: Каталог, используемый ETL. Обязательный, если Apache Spark™ используется как ресурс ETL. Например: hdfs://host:port/tmp/starrocks.

  • Параметры, связанные с Broker:

    • broker: Имя Broker. Обязательный, если Apache Spark™ используется как ресурс ETL. Вам нужно использовать команду ALTER SYSTEM ADD BROKER для завершения настройки заранее.
    • broker.property_key: Информация (например, информация аутентификации), которую нужно указать, когда процесс Broker читает промежуточный файл, сгенерированный ETL.

Предосторожность:

Выше приведено описание параметров для загрузки через процесс Broker. Если вы намереваетесь загружать данные без процесса Broker, следует отметить следующее.

  • Вам не нужно указывать broker.
  • Если вам нужно настроить аутентификацию пользователя и HA для узлов NameNode, вам нужно настроить параметры в файле hdfs-site.xml в кластере HDFS, см. broker_properties для описания параметров. и вам нужно переместить файл hdfs-site.xml под $FE_HOME/conf для каждого FE и $BE_HOME/conf для каждого BE.

Примечание

Если файл HDFS может быть доступен только определенному пользователю, вам все еще нужно указать имя пользователя HDFS в broker.name и пароль пользователя в broker.password.

  • Просмотр ресурсов

Обычные учетные записи могут просматривать только ресурсы, к которым у них есть доступ USAGE-PRIV. Учетные записи root и admin могут просматривать все ресурсы.

  • Разрешения ресурсов

Разрешения ресурсов управляются через GRANT REVOKE, которые в настоящее время поддерживают только разрешения USAGE-PRIV. Вы можете предоставить разрешения USAGE-PRIV пользователю или роли.

-- Предоставить доступ к ресурсам spark0 пользователю user0
GRANT USAGE_PRIV ON RESOURCE "spark0" TO "user0"@"%";

-- Предоставить доступ к ресурсам spark0 роли role0
GRANT USAGE_PRIV ON RESOURCE "spark0" TO ROLE "role0";

-- Предоставить доступ ко всем ресурсам пользователю user0
GRANT USAGE_PRIV ON RESOURCE* TO "user0"@"%";

-- Предоставить доступ ко всем ресурсам роли role0
GRANT USAGE_PRIV ON RESOURCE* TO ROLE "role0";

-- Отозвать привилегии использования ресурсов spark0 у пользователя user0
REVOKE USAGE_PRIV ON RESOURCE "spark0" FROM "user0"@"%";

Настройка клиента Spark

Настройте клиент Spark для FE, чтобы последний мог отправлять задачи Spark, выполняя команду spark-submit. Рекомендуется использовать официальную версию Spark2 2.4.5 или выше адрес загрузки spark. После загрузки, пожалуйста, используйте следующие шаги для завершения настройки.

  • Настройка SPARK-HOME

Поместите клиент Spark в каталог на той же машине, что и FE, и настройте spark_home_default_dir в файле конфигурации FE на этот каталог, который по умолчанию является путем lib/spark2x в корневом каталоге FE и не может быть пустым.

  • Настройка пакета зависимостей SPARK

Для настройки пакета зависимостей заархивируйте все jar-файлы в папке jars под клиентом Spark и настройте элемент spark_resource_path в FE конфигурации на этот zip-файл. Если эта конфигурация пуста, FE попытается найти файл lib/spark2x/jars/spark-2x.zip в корневом каталоге FE. Если FE не удается его найти, будет сообщена ошибка.

Когда задание spark load отправляется, архивированные файлы зависимостей будут загружены в удаленный репозиторий. Путь к репозиторию по умолчанию находится в каталоге working_dir/{cluster_id} с именем --spark-repository--{resource-name}, что означает, что ресурс в кластере соответствует удаленному репозиторию. Структура каталогов ссылается следующим образом:

---spark-repository--spark0/

|---archive-1.0.0/

| |\---lib-990325d2c0d1d5e45bf675e54e44fb16-spark-dpp-1.0.0\-jar-with-dependencies.jar

| |\---lib-7670c29daf535efe3c9b923f778f61fc-spark-2x.zip

|---archive-1.1.0/

| |\---lib-64d5696f99c379af2bee28c1c84271d5-spark-dpp-1.1.0\-jar-with-dependencies.jar

| |\---lib-1bbb74bb6b264a270bc7fca3e964160f-spark-2x.zip

|---archive-1.2.0/

| |-...

В дополнение к зависимостям spark (по умолчанию называемым spark-2x.zip), FE также загружает зависимости DPP в удаленный репозиторий. Если все зависимости, отправленные spark load, уже существуют в удаленном репозитории, то нет необходимости загружать зависимости снова, экономя время на повторной загрузке большого количества файлов каждый раз.

Настройка клиента YARN

Настройте клиент yarn для FE, чтобы FE мог выполнять команды yarn для получения статуса работающего приложения или его завершения. Рекомендуется использовать официальную версию Hadoop2 2.5.2 или выше (адрес загрузки hadoop). После загрузки, пожалуйста, используйте следующие шаги для завершения настройки:

  • Настройка исполняемого пути YARN

Поместите загруженный клиент yarn в каталог на той же машине, что и FE, и настройте элемент yarn_client_path в файле конфигурации FE на двоичный исполняемый файл yarn, который по умолчанию является путем lib/yarn-client/hadoop/bin/yarn в корневом каталоге FE.

  • Настройка пути к файлу конфигурации, необходимому для генерации YARN (опционально)

Когда FE проходит через клиент yarn для получения статуса приложения или для завершения приложения, по умолчанию Selena генерирует файл конфигурации, необходимый для выполнения команды yarn, в пути lib/yarn-config корневого каталога FE. Этот путь можно изменить, настроив запись yarn_config_dir в файле конфигурации FE, который в настоящее время включает core-site.xml и yarn-site.xml.

Создание задания импорта

Синтаксис:

LOAD LABEL load_label
(data_desc, ...)
WITH RESOURCE resource_name
[resource_properties]
[PROPERTIES (key1=value1, ... )]

* load_label:
db_name.label_name

* data_desc:
DATA INFILE ('file_path', ...)
[NEGATIVE]
INTO TABLE tbl_name
[PARTITION (p1, p2)]
[COLUMNS TERMINATED BY separator ]
[(col1, ...)]
[COLUMNS FROM PATH AS (col2, ...)]
[SET (k1=f1(xx), k2=f2(xx))]
[WHERE predicate]

DATA FROM TABLE hive_external_tbl
[NEGATIVE]
INTO TABLE tbl_name
[PARTITION (p1, p2)]
[SET (k1=f1(xx), k2=f2(xx))]
[WHERE predicate]

* resource_properties:
(key2=value2, ...)

Пример 1: Случай, когда источник данных upstream — HDFS

LOAD LABEL db1.label1
(
DATA INFILE("hdfs://abc.com:8888/user/starrocks/test/ml/file1")
INTO TABLE tbl1
COLUMNS TERMINATED BY ","
(tmp_c1,tmp_c2)
SET
(
id=tmp_c2,
name=tmp_c1
),
DATA INFILE("hdfs://abc.com:8888/user/starrocks/test/ml/file2")
INTO TABLE tbl2
COLUMNS TERMINATED BY ","
(col1, col2)
where col1 > 1
)
WITH RESOURCE 'spark0'
(
"spark.executor.memory" = "2g",
"spark.shuffle.compress" = "true"
)
PROPERTIES
(
"timeout" = "3600"
);

Пример 2: Случай, когда источник данных upstream — Hive.

  • Шаг 1: Создать новый ресурс hive
CREATE EXTERNAL RESOURCE hive0
PROPERTIES
(
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:8080"
);
  • Шаг 2: Создать новую внешнюю таблицу hive
CREATE EXTERNAL TABLE hive_t1
(
k1 INT,
K2 SMALLINT,
k3 varchar(50),
uuid varchar(100)
)
ENGINE=hive
PROPERTIES
(
"resource" = "hive0",
"database" = "tmp",
"table" = "t1"
);
  • Шаг 3: Отправить команду load, требуя, чтобы столбцы в импортируемой таблице Selena существовали во внешней таблице hive.
LOAD LABEL db1.label1
(
DATA FROM TABLE hive_t1
INTO TABLE tbl1
SET
(
uuid=bitmap_dict(uuid)
)
)
WITH RESOURCE 'spark0'
(
"spark.executor.memory" = "2g",
"spark.shuffle.compress" = "true"
)
PROPERTIES
(
"timeout" = "3600"
);

Введение в параметры Spark load:

  • Label

Label задания импорта. Каждое задание импорта имеет Label, который уникален в пределах базы данных, следуя тем же правилам, что и broker load.

  • Параметры класса описания данных

В настоящее время поддерживаемые источники данных — CSV и таблица Hive. Другие правила такие же, как у broker load.

  • Параметры задания импорта

Параметры задания импорта относятся к параметрам, принадлежащим разделу opt_properties оператора импорта. Эти параметры применимы ко всему заданию импорта. Правила такие же, как у broker load.

  • Параметры ресурса Spark

Ресурсы Spark должны быть настроены в Selena заранее, и пользователям должны быть предоставлены разрешения USAGE-PRIV, прежде чем они смогут применить ресурсы к Spark load. Параметры ресурса Spark могут быть установлены, когда у пользователя есть временная потребность, например, добавление ресурсов для задания и изменение конфигураций Spark. Настройка действует только для этого задания и не влияет на существующие конфигурации в кластере Selena.

WITH RESOURCE 'spark0'
(
"spark.driver.memory" = "1g",
"spark.executor.memory" = "3g"
)
  • Импорт, когда источник данных — Hive

В настоящее время для использования таблицы Hive в процессе импорта вам нужно создать внешнюю таблицу типа Hive, а затем указать ее имя при отправке команды импорта.

  • Процесс импорта для построения глобального словаря

В команде load вы можете указать необходимые поля для построения глобального словаря в следующем формате: имя поля Selena=bitmap_dict(имя поля таблицы hive) Обратите внимание, что в настоящее время глобальный словарь поддерживается только когда источник данных upstream — таблица Hive.

  • Загрузка данных двоичного типа

Начиная с версии 1.5.0, Spark Load поддерживает функцию bitmap_from_binary, которая может преобразовывать двоичные данные в данные bitmap. Если тип столбца таблицы Hive или файла HDFS — binary, а соответствующий столбец в таблице Selena — агрегатный столбец типа bitmap, вы можете указать поля в команде load в следующем формате: имя поля Selena=bitmap_from_binary(имя поля таблицы Hive). Это устраняет необходимость в построении глобального словаря.

Просмотр заданий импорта

Импорт Spark load является асинхронным, как и broker load. Пользователь должен записать label задания импорта и использовать его в команде SHOW LOAD для просмотра результатов импорта. Команда для просмотра импорта общая для всех методов импорта. Пример следующий.

Обратитесь к Broker Load для подробного объяснения возвращаемых параметров. Различия следующие.

mysql> show load order by createtime desc limit 1\G
*************************** 1. row ***************************
JobId: 76391
Label: label1
State: FINISHED
Progress: ETL:100%; LOAD:100%
Type: SPARK
EtlInfo: unselected.rows=4; dpp.abnorm.ALL=15; dpp.norm.ALL=28133376
TaskInfo: cluster:cluster0; timeout(s):10800; max_filter_ratio:5.0E-5
ErrorMsg: N/A
CreateTime: 2019-07-27 11:46:42
EtlStartTime: 2019-07-27 11:46:44
EtlFinishTime: 2019-07-27 11:49:44
LoadStartTime: 2019-07-27 11:49:44
LoadFinishTime: 2019-07-27 11:50:16
URL: http://1.1.1.1:8089/proxy/application_1586619723848_0035/
JobDetails: {"ScannedRows":28133395,"TaskNumber":1,"FileNumber":1,"FileSize":200000}
  • State

Текущая стадия задания импорта. PENDING: Задание зафиксировано. ETL: Spark ETL зафиксирован. LOADING: FE планирует BE для выполнения операции push. FINISHED: Push завершен и версия эффективна.

Есть две финальные стадии задания импорта — CANCELLED и FINISHED, обе указывающие, что задание load завершено. CANCELLED указывает на неудачу импорта, а FINISHED указывает на успех импорта.

  • Progress

Описание прогресса задания импорта. Есть два типа прогресса — ETL и LOAD, которые соответствуют двум фазам процесса импорта, ETL и LOADING.

  • Диапазон прогресса для LOAD составляет 0~100%.

Прогресс LOAD = количество в настоящее время завершенных tablets всех импортов репликаций / общее количество tablets этого задания импорта * 100%.

  • Если все таблицы были импортированы, прогресс LOAD составляет 99% и изменяется на 100%, когда импорт входит в финальную фазу валидации.

  • Прогресс импорта не линейный. Если нет изменений в прогрессе в течение периода времени, это не означает, что импорт не выполняется.

  • Type

Тип задания импорта. SPARK для spark load.

  • CreateTime/EtlStartTime/EtlFinishTime/LoadStartTime/LoadFinishTime

Эти значения представляют время создания импорта, когда началась фаза ETL, когда завершилась фаза ETL, когда началась фаза LOADING и когда завершилось все задание импорта.

  • JobDetails

Отображает подробный статус выполнения задания, включая количество импортированных файлов, общий размер (в байтах), количество подзадач, количество обрабатываемых исходных строк и т.д. Например:

 {"ScannedRows":139264,"TaskNumber":1,"FileNumber":1,"FileSize":940754064}
  • URL

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

Просмотр логов отправки Apache Spark™ Launcher

Иногда пользователям нужно просматривать подробные логи, сгенерированные во время отправки задания Apache Spark™. По умолчанию логи сохраняются в пути log/spark_launcher_log в корневом каталоге FE с именем spark-launcher-{load-job-id}-{label}.log. Логи сохраняются в этом каталоге в течение периода времени и будут стерты, когда информация об импорте в метаданных FE будет очищена. Время хранения по умолчанию составляет 3 дня.

Отмена импорта

Когда статус задания Spark load не CANCELLED или FINISHED, оно может быть отменено вручную пользователем путем указания Label задания импорта.


Связанные системные конфигурации

Конфигурация FE: Следующая конфигурация является системной конфигурацией Spark load, которая применяется ко всем заданиям импорта Spark load. Значения конфигурации можно настроить в основном путем изменения fe.conf.

  • enable-spark-load: Включить Spark load и создание ресурсов со значением по умолчанию false.
  • spark-load-default-timeout-second: Тайм-аут по умолчанию для задания составляет 259200 секунд (3 дня).
  • spark-home-default-dir: Путь к клиенту Spark (fe/lib/spark2x).
  • spark-resource-path: Путь к упакованному файлу зависимостей Spark (по умолчанию пустой).
  • spark-launcher-log-dir: Каталог, где хранится лог отправки клиента Spark (fe/log/spark-launcher-log).
  • yarn-client-path: Путь к двоичному исполняемому файлу yarn (fe/lib/yarn-client/hadoop/bin/yarn).
  • yarn-config-dir: Путь к файлу конфигурации Yarn (fe/lib/yarn-config).

Лучшие практики

Наиболее подходящий сценарий для использования Spark load — когда исходные данные находятся в файловой системе (HDFS) и объем данных составляет от десятков GB до уровня TB. Используйте Stream Load или Broker Load для меньших объемов данных.

Для полного примера импорта spark load обратитесь к демо на github: https://github.com/StarRocks/demo/blob/master/docs/03_sparkLoad2StarRocks.md

Часто задаваемые вопросы

  • Error: When running with master 'yarn' either HADOOP-CONF-DIR or YARN-CONF-DIR must be set in the environment.

Использование Spark Load без настройки переменной окружения HADOOP-CONF-DIR в spark-env.sh клиента Spark.

  • Error: Cannot run program "xxx/bin/spark-submit": error=2, No such file or directory

Элемент конфигурации spark_home_default_dir не указывает корневой каталог клиента Spark при использовании Spark Load.

  • Error: File xxx/jars/spark-2x.zip does not exist.

Элемент конфигурации spark-resource-path не указывает на упакованный zip-файл при использовании Spark load.

  • Error: yarn client does not exist in path: xxx/yarn-client/hadoop/bin/yarn

Элемент конфигурации yarn-client-path не указывает исполняемый файл yarn при использовании Spark load.

  • ERROR: Cannot execute hadoop-yarn/bin/... /libexec/yarn-config.sh

При использовании Hadoop с CDH вам нужно настроить переменную окружения HADOOP_LIBEXEC_DIR. Поскольку каталоги hadoop-yarn и hadoop различны, каталог libexec по умолчанию будет искать hadoop-yarn/bin/... /libexec, в то время как libexec находится в каталоге hadoop. Команда ```yarn application status`` для получения статуса задачи Spark сообщила об ошибке, вызвавшей сбой задания импорта.