Повышение производительности рабочих нагрузок Apache Spark с помощью кэша операций ввода-вывода Azure HDInsight

Примечание.

  • Кэш операций ввода-вывода поддерживается до Spark 2.3 и не будет поддерживаться в Spark 2.4 (HDInsight 4.0) и Spark 3.1.2 (HDInsight 5.0)

Кэш операций ввода-вывода — это служба кэширования данных для Azure HDInsight, которая повышает производительность заданий Apache Spark. Кэш операций ввода-вывода также работает с рабочими нагрузками Apache TEZ и Apache Hive , которые можно запускать в кластерах Apache Spark . Кэш операций ввода-вывода использует компонент кэширования с открытым исходным кодом с именем RubiX. RubiX — это локальный кэш дисков для использования с подсистемами аналитики больших данных, которые обращаются к данным из облачных систем хранения. RubiX является уникальным среди систем кэширования, так как он использует диски Solid-State (SSD), а не резервную память для кэширования. Служба кэша операций ввода-вывода запускает серверы метаданных RubiX и управляет ими на каждом рабочем узле кластера. Он также настраивает все службы кластера для прозрачного использования кэша RubiX.

Большинство SSD обеспечивают более 1 Гбайт в секунду пропускной способности. Эта пропускная способность, дополненная кэшом файлов операционной системы в памяти, обеспечивает достаточную пропускную способность для загрузки обработчиков обработки больших данных, таких как Apache Spark. Оперативная память остается доступной для Apache Spark для обработки задач, в высокой степени зависящих от памяти, таких как операции перестановки. Использование эксклюзивной операционной памяти позволяет Apache Spark достичь оптимального использования ресурсов.

Примечание.

Кэш операций ввода-вывода в настоящее время использует RubiX в качестве компонента кэширования, но это может измениться в будущих версиях службы. Используйте интерфейсы кэша ввода-вывода и не полагайтесь напрямую на реализацию RubiX. Кэш операций ввода-вывода поддерживается только в хранилище BLOB-объектов Azure в настоящее время.

Преимущества кэша операций ввода-вывода Azure HDInsight

Использование кэша операций ввода-вывода обеспечивает увеличение производительности заданий, считывающих данные из хранилища BLOB-объектов Azure.

Вам не нужно вносить изменения в задания Spark, чтобы увидеть увеличение производительности при использовании кэша операций ввода-вывода. Если кэш операций ввода-вывода отключен, этот Spark-код будет удаленно считывать данные из хранилища объектов BLOB Azure: spark.read.load('wasbs:///myfolder/data.parquet').count(). При активации кэша операций ввода-вывода та же строка кода вызывает чтение из кэша операций ввода-вывода. На следующих считываниях данные считываются локально из SSD. Рабочие узлы в кластере HDInsight оснащены локально подключенными выделенными дисками SSD. Кэш операций ввода-вывода в HDInsight использует эти локальные диски SSD для кэширования, что обеспечивает наименьший уровень задержки и максимальную пропускную способность.

Начало работы

Кэш операций ввода-вывода Azure HDInsight отключен по умолчанию в предварительной версии. Кэш операций ввода-вывода доступен в кластерах Azure HDInsight 3.6 и Spark, которые запускают Apache Spark 2.3. Чтобы активировать кэш операций ввода-вывода в HDInsight 4.0, сделайте следующее:

  1. В веб-браузере перейдите на страницу https://CLUSTERNAME.azurehdinsight.net, где CLUSTERNAME — это имя вашего кластера.

  2. Выберите службу кэша операций ввода-вывода слева.

  3. Выберите действия (действия службы в HDI 3.6) и активируйте.

    Включение службы IO-кэша в Ambari.

  4. Подтвердите перезапуск всех затронутых служб в кластере.

Примечание.

Несмотря на то, что полоса прогресса показывает активацию, кэш ввода-вывода фактически не включен, пока не перезапустите эти другие затронутые службы.

Устранение неполадок

После включения кэша ввода-вывода при выполнении заданий Spark могут возникнуть ошибки, связанные с нехваткой места на диске. Эти ошибки возникают, так как Spark также использует локальное хранилище дисков для хранения данных во время операций перетасовки. После включения кэша операций ввода-вывода, место на SSD у Spark может закончиться из-за уменьшения пространства для хранения Spark. Объем пространства, используемого кэшем операций ввода-вывода, по умолчанию составляет половину общего пространства SSD. Использование дискового пространства для кэша операций ввода-вывода настраивается в Ambari. Если возникают ошибки места на диске, уменьшите объем дискового пространства, используемого для кэша операций ввода-вывода, и перезапустите службу. Чтобы изменить объем памяти для кэша ввода-вывода, выполните следующие действия.

  1. В Apache Ambari выберите службу HDFS слева.

  2. Выберите вкладки "Конфигурации " и "Дополнительно ".

    Изменение расширенной конфигурации HDFS.

  3. Прокрутите вниз и разверните область пользовательского основного сайта .

  4. Найдите свойство hadoop.cache.data.fullness.percentage.

  5. Измените значение в поле.

    Редактировать процент заполнения кэша ввода-вывода.

  6. Нажмите кнопку "Сохранить " в правом верхнем углу.

  7. Выберите Перезапустить>Перезапустить все затронутые элементы.

    Apache Ambari перезапускает все затронутые.

  8. Нажмите кнопку "Подтвердить перезагрузку всех".

Если это не работает, отключите кэш операций ввода-вывода.

Дальнейшие шаги

Дополнительные сведения о кэше операций ввода-вывода, включая показатели производительности, в этой записи блога: задания Apache Spark получают ускорение до 9 раз с помощью кэша ввода-вывода HDInsight