Плагин Gazelle — 1.1.0

Собственный движок для Spark SQL с векторизованной оптимизацией SIMD

Введение

Spark SQL очень хорошо работает со структурированными строковыми данными. Он использовал WholeStageCodeGen для повышения производительности кода Java JIT. Однако Java JIT обычно не очень хорошо работает с использованием последних SIMD-инструкций, особенно при сложных запросах. Apache Arrow обеспечивает дружественную к ЦП колоночную компоновку в памяти, его ядра, оптимизированные для SIMD, и SQL-движок Gandiva на основе LLVM также очень эффективны. Native SQL Engine использовал эти технологии и повысил производительность Spark SQL.

Основные характеристики

Apache Arrow отформатировал промежуточные данные среди операторов Spark

С помощью Spark 27396 можно передавать RDD Columnarbatch операторам. Мы реализовали этот API в столбцовом формате Arrow.

Нативные считыватели для паркета и других форматов на базе Apache Arrow

Собственный считыватель паркета был разработан для ускорения загрузки данных. он основан на наборе данных Apache Arrow. Для получения дополнительной информации см. Источник данных Arrow 9.0003

Операторы на базе Apache Arrow Compute/Gandiva

Мы внедрили общие операторы на основе Apache Arrow Compute и Gandiva. Выражение SQL было скомпилировано в одно дерево выражений с protobuf и передано в собственные ядра. Затем собственные ядра будут оценивать эти выражения на основе входного столбцового пакета.

Собственный оператор случайного воспроизведения столбцов с эффективной поддержкой сжатия

Мы внедрили перемешивание столбцов для повышения производительности перемешивания. С колоночной компоновкой мы можем сделать очень эффективное сжатие данных для различных форматов данных.

Подробности поддержки оператора см. здесь

Сборка подключаемого модуля

Сборка с помощью Conda

Если у вас уже есть работающий кластер Hadoop Spark, мы предоставляем пакет Conda, который автоматически установит зависимости, необходимые для OAP, вы можете обратиться к OAP -Установка-Руководство для получения дополнительной информации. После завершения OAP-Installation-Guide вы можете найти встроенный spark-columnar-core-<версия>-jar-with-dependencies.jar под $HOME/miniconda2/envs/oapenv/oap_jars .
Затем вы можете просто пропустить следующие шаги и перейти к началу работы.

Самостоятельная сборка

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

Необходимое условие

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

Установка

См. документ Руководство по установке

Настройка и тестирование

См. документ Руководство по настройке -jar-with-dependencies.jar следует добавить в конфигурацию Spark. Мы также рекомендуем использовать spark-arrow-datasource-standard--jar-with-dependencies. jar . Мы продемонстрируем пример, используя оба файла jar.
Варианты, связанные со SPARK:

  • spark.driver.extraClassPath : Установите для загрузки файла jar в драйвер.
  • spark.executor.extraClassPath : Установите для загрузки файла jar в исполнителя.
  • jars : Установите для копирования файла jar в исполнители при использовании режима кластера пряжи.
  • spark.executorEnv.ARROW_LIBHDFS3_DIR : Необязательно, если вы используете пользовательский libhdfs3.so.
  • spark.executorEnv.LD_LIBRARY_PATH : Необязательно, если вы используете пользовательский файл libhdfs3.so.

Для автономного режима Spark задайте вышеуказанное значение как относительный путь к файлу jar.
Для режима кластера Spark Yarn укажите указанное выше значение как абсолютный путь к файлу jar.

Пример запуска Spark Shell с jar-файлом ArrowDataSource

 ${SPARK_HOME}/bin/spark-shell \
        --подробный \
        --основная пряжа \
        --драйвер-память 10G \
        --conf spark. driver.extraClassPath=$PATH_TO_JAR/spark-arrow-datasource-standard-<версия>-jar-with-dependencies.jar:$PATH_TO_JAR/spark-columnar-core-<версия>-jar-with-dependencies .банка \
        --conf spark.executor.extraClassPath=$PATH_TO_JAR/spark-arrow-datasource-standard-<версия>-jar-with-dependencies.jar:$PATH_TO_JAR/spark-columnar-core-<версия>-jar-with-dependencies .банка \
        --conf spark.driver.cores=1 \
        --conf spark.executor.instances=12 \
        --conf spark.executor.cores=6 \
        --conf spark.executor.memory=20G \
        --conf spark.memory.offHeap.size=80G \
        --conf spark.task.cpus=1 \
        --conf spark.locality.wait=0s \
        --conf spark.sql.shuffle.partitions=72 \
        --conf spark.executorEnv.ARROW_LIBHDFS3_DIR="$PATH_TO_LIBHDFS3_DIR/" \
        --conf spark.executorEnv.LD_LIBRARY_PATH="$PATH_TO_LIBHDFS3_DEPENDENCIES_DIR"
        --jars $PATH_TO_JAR/spark-arrow-datasource-standard-<версия>-jar-with-dependencies.jar,$PATH_TO_JAR/spark-columnar-core-<версия>-jar-with-dependencies. jar
 

Вот один пример, чтобы проверить, работает ли собственный движок sql. Убедитесь, что у вас есть набор данных TPC-H. Мы могли бы сделать простую проекцию на один паркетный стол. Подробные сценарии тестирования см. в Руководстве по решению.

 val orders = spark.read.format("стрелка").load("hdfs:////user/root/date_tpch_10/orders")
заказы.createOrReplaceTempView("заказы")
spark.sql("выберите * из заказов, где o_orderdate > date '1998-07-26'").show(20000, false)
 

Результат должен отображаться в консоли Spark, и вы можете проверить диаграмму DAG на каком-либо этапе обработки столбцов. В собственном механизме SQL по-прежнему отсутствуют некоторые функции, ознакомьтесь с ограничениями.

Данные о производительности

Для расширенного тестирования производительности на приведенных ниже диаграммах показаны результаты с использованием двух тестов: 1. Тест поддержки принятия решений1 и 2. Тест поддержки принятия решений2.
Во всех тестовых средах для Decision Support Benchmark 1 и 2 используется 1 мастер + 3 рабочих и процессор Intel(r) Xeon(r) Gold 6252|384 ГБ памяти|NVMe SSD x3 на один узел с набором данных 1,5 ТБ.
* Эталонный тест поддержки принятия решений1 — это набор запросов, модифицированный по сравнению с эталонным тестом TPC-H. Мы меняем Decimal на Double, так как Decimal не поддерживается в OAP v1.0-Native SQL Engine.
В целом, результат показывает 1,49Ускорение производительности X по сравнению с OAP v1.0-Native SQL Engine по сравнению с Vanilla SPARK 3.0.0.
Мы также помещаем подробный результат по запросам, большинство запросов в тесте поддержки принятия решений1 могут использовать преимущества Native SQL Engine. Коэффициент повышения производительности может зависеть от отдельного запроса.

  • Тест поддержки принятия решений2 — это набор запросов, измененный из теста TPC-DS. Мы меняем Decimal на Doubel, так как Decimal не поддерживается в OAP v1.0-Native SQL Engine.
    Мы выбрали 10 запросов, которые могут полностью поддерживаться в OAP v1.0-Native SQL Engine, и результат показывает увеличение производительности в 1,26 раза по сравнению с Vanilla SPARK 3.0.0.

Обратите внимание, что данные о производительности не являются официальными от TPC-H и TPC-DS. Фактический результат производительности может варьироваться в зависимости от отдельных рабочих нагрузок. Сначала попробуйте свои рабочие нагрузки с собственным SQL Engine и проверьте DAG или файл журнала, чтобы узнать, могут ли все операторы поддерживаться в OAP-Native SQL Engine.

Стиль кодирования

  • Для кода Java мы использовали формат google-java-format
  • Для кода Scala мы использовали формат Spark Scala, используйте scalafmt или запустите ./scalafmt для формата кода Scala
  • Для кодов Cpp мы использовали Clang-Format, подробности см. по этой ссылке google-vim-codefmt.

[email protected]
[email protected]

Aérospatiale SA 341 Газель Архив

AviationAérospatiale, Aérospatiale SA 341 Gazelle, б/н 340.001, F-WOFH, Fenestron, First Flight, Jean Boulet, Société Nationale des Constructions Aéronautiques du sud-ouest, Societe Nationale Industrielle Aerospatiale, Sud-Aviation, Sud-Aviation SA 340 Gazelle, Turboméca Astazou IINBryan Swopes

Жан Буле парит над прототипом Sud-Aviation SA 340 Gazelle, 340. 001, F-WOFH, в Мариньяне, Франция, 7 апреля 1967 г. (Airbus Helicopters)

7 апреля 1967 г.: прототип Sud-Aviation SA 340 Gazelle, c/n 340.001, F-WOFH совершил свой первый полет в аэропорту Марсель-Мариньян вместе с летчиком-испытателем Жаном Буле. SA 340 был пятиместным легким вертолетом с турбовальным двигателем, которым управлял один пилот. Он предназначался для замены SA 313B/318C Alouette II и SA 316/319 Alouette III.

В прототипе использовались двигатель, трансмиссия, рулевой винт и посадочные полозья от Alouette II, а также новый трехлопастный композитный полужесткий несущий винт на основе четырехлопастного жесткого несущего винта Messerschmitt-Bölkow- Блом (МББ) Бо-105.

Летчик-испытатель Sud-Aviation Жан Буле в кабине SA 349, экспериментальной модификации прототипа SA 340 Gazelle, 340.001. (Airbus Helicopters)

Société Nationale des Constructions Aeronautiques du Sud-Oest (Sud-Aviation) был французским государственным производителем самолетов, возникшим в результате слияния S ociété nationale des Constructions Aeronautiques du Sud-Est (SNCASE) и Société Nationale des Constructions Aéronautiques du sud-ouest (SNCASO) в 1957 году. В 1970 году, после очередного слияния, компания стала именоваться Société nationale industrielle aérospatiale , или SNIAS, более известной как Aérospatiale. Эта компания объединила несколько других производителей, таких как Matra и Messerschmitt-Bölkow-Blohm, чтобы стать Eurocopter, а затем EADS. Теперь это Airbus Helicopters.

SA 340 был оснащен турбовальным двигателем Turboméca Astazou IIN, который вращается со скоростью 42 500 об/мин. (± 200 об/мин). Скорость выходного вала снижается за счет редуктора 7,34728:1. Двигатель мощностью 353 кВт (473 л.с. на валу) непрерывного действия или 390 кВт (523 л.с. на валу) на взлете. Его температура ограничена до 500 °C. для непрерывной работы или 525 °C. для взлета.

Несущий винт в сборе, мачта, автомат перекоса и тяги управления шагом, трансмиссия, главный карданный вал и турбовальный двигатель Turboméca Astazou прототипа Sud-Aviation SA 340 Gazelle, F-WOFH. (Аэробус Вертолеты)

F-WOFH использовался для испытаний новой системы предотвращения крутящего момента фенестрона . Обычный хвостовой винт был заменен меньшим 13-лопастным канальным вентилятором, заключенным в большой вертикальный стабилизатор. Фенестрон имел несколько преимуществ: он был безопаснее, так как был защищен от ударов по земле или от проникновения в него наземного персонала. Он был более эффективен в создании тяги для противодействия крутящему моменту, хотя требовал большей мощности двигателя при зависании. Это уменьшало аэродинамическое сопротивление вертолета в прямом полете и не подвергалось большим смещениям, возникающим из-за асимметрии подъемной силы. Большое оперение было изогнуто и разгружало систему противодействия крутящему моменту во время полета вперед. Это означало, что вертолет мог летать после отказа антикрутящего момента, а не требовал немедленного аварийного авторотации.

Sud-Aviation фенестрона на SA 341 Gazelle раннего производства, б/н 1006, F-WTNV. (Airbus Helicopters)

Aérospatiale SA 341 Gazelle был запущен в производство в 1971 году как военный, так и гражданский вертолет. Самолет также производился в Англии компанией Westland.

«Газель» — первый вертолет, сертифицированный для полетов по приборам с одним пилотом.

Общая длина SA 341 с вращающимися роторами составляла 11,972 метра (39 футов, 3,34 дюйма). Фюзеляж имел длину 9,533 метра (31 фут 3,31 дюйма), а вершина киля — 3,19 дюйма.2 метра (10 футов, 5,67 дюйма) в высоту. Трехлопастной несущий винт имел диаметр 10 500 метров (34 фута, 5,39 дюйма) и вращался по часовой стрелке, если смотреть сверху. (Выдвигающаяся лопасть находится слева.) Ротор имеет нормальную рабочую скорость 378 об/мин, ± 12 об/мин. (310–430 об/мин на авторотации. 13-лопастной фенестрон заключен в воздуховод в вертикальном киле. Ротор имеет диаметр 0,695 метра (2 фута, 3,36 дюйма) и вращается против часовой стрелки, если смотреть со стороны влево.(Наступающие лопасти выше оси вращения.)

Сертифицированная максимальная полная масса вертолета составляет 1800 кг или 3970 фунтов.

Aérospatiale SA 341 Газель, изображение в трех проекциях с размерами.