Будет ли трансляция? Обязательно будет. Ссылку разместим позже на странице мероприятия — поэтому советуем зарегистрироваться на оффлайн-встречу, даже если вы не сможете прийти. Так вы точно не потеряете ссылку на онлайн
Нужно что-то платить? Нет, митап бесплатный — ждём всех неравнодушных к программированию на Spark!
Как работать с Apache Spark? Практический гайд (видео + материалы на GitHub)
В Сравни мы используем Apache Spark для загрузки сырых данных из источников.
У нас есть два вида загрузки:
Batch-загрузка — когда данные грузятся один раз в какой-то период (час, день и так далее). Актуальна она, например, для данных по курсам валют: аналитикам достаточно знать курс валют на конкретный день, поэтому читаем раз в день данные по API с сайта ЦБ и грузим их в S3 (объектное хранилище) при помощи Python. Таких API достаточно много, они могут сильно различаться по количеству данных, поступающих с каждой.
Уже из S3 в Greenplum мы грузим все эти данные при помощи Spark. Фреймворк позволяет быстро трансформировать данные одновременно на нескольких машинах, так как все вычисления происходят в оперативной памяти.
Потоковая загрузка, которая работает 24/7 (на то она и стриминг). Здесь мы имеем дело с данными, изменения в которых нам нужно видеть несколько раз в день. Данные в этом случае читаются из Kafka посредством Spark и сразу пишутся в Greenplum (параллельно скидываем файлы в S3, чтобы был бэкап).
Порог входа в Spark выше, чем в SQL или Python, поскольку он требует знания и того, и другого. Плюс, когда начинаешь заниматься написанием трансформаций на Spark, возникают вопросы по оптимизации кода и правильной настройке ресурсов. Так как Spark — приложение, которое запускается на наших серверах, его надо уметь настраивать: примерно понимать, сколько потребуется выделить ядер процессора, оперативной памяти и количества executors (процессов для параллельной обработки).
Наш дата-инженер Евгений Виндюков полагает, что изучать Spark сразу с выделения ресурсов не стоит: лучше сперва научиться крутить таблички локально на одном компьютере. И только потом переходить на параллельную обработку на нескольких машинах.
Специально для тех, кто планирует ознакомиться с Apache Spark на практике, Евгений подготовил видео-гайд, который можно посмотреть здесь:
Плюс материалы на GitHub, чтобы вы могли не просто разобраться в Spark, но и запустить его на своём локальном ПК в режиме библиотеки или режиме кластера через docker compose.
Когда веб-браузер не может «договориться» с веб-сервером о способе шифрования данных, сайт не открывается, а на экран выдаются сообщения: «Подключение к этому сайту не защищено. Этот сайт не может обеспечить безопасное соединение», «Не удаётся открыть эту страницу. Подключение было сброшено» или даже «Не удаётся получить доступ к сайту. Превышено время ожидания ответа от сайта».
В последнее время причиной таких нестыковок стала активацияалгоритма согласования криптографических ключей Kyber768 в веб-браузерах, построенных на платформе Chromium. После включения этого механизма изменяется запрос, отправляемый веб-браузером для установки защищённого соединения TLS 1.3, но ещё не все серверы «умеют» правильно его обрабатывать, что приводит к досадным отказам в обслуживании.
Если попасть на веб-сайт всё-таки необходимо, то можно временно отключить в веб-браузере механизм Kyber768. Например, в Microsoft Edge для этого надо:
Набрать в адресной строке текст:edge://flags/
Набрать в строке поиска текст:TLS 1.3 hybridized
Изменить значение параметра «TLS 1.3 hybridized Kyber support» с Default на Disabled
Перезапустить веб-браузер
Отключение механизма Kyber768 в веб-браузере Microsoft Edge.
В других веб-браузерах поиск настройки отличается только текстом в адресной строке: chrome://flags — для Google Chrome, vivaldi://flags — для Vivaldi, и т. д.
Если после этого сайт стал открываться, то можно уведомить о проблеме его владельца. В противном случае значение изменённого параметра лучше восстановить.
На курсе вы разберетесь в принципах и отличиях работы двух популярных систем сообщений. Узнаете, как выбрать подходящее решение для проекта, оптимизировать обмен данными между компонентами и повысить эффективность разработки.
Получить ссылку на бесплатные уроки можно заполнив эту форму.
А если вам интересно прокачать свои навыки работы с Apache Kafka, рекомендуем:
Когда строишь потоки обработки в Apache Nifi в основном требуется результат записать в базу данных. Бывают случаи, когда запись в целевую таблицу не проходит по причине несоответствия данных в записи и полей в таблице. Это возникает в случае, если на источнике размер поля увеличился, либо изменился порядок знаков после занятой, либо вы ожидаете "uniqueidentifier" а приходит пустая строка.
Ситуаций много, а решение обычно одно - локализовать ошибку, найти поле, которое не соответствует S2T, внести корректировки в таблицы, либо дополнить трасформации. В случае, если полей в записи две три, понять причину не сложно. Когда же их много приходится тратить время на разбор записи по отдельным полям и проверку каждого потенциального источника ошибки.
Для этого предлагаю скрипт для ScriptedTransformRecord, позволяющий разобрать запись на массив записей, каждая из которых содержит только одно значение, остальные проставляются "null".
results = []
fields = record.getRawFieldNames()
schema = record.getSchema()
fields.each{key -> {
log.debug("Got key: ${key}")
nMap = new java.util.HashMap<String, Object>()
log.debug("create map")
nMap.put(key,record.getValue(key))
log.debug("Put to map value")
newrecord = new org.apache.nifi.serialization.record.MapRecord(schema, nMap)
log.debug("Сreate new record with field ${key}")
results.add(newrecord)
}}
results