Midi ox недостаточно памяти для выполнения задания
Будущих учащихся на курсе «Экосистема Hadoop, Spark, Hive» приглашаем на открытый вебинар по теме «Spark Streaming». На вебинаре участники вместе с экспертом познакомятся со Spark Streaming и Structured Streaming, изучат их особенности и напишут простое приложение обработки потоков.
А сейчас делимся с вами традиционным переводом полезного материала.
Spark приложения легко писать и легко понять, когда все идет по плану. Однако, это становится очень сложно, когда приложения Spark начинают медленно запускаться или выходить из строя. Порой хорошо настроенное приложение может выйти из строя из-за изменения данных или изменения компоновки данных. Иногда приложение, которое до сих пор работало хорошо, начинает вести себя плохо из-за нехватки ресурсов. Список можно продолжать и продолжать.
Важно понимать не только приложение Spark, но также и его базовые компоненты среды выполнения, такие как использование диска, сети, конфликт доступа и т.д., чтобы мы могли принимать обоснованные решения, когда дела идут плохо.
В этой серии статей я хочу рассказать о некоторых наиболее распространенных причинах, по которым приложение Spark выходит из строя или замедляется. Первая и наиболее распространенная — это управление памятью.
Если бы мы заставили всех разработчиков Spark проголосовать, то условия отсутствия памяти (OOM) наверняка стали бы проблемой номер один, с которой все столкнулись. Это неудивительно, так как архитектура Spark ориентирована на память. Некоторые из наиболее распространенных причин OOM:
неправильное использование Spark
высокая степень многопоточности (high concurrency)
Чтобы избежать этих проблем, нам необходимо базовое понимание Spark и наших данных. Есть определенные вещи, которые могут быть сделаны, чтобы либо предотвратить OOM, либо настроить приложение, которое вышло из строя из-за OOM. Стандартная конфигурация Spark может быть достаточной или не подходящей для ваших приложений. Иногда даже хорошо настроенное приложение может выйти из строя по причине OOM, когда происходят изменения базовых данных.
Переполнение памяти может быть в узлах драйвера, исполнителя и управления. Рассмотрим каждый случай.
НЕДОСТАТОЧНО ПАМЯТИ ПРИ РАБОТЕ ДРАЙВЕРА
Драйвер в Spark — это JVM (Java Virtual Machine) процесс, в котором работает основной поток управления приложения. Чаще всего драйвер выходит из строя с ошибкой OutOfMemory — OOM (недостаточно памяти из-за неправильного использования Spark. Spark — это механизм распределения нагрузки между рабочим оборудованием. Драйвер должен рассматриваться только как дирижер. В типовых установках драйверу предоставляется меньше памяти, чем исполнителям. Поэтому мы должны быть осторожны с тем, что мы делаем с драйвером.
Обычными причинами, приводящими к OutOfMemory OOM (недостаточно памяти) драйвера, являются:
Низкий уровень памяти драйвера, настроенный в соответствии с требованиями приложения
Неправильная настройка Spark.sql.autoBroadcastJoinThreshold .
Spark использует этот лимит для распределения связей ко всем узлам в случае операции соединения. При самом первом использовании, все связи реализуются на узле драйвера. Иногда многочисленные таблицы также транслируются как часть осуществления запроса.
Попробуйте написать свое приложение таким образом, чтобы в драйвере можно было избежать полного сбора всех результатов. Вы вполне можете делегировать эту задачу одной из управляющих программ. Например, если вы хотите сохранить результаты в определенном файле, вы можете либо собрать их в драйвере, или назначить программу, которая сделает это за вас.
Если вы используете SQL (Structured Query Language) от Spark, а драйвер находится в состоянии OOM из-за распределения связей, то вы можете либо увеличить память драйвера, если это возможно; либо уменьшить значение " spark.sql.autoBroadcastJoinThreshold " (неправильная настройка порога подключения) так, чтобы ваши операции по объединению использовали более удобные для памяти операции слияния соединений.
НЕДОСТАТОЧНО ПАМЯТИ ПРИ РАБОТЕ ДРАЙВЕРА
Драйвер в Spark — это JVM (Java Virtual Machine) процесс, в котором работает основной поток управления приложения. Чаще всего драйвер выходит из строя с ошибкой OutOfMemory — OOM (недостаточно памяти из-за неправильного использования Spark. Spark — это механизм распределения нагрузки между рабочим оборудованием. Драйвер должен рассматриваться только как дирижер. В типовых установках драйверу предоставляется меньше памяти, чем исполнителям. Поэтому мы должны быть осторожны с тем, что мы делаем с драйвером.
Обычными причинами, приводящими к OutOfMemory OOM (недостаточно памяти) драйвера, являются:
Низкий уровень памяти драйвера, настроенный в соответствии с требованиями приложения
Неправильная настройка Spark.sql.autoBroadcastJoinThreshold .
Spark использует этот лимит для распределения связей ко всем узлам в случае операции соединения. При самом первом использовании, все связи реализуются на узле драйвера. Иногда многочисленные таблицы также транслируются как часть осуществления запроса.
Попробуйте написать свое приложение таким образом, чтобы в драйвере можно было избежать полного сбора всех результатов. Вы вполне можете делегировать эту задачу одной из управляющих программ. Например, если вы хотите сохранить результаты в определенном файле, вы можете либо собрать их в драйвере, или назначить программу, которая сделает это за вас.
Если вы используете SQL (Structured Query Language) от Spark, а драйвер находится в состоянии OOM из-за распределения связей, то вы можете либо увеличить память драйвера, если это возможно; либо уменьшить значение " spark.sql.autoBroadcastJoinThreshold " (неправильная настройка порога подключения) так, чтобы ваши операции по объединению использовали более удобные для памяти операции слияния соединений.
Недостаточно памяти при работе управляющей программы
Это очень распространенная проблема с приложениями Spark, которая может быть вызвана различными причинами. Некоторые из наиболее распространенных причин — высокая степень многопоточности, неэффективные запросы и неправильная конфигурация. Рассмотрим каждую по очереди.
Высокая степень многопоточности
Прежде чем понять, почему высокая степень многопоточности может быть причиной OOM, давайте попробуем понять, как Spark выполняет запрос или задание и какие компоненты способствуют потреблению памяти.
Spark задания или запросы разбиваются на несколько этапов, и каждый этап далее делится на задачи. Количество задач зависит от различных факторов, например, на какой стадии выполняется, какой источник данных читается и т.д. Если это этап map-stage (фаза сканирования в SQL), то, как правило, соблюдаются базовые разделы источника данных.
Например, если реестр таблицы ORC (Optimized Row Columnar) имеет 2000 разделов, то для этапа map-stage создается 2000 заданий для чтения таблицы, предполагая, что обработка разделов ещё не началась. Если это этап reduce-stage (стадия Shuffle), то для определения количества задач Spark будет использовать либо настройку " spark.default.parallelism " для RDD (Resilient Distributed Dataset), либо " spark.sql.shuffle.partitions " для DataSet (набор данных). Сколько задач будет выполняться параллельно каждой управляющей программе, будет зависеть от свойства " spark.executor.cores ". Если это значение установить больше без учета памяти, то программы могут отказать и привести к ситуации OOM (недостаточно памяти). Теперь посмотрим на то, что происходит, как говорится, за кадром, при выполнении задачи и на некоторые вероятные причины OOM.
Допустим, мы реализуем задачу создания схемы (map) или этап сканирования SQL из файла HDFS (распределенная файловая система Hadoop distributed file system) или таблицы Parquet/ORC. Для файлов HDFS каждая задача Spark будет считывать блок данных размером 128 МБ. Таким образом, если выполняется 10 параллельных задач, то потребность в памяти составляет не менее 128*10 только для хранения разбитых на разделы данных. При этом опять же игнорируется любое сжатие данных, которое может привести к резкому скачку данных в зависимости от алгоритмов сжатия.
Spark читает Parquet (формат файлов с открытым исходным кодом) в векторном формате. Проще говоря, каждая задача Spark считывает данные из файла Parquet пакет за пакетом. Так как Parquet является столбцом, то эти пакеты строятся для каждого из столбцов. Она накапливает определенный объем данных по столбцам в памяти перед выполнением любой операции над этим столбцом. Это означает, что для хранения такого количества данных Spark необходимы некоторые структуры данных и учет. Кроме того, такие методы кодирования, как словарное кодирование, имеют некоторое состояние, сохраненное в памяти. Все они требуют памяти.
Spark задачи и компоненты памяти во время сканирования таблицы
Так что, при большем количестве параллелей, потребление ресурсов увеличивается. Кроме того, если речь идет о широковещательное соединении (broadcast join), то широковещательные переменные (broadcast variables) также займут некоторое количество памяти. На приведенной выше диаграмме показан простой случай, когда каждый исполнитель выполняет две задачи параллельно.
Неэффективные запросы
Хотя программа Spark's Catalyst пытается максимально оптимизировать запрос, она не может помочь, если сам запрос плохо написан. Например, выбор всех столбцов таблицы Parquet/ORC. Как видно из предыдущего раздела, каждый столбец нуждается в некотором пакетном состоянии в памяти. Если выбрано больше столбцов, то больше будет потребляться ресурсов.
Постарайтесь считывать как можно меньше столбцов. Попробуйте использовать фильтры везде, где это возможно, чтобы меньше данных попадало к управляющим программам. Некоторые источники данных поддерживают обрезку разделов. Если ваш запрос может быть преобразован в столбец(ы) раздела, то это в значительной степени уменьшит перемещение данных.
Неправильная конфигурация
Неправильная конфигурация памяти и кэширования также может привести к сбоям и замедлению работы приложений Spark. Рассмотрим некоторые примеры.
ПАМЯТЬ ИСПОЛНИТЕЛЯ И ДРАЙВЕРА
Требования к памяти каждого приложения разные. В зависимости от требований, каждое приложение должно быть настроено по-разному. Вы должны обеспечить правильные значения памяти spark.executor.memory или spark.driver.memory в зависимости от загруженности. Как бы очевидно это ни казалось, это одна из самых трудных задач. Нам нужна помощь средств для мониторинга фактического использования памяти приложения. Unravel (Unravel Data Operations Platform) делает это довольно хорошо.
YARN запускает каждый компонент Spark, как управляющие программы и драйвера внутри модулей. Переполненная память — это off-heap память, используемая для JVM в режиме перегрузки, интернированных строк и других метаданных JVM. В этом случае необходимо настроить spark.yarn.executor.memoryOverhead на нужное значение. Обычно 10% общей памяти управляющей программы должно быть выделено под неизбежное потребление ресурсов.
Если ваше приложение использует кэширование Spark для хранения некоторых наборов данных, то стоит обратить внимание на настройки менеджера памяти Spark. Менеджер памяти Spark разработан в очень общем стиле, чтобы удовлетворить основные рабочие нагрузки. Следовательно, есть несколько настроек, чтобы установить его правильно для определенной внеплановой нагрузки.
Spark определила требования к памяти как два типа: исполнение и хранение. Память хранения используется для кэширования, а память исполнения выделяется для временных структур, таких как хэш-таблицы для агрегирования, объединения и т. д.
Как память исполнения, так и память хранения можно получить из настраиваемой части (общий объем памяти — 300МБ). Эта настройка называется " spark.memory.fraction ". По умолчанию — 60%. Из них по умолчанию 50% (настраивается параметром " spark.memory.storageFraction ") выделяется на хранение и остаток выделяется на исполнение.
Бывают ситуации, когда каждый из вышеперечисленных резервов памяти, а именно исполнение и хранение, могут занимать друг у друга, если другой свободен. Кроме того, память в хранилище может быть уменьшена до предела, если она заимствовала память из исполнения. Однако, не вдаваясь в эти сложности, мы можем настроить нашу программу таким образом, чтобы наши кэшированные данные, которые помещаются в память хранилища, не создавали проблем для выполнения.
Если мы не хотим, чтобы все наши кэшированные данные оставались в памяти, то мы можем настроить " spark.memory.storageFraction " на меньшее значение, чтобы лишние данные были исключены и выполнение не столкнулось бы с нехваткой памяти.
Перегрузка памяти в менеджере узла
Spark приложения, которые осуществляют перетасовку данных в рамках групповых операций или присоединяются к подобным операциям, испытывают значительные перегрузки. Обычно процесс перетасовки выполняется управляющей программой. Если управляющая программа (исполнитель) занята или завалена большим количеством (мусора) GC (Garbage Collector), то она не может обслуживать перетасовки запросов. Эта проблема в некоторой степени решается за счет использования внешнего сервиса обмена.
Внешний сервис обмена работает на каждом рабочем узле и обрабатывает поступающие от исполнителей запросы на переключение. Исполнители могут читать перемешанные файлы с этого сервиса, вместо того, чтобы не считывать файлы между собой. Это помогает запрашивающим исполнителям читать перемешанные файлы, даже если производящие их исполнители не работают или работают медленно. Также, когда включено динамическое распределение, его обязательным условием является включение внешнего сортировочного сервиса.
Когда внешний сервис обмена данными Spark настроен с помощью YARN, NodeManager (управляющий узел) запускает вспомогательный сервис, который действует как внешний провайдер обмена данными. По умолчанию память NodeManager составляет около 1 ГБ. Однако приложения, выполняющие значительную перестановку данных, могут выйти из строя из-за того, что память NodeManager исчерпана. Крайне важно правильно настроить NodeManager, если ваши приложения попадают в вышеуказанную категорию.
Конец части №1, спасибо за внимание
Процессинг внутренней памяти Spark — ключевая часть ее мощности. Поэтому эффективное управление памятью является критически важным фактором для получения наилучшей производительности, расширяемости и стабильности ваших приложений Spark и каналов передачи данных. Однако настройки по умолчанию в Spark часто бывают недостаточными. В зависимости от приложения и среды, некоторые ключевые параметры конфигурации должны быть установлены правильно для достижения ваших целей производительности. Если иметь базовое представление о них и о том, как они могут повлиять на общее приложение, то это поможет в работе.
Я поделился некоторыми соображениями о том, на что следует обратить внимание при рассмотрении вопроса об управлении памятью Spark. Это область, которую платформа Unravel понимает и оптимизирует очень хорошо, с небольшим количеством, если таковое вообще потребуется, человеческого вмешательства. Я рекомендую вам заказать демо-версию, чтобы увидеть Unravel в действии. Мы видим довольно значительное ускорение работы приложений Spark.
Во второй части этой серии статьи напишу о том, почему ваши приложения Spark медленно работают или не работают: Во второй части цикла, посвященной искажению данных и сбору мусора, я расскажу о том, как структура данных, искажение данных и сбор мусора влияют на производительность Spark.
Александр, Ну могу только посоветовать только слопать таблетку псиблокады, если и ее не хватит в купе с 49% от комбеза, то возможно дело именно в отсутствии калибровки шлема. Никогда не брал не откалиброванный шлем, так что в лабе с подобным я не сталкивался, да и ходил туда в ПМК а у него 50% защиты и никогда не дох от пси излучения.
Алексей, Пробовал и пси блокаду вкупе со скальпом контролёра защита почти 100% всего скорей дело в калибровке шлема
Народ, у кого нормально Юпитер и Затон работает? У меня постоянно вылетает, не могу сохраниться там или открыть карту. Пробовал с модами и без, всё одно и тоже. Если кто знает, то помогите пожалуйста.
Александр, Полная шкала пси-защиты в меню не равняется 100% защите, это так к сведению, как впрочем хим, рад, огонь и прочая аномальная защита. А так видимо да дело в калибровке шлема, в оригинале калибровка шлема давала иммунитет от фантомов и уменьшала их количество, без шлема они наносили урон, а не калиброванный шлем снижал количество фантомов и урон от них. Так что выход видимо только один откат на более ранний сейв.
Фелл-Гастер, Смахивает на нехватку памяти, на пробу можно снизить графику и отключить офлайн сражения.
Алексей, попробую. Но графику я понижал, не сработало. Но на других локациях всё в порядке. Да ещё и на фэшке 10 гб свободно
Добрый день! Casio cdp 220p, при включении фортепиано гудит, если зажать кнопку включения гул пропадает. На наушники выход очень очень тихий, еле слышен. Кто сталкивался, что делать?
CTK-3200 комп по USB видит, но midi-данные не передаются.
Раньше всё было норм, где-то месяц назад ставил разные проги (reaper, asio4all), потом удалил.
Сейчас подключил как обычно к компу — ничего не передаётся ни в какую сторону, хотя в диспетчере устройств клавиатура есть, обновление драйверов говорит, что всё актуально.
Пробовал подключать к другому компу, через другой кабель — не помогает.
Полукровка, Если ASIO4All снесли, то и работать с миди нормально компьютер не обязан)) Возможно, всё-таки, дело в программном обеспечении.
Матрица клавиатуры:
-------------------
Обозначения: H0-H95 - крайние нормально-замкнутые контакты
L0-L95 - крайние нормально-разомкнутые контакты
C0-C95 - средние контакты
- MIDI-Channel (All) (1,2) LED01
- Split (All keys) (All) LED02
- Transpose (+/-12(24)) (0) LED03
- Shape (1 - 4) (1) LED04
- Bank Select (0 - 127(16383)) (0) LED05
- Program Chng (0 - 127) (0) LED11
- Send Sustain (No-Yes) (Yes) LED12
- Send Soft (No-Yes) (Yes) LED13
- Send Wheels (No-Yes) (Yes) LED14
- Send PCh & BSel (No-Yes) (Yes) LED15
- Threshold Sliders (1-7) (1) LED01
- Global Velocity (1-4) (2) LED02
- Controller32 (No-Yes) (Yes) LED11
- Running Status (No-Yes) (Yes) LED12
- Note OFF as ON (No-Yes) (No) LED13
- Active Sensing (No-Yes) (Yes) LED14
- 96 Keys (No-Yes) (Yes) LED15
MIDI-Channel
Shape 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Threshold Sliders
Global Velocity
Transpose 0 1 2 3 4 5 6 7 8 9 x x x x - +
Bank Select 0 1 2 3 4 5 6 7 8 9 x x x x x x
Program Chng
Send Sustain
Send Soft
Send Wheels
Send PCh & BSel No Yes
Controller32
Running Status
Note OFF as ON
Active Sensing
96 Keys
Варианты Shape (таблицы Velocity):
----------------------------------
1 - Line
2 - Log
3 - Back Log
4 - Hard
MIDI-Channel:
-------------
Номер миди-канала для "слоя".
Split:
------
Задаёт диапазон используемых клавиш для "слоя".
Transpose:
----------
Величина смещения строя клавиатуры в полутонах.
Bank Select:
------------
Номер банка при выборе инструмента.
Program Chng:
-------------
Номер выбранного инструмента.
Threshold Sliders:
------------------
Порог чувствительности "колёс" Modulation и Pitch.
Для изношенных рекомендуется увеличить.
Global Velocity:
----------------
Глобальная чувствительность к скорости нажатия.
V = Vmin * 2^(n-1) (n-данный параметр).
Корректировка может потребоваться, при использовании различной механики клавиш.
96 Keys:
--------
Разрешает/запрещает использование данного режима (иначе используется режим 64 Keys).
При переключении в режим 64 Keys, отключаются неиспользуемые клавиши и увеличивается диапазон транспонирования с +/- 12 полутона (при 96 keys) до +/- 24 полутона.
В связи с этим, а также тем, что фирмваря практически вплотную подошла к релизу, "набор в группу бета-тестеров" прекращён (при этом, группа альфа-тестирования всегда открыта).
Ну, а любителям халявы (особенно тем, у кого руки растут из различных мест) могу только посоветовать, во избежании дальнейших недоразумений, изучить вопрос про бета-тестирование, и рекомендовать пользоваться схемой Петкова.
Им её вполне хватит.
т.е если самая крайняя левая клавиша на пианино A (ля) (и прошивка с Ля суб-контроктавы), то вниз сдвигать больше некуда. Извините, если я что-то недопонял.
Или: прошивка с контроктавы, у меня 68 клавиш (из 96возможных ), то сдвиг возможен на октаву вниз (до суб-контроктавы) и на октаву вверх (до 5 актавы)
Про 628 забываем, как морально устаревший.
Точнее, отодвигаем. Забвения он не заслужил, поскольку неплохой камешек.
Тут, кстати, надо помнить ещё об одном парадоксе, что старые МК, как правило, стОят дороже новых.
Полагаю, надо сделать так: программу начинать с E субконтроктавы, с возможностью сдвига +/- октава, а уж пользователь будет подсоединять те клавиши, которые имеются на его клавиатуре.
я в Никсе купил M-Audio midisport Uno 1-In/1-Out USB MIDI Interface чета около 1500 руб
Буду искать кабеля) город большой Самара, а вот нужного,только в Тольятти,прикинь?
в музторге есть ALESIS USB-Midi Cable Ссылка - этот получше m-audio будет ))
- проблемы с m-audio midisport uno Ссылка
после доработки работает нормально ))
- при наличии геймпорта можно и самому спаять кабель бесплатно ))
- делал я одно время такие адаптеры - могу поделиться ))
- если звуковую карту ещё не купил , то есть шанс купить всё
в одном флаконе FOCUSRITE Scarlett 8i6 USB
Ссылка
или если мало входов FOCUSRITE Scarlett 18i6 USB
Ссылка
- проблемы с m-audio midisport uno Ссылка
Леша ,у меня работает отлично ! и если быть внимательным то можно заметить что обсуждения проблемы с интерфейсом было в далёком 2009 году!
можно брать смело . и паять нечего не надо .
и чем позволь узнать лучше ALESIS USB-Midi Cable ? названием бренда?
вот по поводу алесиса Ссылка
один из отзывов
Прежде, чем я купил этот USB-MIDI кабель, я получал серьезные проблемы задержки с другими брендами. Этот рекомендуется и он работает очень хорошо. Лучший MIDI кабель к USB я сталкивался.+
а вот в м-аудио стоит не совсем удачный оптрон 6N138 и данный
адаптер будет заведомо медленно работать ))
помнишь у тебя были проблемы со скоростью передачи в dx7 ))
- это результат дешёвой схемотехники ))
- может этот баг и исправили со временем но в любом случае
м-аудио я бы брать не стал - имхо ))
- потом , после нашей встречи с Сашей я понял что с паяльником
он дружит вот собственно поэтому и преподношу информацию
в таком формате - потом надеюсь может кому ещё это пригодится ))
- а так из USB-MIDI адаптеров - это EMU YAMAHA ALESIS - рулят ))
- по поводу твоего м-аудио работать-то он будет - меня интересует
другое - у тебя проявляется такой баг или нет ?
- если нет - снимаю шляпу
- а если фото платы выложишь с обоих сторон - всё сразу
станет ясным - какой адаптер лучше
- вопрос-то актуальный ))
у меня и сейчас есть замедления . но это если в ДАВ стоит Лексикон драйвер ,если выставить АСИО4алл и правильно настроить то задержек нет ваще. да и модуль звуковой ВСТ я подключал . Спектроника или как то так работал ваще без тормозов. и питч и модуляция и на назначаемые CS1 CS2 и кнопки все работает.
разбирать как то не тянет . новый ведь ,гарантия есть. да и сама коробочка у меня за столом где-то я шнур в задний разъем юсби подключил ,потому что сынок то и дело на передке компа то флэшек пару сунет то телефон на зарядку то джойстик . хоть и 4 дырки спереди а ему мало ))
ты вот ссылку опять.
хотя я спросил у тебя . чем лучше то. ты пробовал этот и тот чтобы сравнивать .
у меня м-аудио и косяков не было ,вот и советую .
не настаиваю конечно )
раз всё работает - и по миди-входу адаптера
мусора нет - значит косяк исправили ))
ну тем лучше - осталось потроха посмотреть
ну как гарантия закончится - подождём ))
там тока один винт отвернуть вроде - не горит))
именно эти два адаптера я не сравнивал ))
но с недавних пор к этой конторе как-то не очень ))
и потом в последнее время музторг старается
не связываться с проблемными позициями - говорил
с продавцами вот )) ну и тем более этот кабель у них
только под заказ а алесис в наличии всегда - факт))
а так из-за дешёвых компонентов бывает задержка
а тут блин конкретный косяк компонент включили
не так как надо - тут даже эксклюзивы не передашь
при всём желании ))
ладно )) А ЧТО СКАЖЕТ ПАПА .
серёг вопрос имеется
купил я сей адаптер - есть баги ))
всё нашлось - всё поставилось - всё работает ))
туда сюда заливает - если бы не одно но ))
если при выключении компа синт не выключить
то при повторной загрузке винды устройство находится
мидимонитор в кекволке всё показывает а реально индикаторы
на адаптере молчат - звука нет ))лечится переустановкой дров ))
если перед выключением
компа первым выключается синт , потом комп всё в порядке -
у тебя как
блин третий адаптер уже покупаю - не хватает ))
Читайте также: