17. Spark. Установка и настройка

В этой части описывается настройка Spark.

Использованные материалы

  1. Manually Configuring TLS/SSL Encryption for CDH Services
  2. Spark Encryption

1. Добавление сервиса Spark

  1. В консоли Cloudera Manager в меню выбираем ‘Add Service’:
  2. Выбираем Spark.
  3. Select Dependencies.
  4. Assign Roles.
    Распределяем роли. History Server размещаем на одном из дополнительных aux узлов, а шлюзы на dn-узлах и других по необходимости:
  5. Сразу включаем TLS для роли.
PropertyValueDescription
Enable TLS/SSL for History Server
spark.ssl.historyServer.enabled
Encrypt communication between clients and History Server using Transport Layer Security (TLS) (formerly known as Secure Socket Layer (SSL)).
History Server TLS/SSL Server JKS Keystore File Location
spark.ssl.historyServer.keyStore
/opt/cloudera/security/pki/server.jks The path to the TLS/SSL keystore file containing the server certificate and private key used for TLS/SSL. Used when History Server is acting as a TLS/SSL server. The keystore must be in JKS format.
History Server TLS/SSL Server JKS Keystore File Password
По умолчанию: changeit. The password for the History Server JKS keystore file.
  1. Наблюдаем добавление Spark’а.
  2. Заключительный шаг мастера:
  3. Перезапускаем все зависимые сервисы по приглашению Cloudera Manager Console.

2. Перенастройка размещения log’ов

  1. В настройках Spark, используя фильтр ‘/var/’, изменяем только следующие параметры, добавляя имя каталога ‘/data’ вместо ‘/var’:
PropertyValueDescription
GATEWAY Lineage Log Directory
/data/log/spark/lineage The directory in which GATEWAY lineage log files are written. If changed from the default, Cloudera Manager will not be able to provide lineage information without restarting the Cloudera Manager Agent(s).
History Server Log Directory
log_dir
/data/log/spark The log directory for log files of the role History Server.
  1. Нажимаем Save Changes.

3. Включение Spark Encryption

  1. В настройках службы Spark изменяем следующие параметры:
PropertyValueDescription
Spark Authentication
spark.authenticate
Spark (Service-Wide) Enable whether the Spark communication protocols do authentication using a shared secret.
Enable Network Encryption
spark.network.crypto.enabled
Spark (Service-Wide) Whether to encrypt communication between Spark processes belonging to the same application. Requires authentication (spark.authenticate) to be enabled.
Enable I/O Encryption
spark.io.encryption.enabled
Spark (Service-Wide) Whether to encrypt temporary shuffle and cache files stored by Spark on the local disks.
  1. Нажимаем Save Changes.

Включение аутентификации в Spark

  1. В настройках службы Spark изменяем следующие параметры:
PropertyValueDescription
Enable User Authentication
history_server_spnego_enabled
Enables user authentication using SPNEGO (requires Kerberos), and enables access control to application history data.
Admin Users
spark.history.ui.admin.acls
eugene,user_da Comma-separated list of users who can view all applications when authentication is enabled.
  1. Нажимаем Save Changes.

Установка зависимостей

Этот шаг был ещё на этапе добавления сервиса в кластер, так что можно проигнорировать.

  1. В настройках службы Spark изменяем следующие параметры:
PropertyValueDescription
HBase Service
◉ HBase Name of the HBase service that this Spark service instance depends on
  1. Нажимаем Save Changes.
  2. Перезапускаем все зависимые сервисы по приглашению Cloudera Manager Console.

Выполнение тестовой задачи

На машине с ролью ‘Spark Gateway’ находим местоположение тестового jar-файла и выполняем его:

$ find /usr -name spark-examples*
  /usr/lib/spark/examples/jars/spark-examples_2.11-2.4.0-cdh6.3.2.jar

$ spark-submit --class org.apache.spark.examples.SparkPi  \
  --master yarn \
  --num-executors 1 \
  --driver-memory 512m \
  --executor-memory 512m  \
  --executor-cores 1 \
  /usr/lib/spark/examples/jars/spark-examples_2.11-2.4.0-cdh6.3.2.jar

Получаем результат:

22/04/07 17:45:33 INFO scheduler.DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 1.461295 s
Pi is roughly 3.146675733378667

Проверяем её отображение в Spark History, Yarn History, …

Встреченные проблемы

На странице Spark History Server не отображается история задач

Симптомы

  1. На странице Spark History Server не видно история задач:
  2. В логе Spark History Server видны записи:
    FsHistoryProvider
    Unable to read log hdfs://test1/user/spark/applicationHistory/application_1627632320956_0001
    org.apache.hadoop.security.AccessControlException: Permission denied: user=spark, access=READ, inode="/user/spark/applicationHistory/application_1627632320956_0001":eugene:spark:-rwxrwx---
    ...
    Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=spark, access=READ, inode="/user/spark/applicationHistory/application_1627632320956_0001":eugene:spark:-rwxrwx---
    

Сбор данных

  1. Проверяем права на каталоги:

    drwxr-xr-x   - hdfs supergroup      0     2021-07-21 16:37 /
    drwxr-xr-x   - hdfs supergroup      0     2021-07-12 16:09 /user
    drwxr-x--x   - spark spark          0     2021-07-02 16:22 /user/spark
    drwxrwxrwt   - spark spark          0     2021-07-30 11:15 /user/spark/applicationHistory
    -rwxrwx---   3 eugene spark     45499     2021-07-30 11:15 /user/spark/applicationHistory/application_1627632320956_0001
    
  2. Исходные файлы истории создаются в /tmp/logs/eugene/logs. После чего копируются в /user/spark/applicationHistory:

    $ hdfs dfs -ls /tmp/logs/eugene/logs
    drwxrwx---   - eugene hadoop          0 2021-07-30 11:15 /tmp/logs/eugene/logs/application_1627632320956_0001
    

Лечение