Как стать автором
Обновить
70.19
Рейтинг
Neoflex
Создаем ИТ-платформы для цифровой трансформации
Сначала показывать
  • Новые
  • Лучшие

Apache Spark: оптимизация производительности на реальных примерах

Блог компании Neoflex Apache *Big Data *Хранилища данных *Data Engineering *
Из песочницы

Apache Spark – фреймворк для обработки больших данных, который давно уже стал одним из самых популярных и часто встречаемых во всевозможных проектах, связанных с Big Data. Он удачно сочетает в себе скорость работы и простоту выражения своих мыслей разработчиком.

Разработчик работает с данными на достаточно высоком уровне и, кажется, что нет ничего сложного в том, чтобы, например, соединить два набора данных, написав всего одну строку кода. Но только задумайтесь: что происходит в кластере при соединении двух наборов данных, которые могут и не находится целиком на каком-либо из узлов кластера? Обычно Spark со всем справляется быстро, но иногда, а особенно, если данных действительно много, необходимо все-таки понимать – что происходит уровнем ниже и использовать это знание, чтобы помочь Spark работать в полную силу.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 2.7K
Комментарии 3

Управление сложностью legacy-кода в Big Data проектах с помощью инструмента Datalog

Блог компании Neoflex Apache *Big Data *
Самый простой Big Data проект сложнее проекта из мира привычного ПО. Имеется ввиду не сложность собственно алгоритмов или архитектуры, но анализа того, что представляет собой проект, как он работает с данными, как собирается та или иная витрина, какие для нее берутся данные.

Например, нужно решить такую задачу:

  1. Загрузить таблицу из Oracle;
  2. Посчитать в ней сумму по какого-нибудь полю, сгруппировав по ключу;
  3. Результат сохранить в витрину в Hive.

Набор инструментов будет выглядеть примерно так:

  • Oracle
  • Apache Sqoop
  • Oozie
  • Apache Spark
  • Hive

Простая задача неожиданно приводит к появлению проекта, включающего три независимых инструмента с тремя независимыми папками исходных файлов. И как понять – что происходит в проекте?

Если рассмотреть более типичный случай, то набор артефактов простого проекта в Big Data представляет собой:

  • SH управляющие файлы;
  • Sqoop скрипты;
  • набор Airflow Dag или Oozie Workflow;
  • SQL скрипты собственно преобразований;
  • Исходники на PySpark или Scala Spark;
  • DDL скрипты создания объектов.

Также, особенностью является то, что если пользоваться Cloudera или Hortonworks, то среда не предоставляет удобных средств разработки и отладки.

Облачные среды, такие как AWS или Azure, предлагают все делать в их оболочке, объединяющей все требуемые артефакты в удобном интерфейсе.

Вот, например, картинка с сайта Microsoft Azure:



Но это если есть AWS или Azure. А если есть только Cloudera?

Как ответить на вопрос – что, собственно, в проекте написано? При этом этот вопрос крайне интересует и заказчика тоже, так как в случае обычного ПО ему все равно то, как всё устроено внутри, а в случае с Big Data заказчику важно понимать, что данные получаются правильно.
В мире обычного программирования есть набор паттернов, подходов, применение которых позволяет структурировать код. А как структурировать код, представляющий из себя зоопарк независимых SQL-файлов, SH-скриптов вперемешку с Oozie Workflow?
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 911
Комментарии 8

Как Apache Flink хранит стейт: взгляд изнутри

Блог компании Neoflex Big Data *Хранилища данных *

Привет! В этой статье мы рассмотрим важнейший аспект практически любого потокового приложения – работу со стейтом. Сегодня в роли подопытного выступит фреймворк Apache Flink.

Мы узнаем, как и где можно хранить стейт, какие структуры данных для этого используются, оценим скорость работы каждого подхода и узнаем, что из предложенных вариантов быстрее, а что – надежнее, и можно ли найти компромисс среди множества разноплановых комбинаций.

Небольшой дисклеймер

Подавляющая часть информации, представленной в этой статье, справедлива для всех релизов Apache Flink, начиная с версии 1.8. В версии 1.13 (последняя на момент выхода этой статьи) произошли небольшие правки API, которые в некоторой мере изменили видимую пользователю «оболочку» хранения стейта, но общие принципы остались прежними. Подробнее об этом можно прочитать здесь.

Если вы только начинаете знакомство с Apache Flink, то рекомендую посмотреть наш YouTube-митап по основам этого замечательного фреймворка.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.3K
Комментарии 2

Построение потоковой stateful обработки данных на Akka

Блог компании Neoflex Scala *Big Data *Data Engineering *

В одном из исследовательских проектов нам с коллегами пришла идея совместить Akka Stream, Akka event sourcing (typed persistence) и Akka cluster sharding для реализации stateful stream processing. На мой взгляд, получилось достаточно интересное и лаконично решение, которым я бы и хотел с вами поделиться.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1.2K
Комментарии 2

Потоковый захват изменений из PostgreSQL/MySQL с помощью Apache Flink

Блог компании Neoflex PostgreSQL *Big Data *
Tutorial

Привет! Сегодня мы поговорим и попробуем на практике реализацию паттерна Change Data Capture (далее – CDC) в Apache Flink. 

Статья разделена на несколько частей: в первой мы рассмотрим теоретические основы Change Data Capture, варианты реализации и сферы применения. Во второй – обратимся к особенностям CDC-коннекторов экосистемы Apache Flink, а также выделим самые интересные фичи (а заодно и немного расскажем об Apache Flink для тех, кто раньше с ним не сталкивался). В третьей части – перейдем к практике, закатаем рукава и реализуем несложный сценарий захвата изменений из WAL PostgreSQL, приправленный объединениями, агрегацией, стеком ELK и целым кластером Flink, правда в миниатюре.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 4.5K
Комментарии 4

Энтропия и выявление аномалий сетевого трафика

Блог компании Neoflex Сетевые технологии *Серверное администрирование *


В данной статье Даниил Волков, ведущий эксперт бизнес-направления Data Science компании Neoflex, рассказывает о методах обнаружения сетевых аномалий, основанных на использовании энтропии – основной характеристики систем с точки зрения теории информации. Также он отмечает некоторые способы обнаружения аномалий временных рядов.

За последнее десятилетие большое количество исследований было сосредоточено на энтропии как мере «хаоса», присущего различным характеристикам сетевого трафика. В частности, энтропийные временные ряды оказались относительно хорошим методом обнаружения аномалий в сетевом трафике. К плюсам такого подхода относятся:

  • Масштабируемость. Предложенные методы способны использовать агрегированные данные (например, записи Netflow), что делает возможным использование в сколь угодно сложных и высоконагруженных сетях.
  • Чувствительность к изменениям распределений характеристик трафика. Энтропийный подход помогает среагировать на аномалию, и в тех случаях, когда такие классические характеристики трафика, как packets rate (rps) не обнаруживают значимого аномального поведения (т.о., способен выявлять атаки с низким относительным packets rate).
  • Легкость реализации и доступная интерпретация. Быстрая готовность к работе, отсутствие необходимости в данных для обучения и способность находить атаки zero-day.

Сетевые потоки


Итак, предлагаемые системы обнаружения аномалий на основе понятия «энтропия» анализируют сетевые потоки, а не отдельные сетевые пакеты. Определим сетевые потоки (далее просто потоки) как однонаправленную метаинформацию о сетевых пакетах, имеющих одинаковые исходный и целевой IP-адрес и порты, а также тип протокола IP. Важно отметить, что вся сетевая активность в OSI уровня 3 и выше сводится к потокам, т.е. это не только TCP- соединения, но и протоколы без сохранения состояния, такие как UDP и ICMP. Преимущества использования концепции потоков:
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 2.9K
Комментарии 3

AWS Control Tower и почему мы его не используем

Блог компании Neoflex Системное администрирование *Серверное администрирование *


Всем, кто работал с AWS хорошо известно о существовании аккаунтов – учетные записи, в которых, собственно, и происходит работа – выделение ресурсов, разграничение прав доступа и так далее. Часто возникает необходимость создания нескольких аккаунтов – будь то отдельные аккаунты для различных отделов компании или отдельные аккаунты под проекты или даже под различные среды одного проекта (разработка, тестирование, эксплуатация). Для управления аккаунтами в AWS есть сервис AWS Organizations, который позволяет создавать новые аккаунты, распределять ресурсы, оптимизировать оплату счетов посредством настройки единого метода оплаты для всех аккаунтов, создавать группы аккаунтов и применять к ним политики, чтобы эффективно управлять рабочими процессами.

Однако для управления аккаунтами одного сервиса AWS Organizations недостаточно. Есть желание не просто создавать аккаунты, но создавать их так, чтобы они удовлетворяли принятым в компании нормам и политикам, иметь возможность отслеживать состояние созданных аккаунтов, управлять политиками, не редактируя JSON документ, а более удобным способом. Также в случае роста количества аккаунтов в организации понимание того, что возможностей сервиса AWS Organizations не хватает приходит достаточно быстро. И вот тем, кто вступил на этот путь есть два варианта – или использовать инструмент от AWS – Control Tower или разработать собственные скрипты управления. Дальше в статье рассказывается почему мы выбрали второй вариант.

Что такое AWS Control Tower?


Начать стоит с определения AWS Landing Zone – решение, которое помогает пользователям быстро настроить безопасную среду AWS с несколькими аккаунтами основываясь на лучших практиках. Именно оно лежит в основе AWS Control Tower. Как следует из официальной информации, решение это продолжает существовать, но без будущих доработок и новым пользователям настоятельно рекомендуется использовать AWS Control Tower для управления AWS средой с несколькими аккаунтами.
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 1.4K
Комментарии 3

Настройка DBT + Spark для кластера Cloudera on-prem

Блог компании Neoflex SQL *Hadoop *


Для управления кодом Spark-приложений мы используем подход, описанный в предыдущей статье.

Речь идет об управлении качеством кода при разработке Spark ETL, чтобы не превратить работу над проектом в полет души, пугающий даже автора. В результате Spark ETL application выглядит просто как последовательность Spark SQL-запросов. Сама ETL-трансформация описывается как объект в отдельном файле конфигурации.
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 562
Комментарии 0

Управление кодом Spark-приложений

Блог компании Neoflex SQL *Apache *Big Data *


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

Как можно управлять сложностью проекта по разработке ETL-трансформаций на Spark?

Тут все не так просто.

Как это выглядит в жизни? Заказчик предлагает создать приложение, собирающее витрину. Вроде бы надо выполнить через Spark SQL код и сохранить результат. В ходе разработки выясняется, что для сборки этой витрины требуется 20 источников данных, из которых 15 похожи, остальные нет. Эти источники надо объединить. Далее выясняется, что для половины из них надо писать собственные процедуры сборки, очистки, нормализации.

И простая витрина после детального описания начинает выглядеть примерно так:



В результате простой проект, который должен был всего лишь запустить на Spark скрипт SQL собирающий витрину, обрастает собственным конфигуратором, блоком чтения большого числа настроечных файлов, собственным ответвлением маппинга, трансляторами каких-нибудь специальных правил и т.д.
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 1.5K
Комментарии 21

Spark schemaEvolution на практике

Блог компании Neoflex Apache *Big Data *Hadoop *
Уважаемые читатели, доброго дня!

В данной статье ведущий консультант бизнес-направления Big Data Solutions компании «Неофлекс», подробно описывает варианты построения витрин переменной структуры с использованием Apache Spark.

В рамках проекта по анализу данных, часто возникает задача построения витрин на основе слабо структурированных данных.

Обычно это логи, или ответы различных систем, сохраняемые в виде JSON или XML. Данные выгружаются в Hadoop, далее из них нужно построить витрину. Организовать доступ к созданной витрине можем, например, через Impala.

В этом случае схема целевой витрины предварительно неизвестна. Более того, схема еще и не может быть составлена заранее, так как зависит от данных, а мы имеем дело с этими самыми слабо структурированными данными.

Например, сегодня логируется такой ответ:

{source: "app1", error_code: ""}

а завтра от этой же системы приходит такой ответ:

{source: "app1", error_code: "error", description: "Network error"}

В результате в витрину должно добавиться еще одно поле — description, и придет оно или нет, никто не знает.

Задача создания витрины на таких данных довольно стандартная, и у Spark для этого есть ряд инструментов. Для парсинга исходных данных есть поддержка и JSON, и XML, а для неизвестной заранее схемы предусмотрена поддержка schemaEvolution.

С первого взгляда решение выглядит просто. Надо взять папку с JSON и прочитать в dataframe. Spark создаст схему, вложенные данные превратит в структуры. Далее все нужно сохранить в parquet, который поддерживается в том числе и в Impala, зарегистрировав витрину в Hive metastore.

Вроде бы все просто.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 874
Комментарии 6

Применение low-code в аналитических платформах

Блог компании Neoflex Big Data *Хранилища данных *Hadoop *Data Engineering *
Уважаемые читатели, доброго дня!

Задача построения ИТ-платформ для накопления и анализа данных рано или поздно возникает у любой компании, в основе бизнеса которой лежат интеллектуально нагруженная модель оказания услуг или создание технически сложных продуктов. Построение аналитических платформ — сложная и трудозатратная задача. Однако любую задачу можно упростить. В этой статье я хочу поделиться опытом применения low-code-инструментов, помогающих в создании аналитических решений. Данный опыт был приобретён при реализации ряда проектов направления Big Data Solutions компании «Неофлекс». Направление Big Data Solutions компании «Неофлекс» с 2005 года занимается вопросами построения хранилищ и озёр данных, решает задачи оптимизации скорости обработки информации и работает над методологией управления качеством данных.



Избежать осознанного накопления слабо и/или сильно структурированных данных не удастся никому. Пожалуй, даже если речь будет идти о малом бизнесе. Ведь при масштабировании бизнеса перспективный предприниматель столкнётся с вопросами разработки программы лояльности, захочет провести анализ эффективности точек продаж, подумает о таргетированной рекламе, озадачится спросом на сопроводительную продукцию. В первом приближении задача может быть решена «на коленке». Но при росте бизнеса приход к аналитической платформе все же неизбежен.

Однако в каком случае задачи аналитики данных могут перерасти в задачи класса «Rocket Science»? Пожалуй, в тот момент, когда речь идёт о действительно больших данных.
Чтобы упростить задачу «Rocket Science», можно есть слона по частям.



Чем большая дискретность и автономность будет у ваших приложений/сервисов/микросервисов, тем проще вам, вашим коллегам и всему бизнесу будет переваривать слона.

К этому постулату пришли практически все наши клиенты, перестроив ландшафт, основываясь на инженерных практиках DevOps-команд.
Читать дальше →
Всего голосов 8: ↑6 и ↓2 +4
Просмотры 2.5K
Комментарии 5

Kubernetes на собственной инфраструктуре: «за» и «против» приватных облаков

Блог компании Neoflex IT-инфраструктура *Kubernetes *Openshift *
Уважаемые читатели, доброго дня!

В данной статье Игорь Котенко, главный архитектор компании «Неофлекс», делится опытом развертывания платформы контейнеризации на инфраструктуре предприятия.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 5.3K
Комментарии 12

Запускаем Apache Spark на Kubernetes

Блог компании Neoflex Apache *Big Data *Kubernetes *
Дорогие читатели, доброго дня. Сегодня поговорим немного про Apache Spark и его перспективы развития.



В современном мире Big Data Apache Spark является де факто стандартом при разработке задач пакетной обработки данных. Помимо этого, он также используется для создания стриминговых приложений, работающих в концепции micro batch, обрабатывающих и отгружающих данные маленькими порциями (Spark Structured Streaming). И традиционно он являлся частью общего стека Hadoop, используя в качестве менеджера ресурсов YARN (или, в некоторых случаях, Apache Mesos). К 2020 году его использование в традиционном виде для большинства компаний находится под большим вопросом в виду отсутствия приличных дистрибутивов Hadoop — развитие HDP и CDH остановлено, CDH недостаточно проработан и имеет высокую стоимость, а остальные поставщики Hadoop либо прекратили своё существование, либо имеют туманное будущее. Поэтому всё больший интерес у сообщества и крупных компаний вызывает запуск Apache Spark с помощью Kubernetes — став стандартом в оркестрации контейнеров и управлении ресурсами в приватных и публичных облаках, он решает проблему с неудобным планированием ресурсов задач Spark на YARN и предоставляет стабильно развивающуюся платформу с множеством коммерческих и открытых дистрибутивов для компаний всех размеров и мастей. К тому же на волне популярности большинство уже успело обзавестись парой-тройкой своих инсталляций и нарастить экспертизу в его использовании, что упрощает переезд.

Начиная с версии 2.3.0 Apache Spark обзавёлся официальной поддержкой запуска задач в кластере Kubernetes и сегодня, мы поговорим о текущей зрелости данного подхода, различных вариантах его использования и подводных камнях, с которыми предстоит столкнуться при внедрении.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 5.7K
Комментарии 5

Data Platform для целей формирования регуляторной отчетности

Блог компании Neoflex
Формирование банковской регуляторной отчетности является сложным процессом с высокими требованиями к точности, достоверности, глубине раскрываемой информации. Традиционно для автоматизации отчетности организации используют классические системы хранения и обработки данных. При этом с каждым годом активно растет число задач, где требуется не просто проводить аналитику большого объема разнородных данных, но и делать это с требуемой для бизнеса скоростью.

Совокупность этих факторов привела к изменению процессов управления данными. Data Platform – подход, который предлагает переосмысление традиционной концепции классического хранилища данных (КХД) с использованием технологий Big Data и новых подходов, применяемых при построении Data Lake платформ. Data Platform позволяет качественно учесть такие важные факторы, как рост количества пользователей, требования к time2customer (обеспечить возможность высокой скорости выполнения изменений), а также стоимость получаемого решения, в том числе, с учётом его дальнейшего масштабирования и развития.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 1.5K
Комментарии 2

Business Intelligence по-русски — на квинтетах

Блог компании Neoflex Программирование *Анализ и проектирование систем *Совершенный код *SQL *

В одной из заметок нашего блога мы освещали подход к хранению и обработке данных, о котором получили несколько вполне ожидаемых вопросов такого плана: «В общем, ждём реализации, вот уж оно залетает...». По результатам нескольких реализаций я расскажу о плюсах и минусах этого подхода на примере одной из наших разработок.


Своим заказчикам мы обычно предлагаем достаточно мощный и гибкий инструмент BI, способный решить все их задачи, однако это — зарубежный коммерческий продукт, а клиентов всё чаще интересует тема импортозамещения. В рамках изучения наших перспектив в этом плане мы начали тестирование собственного инструментария BI, используя open-source решения и платформу разработки, построенную на квинтетах.




В качестве эталона мы взяли наш существующий коммерческий продукт, так что сравнение, по возможности, будем проводить с ним.

Читать дальше →
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 2.9K
Комментарии 2

Обучающий курс по DataPower

Блог компании Neoflex Анализ и проектирование систем *Серверное администрирование *
Tutorial

Материал подготовлен в соавторстве с пользователем wedmeed


В 2017 году, когда начинался наш проект во Вьетнаме, мы столкнулись с новым для нас зверем IBM DataPower. IBM DataPower – продукт, представляющий собой gateway между клиентами и бэкендами, предназначенный для фильтрации, маршрутизации, обогащения или других преобразований проходящих через него сообщений (далее – запросов). Обучаться нужно было быстро, времени на раскачку не было, поэтому нам было предложено самостоятельно ознакомиться с ним, после чего были многочасовые конференции по скайпу с нашим коллегой из Москвы, который передавал нам свои знания и опыт работы с этим продуктом.


Самостоятельное обучение основывалось на изучении документации и просмотре обучающих видео из интернета – и тут меня ждал подвох. Мне практически не удалось найти информации на русском языке. К слову, мои знания английского языка на тот момент были не на высшем уровне, к тому же это был мой первый проект и, наверное, именно эти факторы усложнили мне жизнь. Это сподвигло меня написать обучающую статью на русском языке и в максимально простом изложении для начинающих разработчиков, которые столкнулись с этим продуктом и пытаются оперативно понять его азы. Статья не освободит вас от чтения документации, но облегчит жизнь на первых этапах понимания «как это работает».


Стоит также заметить, что приведенная в практике структура будет приближена к реальному проекту, что позволит вам использовать ее как базу, расширяя и дополняя под ваши требования. В заключение к разделам «Теория» будет приведено несколько слов об уже реализованном проекте, а также некоторые особенности, на которые стоит обратить внимание.



Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 5.9K
Комментарии 1

Квинтет как базовая сущность для описания предметной области

Блог компании Neoflex IT-стандарты *Функциональное программирование *Хранение данных *Будущее здесь
Квинтет — это способ записать атомарные фрагменты данных с указанием их роли в нашей жизни. Квинтетами можно описать любые данные, при этом каждый из них содержит исчерпывающую информацию о себе и о связях с другими квинтетами. Он представляет термины предметной области, независимо от используемой платформы. Его задача — упростить хранение данных и улучшить наглядность их представления.



Я расскажу о новом подходе к хранению и обработке информации и поделюсь мыслями о создании платформы разработки в этой новой парадигме.
Взглянуть по-новому на известные вещи
Всего голосов 17: ↑8 и ↓9 -1
Просмотры 4.6K
Комментарии 60

Как мы в Neoflex развиваем экспертизу DevOps

Блог компании Neoflex DevOps *

После выделения DevOps внутри компании «Неофлекс» в отдельное бизнес-направление команда стала активно наращивать экспертизу и делиться найденными источниками знаний друг с другом. В этом посте я поделюсь с вами личным опытом погружения в тему и наиболее интересными ресурсами.




Основными источниками информации по теме стали следующие:


  • Интернет-ресурсы – как независимые, так и компаний разработчиков
  • Статьи и презентации
  • Литература
  • Конференции
  • Программы обучения – как платные, так и бесплатные
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Просмотры 4K
Комментарии 0

Как развернуть окружение для разработки приложений на React Native на Windows

Блог компании Neoflex Разработка мобильных приложений *ReactJS *
Tutorial

Доброго времени суток!


Решив начать разрабатывать приложения на React Native, я столкнулся с проблемами разворачивания окружения. Сегодня я хочу поделиться опытом его настройки.

Конечно, на официальном сайте есть подробное описание, но следуя только этим рекомендациям, было довольно сложно сделать все настройки.


Читать дальше →
Всего голосов 15: ↑12 и ↓3 +9
Просмотры 29K
Комментарии 9

Организация хранения кода в GitLab и интеграция код ревью в GitFlow

Блог компании Neoflex Git *

Не так давно на одном из проектов нашей компании было принято решение наконец отказаться от использования Subversion для хранения и версионирования кода в пользу Git.



Основными целями перехода были следующие:


  • Повышение прозрачности процесса разработки.
  • Внедрение обязательной процедуры код ревью до выноса обновлений на тестовые среды.
  • Внедрение непрерывной интеграции для сборки обновлений после код ревью и установки их на тестовые среды.

Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Просмотры 11K
Комментарии 10
1

Информация

Дата основания
Местоположение
Россия
Сайт
www.neoflex.ru
Численность
501–1 000 человек
Дата регистрации