Школа Больших Данных
566 subscribers
117 photos
711 links
Канал Школы Больших Данных https://www.bigdataschool.ru/ - обучение технологиям Big Data: разработка приложений и администрирование кластеров Hadoop, Kafka, Spark, NoSQL, Python, ML и DS.
Тел: +7 (495) 41-41-121
Контакты: @Bigdataschool_msk @olga_burykh
Download Telegram
#AirFlow #ETL #статьи
✳️7 полезных практик работы с Apache AirFlow для дата-инженера

Эти рекомендации помогут дата-инженеру более эффективно эксплуатировать Apache AirFlow при проектировании конвейеров обработки данных:
использование словаря defaultargs позволяет указать аргументы по умолчанию для DAG, включая дату начала и частоту запуска, чтобы избежать жесткого кодирования этих значений и упростить их изменение в будущем
шаблонизация DAG может сделать их разработку более гибкой, позволяя избежать повторного написания одинакового кода
встроенные операторы AirFlow отлично подходят для выполнения общих задач, таких как выполнение SQL-запроса или передача данных между системами. Это позволяет избежать написания пользовательского кода и сделать DAG более удобными в сопровождении
функции ветвления и запуска AirFlow упрощают создание сложных рабочих процессов, позволяя создавать DAG с несколькими ветвями и зависимостями без усложнения управления этим конвейером
встроенная интеграция AirFlow с Git помогает отслеживать изменения в DAG и реализует совместную работу дата-инженеров в разных командах
встроенные функции ведения журналов и мониторинга AirFlow пригодятся, чтобы отслеживать DAG, устранять возникающие проблемы с конвейером обработки данных и быстро их исправлять.
Отдельно стоит сказать про некоторые операторы AirFlow, которые также пригодятся дата-инженеру.
Это рассмотрим далее.

@BigDataSchool_ru
https://www.bigdataschool.ru/blog/best-practices-for-dag-design-and-airflow-operators.html
#DataScience #NoSQL #SQL #статьи
5 популярных языков запросов к графам.
❇️GraphQL очень гибкий и экономичный с точки зрения сетевой передачи. Он поддерживается многими языками программирования (JavaScript, Java, Python, Ruby и PHP), позволяет настраивать структуру передаваемых и принимаемых данных, а также включать поля из нескольких ресурсов в один запрос. Однако, он не очень прост в реализации, имеет статичную схему данных, не поддерживает кэширование на клиенте и загрузку файлов. GraphQL работает только с JSON-форматом. Этот язык запросов подходит для приложений с большим количеством клиентов и/или источников данных, когда нужно унифицировать выполнение запросов, снизить число конечных точек и нагрузку на сеть.
❇️Gremlin — это язык обхода графов Apache TinkerPop, принятый во многих графовых базах данных. В свою очередь, Apache TinkerPop — это среда вычислений на основе графов для транзакционных и аналитических графовых СУБД. Gremlin — это функциональный язык потока данных, который позволяет пользователям лаконично выражать сложные обходы (или запросы) графа свойств своего приложения. Разработчики могут писать запросы Gremlin на любом языке программирования, который поддерживает композицию функций и вложенность функций, например, Python, Java, Javascript, Scala и Groovy, чтобы выполнить императивные (процедурные) и декларативные (описательные) обходы в графе. Однако, это достаточно низкоуровневый язык обхода графа, который не очень легко читать.
❇️Cypher — это язык запросов популярной графовой базы данных Neo4j, который немного похож на SQL. Однако, он основан на шаблонах и предоставляет визуальный способ сопоставления отношений и шаблонов. Cypher позволяет использовать средства отображения графов объектов (OGM) для сопоставления отношений и узлов в графах со ссылками и объектами в модели предметной области. OGM, встроенный в Neo4j, использует операторы запроса Cypher вместе с драйвером Java и сопоставляет существующие объекты домена с объектами этой графовой СУБД (узлами и ребрами графа). Neo4j-OGM поддерживает быстрое сканирование метаданных класса и оптимизированное управление загрузкой данных.
❇️SPARQL (SPARQL Protocol and RDF Query Language) — это язык запросов, который позволяет пользователям запрашивать информацию из баз данных, которые могут быть сопоставлены с RDF (Resource Description Framework). SPARQL немного похож на стандартный SQL, но данные в запросе SPARQL внутренне выражаются в виде троек из субъекта, предиката и объекта. SPARQL может объединять запросы из разных репозиториев, обращаясь как RDF, так и к реляционным СУБД, а также интегрировать данные в пересекающихся доменах. Однако, SPARQL нелегко читать и понимать.
❇️AQL (ArangoDB Query Language) — это язык запросов для извлечения и изменения данных, хранящихся в ArangoDB — мультимодельной БД, поддерживающей графовую и документную модели, а также ключ-значение. AQL поддерживает различные функции, такие как ANALYZER(), BOOST(), EXISTS() и пр., позволяющие выполнять сложные вычисления. Он помогает разработчикам разрабатывать надежные приложения и напрямую отображать данные в базу данных. Это достаточно гибкий язык, который упрощает масштабирование и адаптацию архитектуры ИС к изменениям.

Более подробно: что общего у GraphQL, Gremlin, Cypher, SPARQL и AOL, а также чем они отличаются.
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/graph-languages-overview.html
#Jupyter #Python @BigDataSchool_ru
Тест по основам Python для новичков.
🍒Сколько раз можно дублировать один и тот же элемент в множестве?
Anonymous Quiz
0%
от 3 и более раз
4%
ровно 2 раза
65%
дублирование невозможно
31%
сколько угодно
#BigData #Greenplum #PostgreSQL #статьи
🧑🏻‍💻Управление разделами в Greenplum и PostgreSQL

Основными дополнениями в Greenplum 7 являются следующие новые DDL-команды для разделов, как в PostgreSQL:
☑️CREATE TABLE PARTITION OF — для создания новой таблицы и добавления ее в качестве нового дочернего раздела
☑️ALTER TABLE ATTACH PARTITION – для добавления существующей таблицы в качестве нового дочернего раздела
☑️ALTER TABLE DETACH PARTITION – для удаления таблицы из иерархии партиционирования без удаления самой таблицы.

Далее разберем другие изменения в Greenplum 7
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/greenplum-7-new-ddl-for-partitions.html
#DataScience #DevOps #ML #статьи
🪤Скрытый технический долг в ML-системах.

Технический долг - дополнительные затраты, возникающие в долгосрочной перспективе, с которыми сталкивается команда, в результате выбора простых и быстрых вариантов вместо принятия решений, более правильных в долгосрочной перспективе.
Для систем Machine Learning технический долг существует на системном уровне, а не на уровне кода. Поэтому традиционного подхода к техническому долгу, как и в разработке ПО, недостаточно для его устранения: нужны подходы, специфичные для ML.
Технический долг растет при использовании данных не по назначению, что в классической разработке ПО решается ограничением видимости. В Machine Learning также помогает предоставление доступа к данным и моделям только определенным пользователям и командам, а также тщательное управление этими разрешениями.

Далее читайте подробно про техдолг в проектах Machine Learning.
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/mlops-to-eliminate-technical-debt-in-ml-projects.html
#ApacheSpark #bestpractice @BigDataSchool_ru
Тест по Spark.
🗳️Какие файлы используются для Maven-сборки приложений?
Anonymous Quiz
0%
CONF
33%
MVN
5%
XBT
62%
POM
#bestpractice #Python #статья
🧸Оптимизация в машинном обучении

Основным принципом работы методов машинного обучения является построение модели, которая может автоматически обучаться на основе предоставленных данных и в последующем делать прогнозы на основе этого обучения.
Неотъемлемым компонентом цикла жизни модели является её обучение, а значит оптимизация её параметров.
Каждая модель имеет свою уникальную логику работы и принятия решения, но процесс обучения моделей машинного обучения можно свести к трем основным блокам.

✔️Первый это непосредственно модель, её логика по которой она будет принимать решение и параметры модели которые нам нужно подобрать так, чтобы модель качественно описывала выборку. Далее я буду называть это телом модели.
✔️Второй блок это непосредственно метрика по которой мы оцениваем модель – функция потерь.
✔️Третий
блок это алгоритм подбирающий параметры тела модели опираясь на функцию потерь, оптимизатор.
Тело модели является функцией, которая определяет взаимосвязь между входными данными и выходными данными. Оно может быть линейным или нелинейным, и его сложность зависит от сложности задачи, которую необходимо решить.
Функция потерь используется для оценки качества модели. Она показывает, насколько точно модель предсказывает выходные данные на основе входных данных. Чем меньше значение функции потерь, тем лучше модель подходит для данных. При обучении модели следует с умом подходить к её выбору.
Оптимизатор — это алгоритм, который используется для минимизации функции потерь. Он определяет, какие изменения необходимо внести в тело модели, чтобы уменьшить значение функции потерь. Различные оптимизаторы имеют различные свойства и могут быть использованы в зависимости от сложности модели и задачи. В данном случае автор имеет ввиду под оптимизатором любой алгоритм поиска минимума функции ошибки, даже если подбор осуществляется аналитически.
В целом, эти три элемента — тело модели, функция потерь и оптимизатор — являются ключевыми компонентами в работе методов машинного обучения. Они взаимодействуют друг с другом, чтобы позволить модели автоматически обучаться и делать прогнозы на основе предоставленных данных.

Для понимания выше описанной концепции, реализуем обучение простейшей модели линейной регрессии, используя алгоритм стохастического градиентного спуска.
@BigDataSchool_ru
https://python-school.ru/blog/optimization-ml/
#bigdata #hbase #обработкаданных #статьи
🔥Горячие точки в Apache HBase и 7 способов их устранения

Apache HBase представляет собой колоночно-ориентированное мультиверсионное хранилище типа key-value поверх HDFS и обеспечивает возможности Google BigTable для Hadoop.
Как и другие NoSQL-базы, HBase использует интересные проектные решения относительно хранения данных.
Данные в HBase хранятся в таблицах, проиндексированных первичным ключом (RowKey), для каждого из которых может иметься неограниченный набор атрибутов (колонок).

При создании таблицы записей следует учитывать аспекты, которые влияют на производительность HBase:

✔️Количество регионов на таблицу записей, т.е. диапазона записей, соответствующих определенному диапазону первичных ключей, идущих подряд друг за другом
✔️Дизайн ключа строки, т.е. как создается уникальный идентификатор (UUID)
✔️Количество групп колонок
✔️Разделение
✔️Долговечность

Некорректная настройка какого-либо из этих элементов снизит производительность загрузки данных. Также могут возникнуть горячие точки (hotspotting), когда только один из узлов кластера загружен (высокая загрузка ЦП), а остальные простаивают.

Горячие точки в HBase случаются из-за архитектурных особенностей хранения данных в этой NoSQL-СУБД, т.е. неправильного дизайна ключа строки.
Строки в HBase сортируются лексикографически по ключу строки. Этот дизайн оптимизирован для сканирования, позволяя хранить связанные строки или строки, которые будут считываться вместе. Поэтому плохо спроектированные ключи строк приводят к возникновению горячих точек.
Чтобы избежать этого, следует спроектировать ключ строки так, чтобы данные равномерно распределялись по всем регионам на всех узлах кластера HBase. При этом ключи строк надо определить так, чтобы строки, которые действительно должны находиться в одном и том же регионе, находились в одном регионе, но в целом данные записывались в несколько регионов кластера.

Как это сделать, рассмотрим далее - «7 способов предотвратить hotspotting»
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/what-is-hbase-hotspotting-and-how-to-avoid-it-7-ways.html
#ApacheSpark #bestpractice @BigDataSchool_ru
Тест по Spark.
🧮Какой язык служит основой для внутренних вычислений в Spark SQL?
Anonymous Quiz
36%
диалект HiveQL
8%
язык не имеет значения
31%
Java
26%
SQL
#Spark #BigData #статьи
♨️Какие форматы файлов наиболее популярны при обработке данных в Spark.

Фреймворк Spark может работать с данными, которые загружаются из различных файлов. Для доступа к данным Spark использует интерфейсы InputFormat и OutputFormat, которые поддерживают множество форматов файлов (CSV, JSON, XLS, TXT и т.д) и систем хранения данных (например, HDFS, S3, Cassandra, HBase).
Сегодня поговорим о следующих наиболее известных форматах файлов в Spark:
текстовый формат – это файлы, содержимое которых воспринимается как набор строк с текстовыми значениями. Когда текстовый файл используется как источник данных, Spark интерпретирует каждую его строку как отдельный элемент набора RDD. RDD (Resilient Distributed Dataset) – это неизменяемая коллекция объектов данных. Каждый такой набор делится на определенное количество частей, которые обрабатываются различными узлами в кластере.
CSV-формат – (Comma-Separated Values – данные, разделенные запятой) – это данные, которые представляют собой набор значений, разделенных специальным разделителем (как правило, запятой). Такие файлы содержат фиксированное число полей в каждой строке. Таким образом CSV-файл можно представить в виде таблицы с данными. Этот тип файлов можно загружать в виде текста, как рассматривалось выше, а можно в виде датафрейма. Датафрейм (dataframe) – это двумерная маркированная структура данных. Визуально она представляет собой таблицу, состоящую из фиксированного числа строк и столбцов. Датафрейм служит для быстрой и удобной работы с большими данными.

Читайте далее про собенности работы с файлами в Spark на практических примерах
@BigDataSchool_ru
https://spark-school.ru/blogs/spark-files-processing/
#kafka #DataScience #статьи
🌊Как работают события и их потоки в брокере Kafka

Событие в Kafka — это факт, описывающий изменение состояния объекта (например, заполнение топика сообщениями или разбиение топика на разделы).
Kafka узнает о новом событии благодаря механизму регистрации событий. Регистрация событий — это считывание текущего состояния объекта и сравнение этого состояния с более ранним. В случае, если текущее состояние объекта отличается от предыдущего, брокер Kafka автоматически регистрирует новое событие, а также создает поток событий, в который помещаются все события зарегистрированные в данный момент времени.
Поток событий (event stream) представляет собой коллекцию (множество) событий, которые происходят одновременно в данный момент времени.

Далее разберем на практических примерах особенности работы потоков событий.
@BigDataSchool_ru
https://kafka-school.ru/blogs/kafka-events/
#ApacheSpark #bestpractice @BigDataSchool_ru
Тест по Spark.
🍩Что является основной абстракцией для Spark SQL?
Anonymous Quiz
42%
набор RDD
0%
отсортированный список
0%
серия датафрейма
58%
датафрейм
#DataScience #DevOps #MachineLearning
📜GraphQL для ML: возможности и примеры
GraphQL - язык запросов для API, который позволяет клиенту запрашивать только нужные данные, в отличие от традиционных REST API, которые возвращают весь набор данных ресурса, связанный с конечной точкой.
Эта технология снижает нагрузку на сеть, позволяя реализовать сложные аналитические вычисления в рамках одного запроса. Применяя GraphQL к системам машинного обучения, можно управлять ML-моделями и отслеживать их производительность с помощью единого API.
Наконец, с точки зрения производственного использования проектов Machine Learning, GraphQL позволяет экономно в плане трафика обновлять ML-модели в режиме реального времени, что крайне важно для приложений машинного обучения, которые необходимо постоянно переобучать и обновлять.
Если ML-модель должна обрабатывать много данных и различные параметры фильтрации, с потенциалом будущего развития системы машинного обучения, GraphQL будет отличным выбором.
Для примитивных CRUD-операций подойдет классический REST API, который реализует манипулирование ресурсами через основные HTTP-запросы (GET, POST, PUT, DELETE).
К примеру, используя GraphQL, разработчики могут создавать API, который позволяет пользователям гибко и эффективно взаимодействовать с ML-моделями обработки естественного языка (NLP). Предположим, NLP-приложение для понимания запросов клиентов и ответа на них. С GraphQL это приложение может запросить ML-модель, чтобы понять намерение клиента и предоставить соответствующий ответ в режиме реального времени и без дополнительных сетевых запросов.
Также GraphQL можно использовать для распознавания изображений, создав API, который позволяет пользователям запрашивать ML-модель и получать информацию об объектах или сценах на картинке.
К примеру, для идентификации растений или грибов в лесу. Еще GraphQL подойдет для создания унифицированного аналитического API, который позволит всем заинтересованным сторонам использовать единый источник доступа к согласованным данным, но несвязанным между собой семантически. Это соответствует ключевым идеям концепции непрерывного управления и сопровождения ML-систем под названием MLOps. 
Таким образом, GraphQL может быть мощным инструментом для создания и управления моделями машинного обучения с широким спектром сценариев практического использования.
Как применить его для разработки API проекта машинного обучения, рассмотрим далее.
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/graphql-api-in-ml-projects.html
#machinelearning #numpy #статьи
📈Линейная регрессия — это метод машинного с учителем, который используется для предсказания непрерывной целевой переменной от одного или нескольких независимых признаков.
В основе метода - предположение, предполагает о том, что существует линейная связь между признаками и целевой переменной. Эта связь моделируется с помощью линейной функции. Модель линейной регрессии пытается найти лучшую прямую, которая может описывать зависимость между независимыми признаками и зависимой переменной. Это делается с помощью поиска оптимальных коэффициентов, которые могут быть использованы для описания линейной функции. Эта модель может быть использована как для предсказания, так и для анализа влияния признаков на целевую переменную.
Линейная регрессия может использоваться для решения различных задач.
Примерами успешного применения этого метода могут служить такие задачи как: прогнозирование продаж, прогнозирование цены на недвижимость, анализ влияния факторов на уровень заболеваемости и т.д. Однако, она не эффективна для решения задач, где не существует линейной связи между признаками и целевой переменной.
Основная идея подбора коэффициентов в линейной регрессии — нахождение лучшей прямой, которая может описать зависимость между зависимой и целевой переменной.
Формула линейной регрессии может быть записана следующим образом:
y = β0 + β1×1 + β2×2 + … + βnxn
где y — предсказываемая зависимая переменная, x1, x2, …, xn — независимые переменные, β0, β1, β2, …, βn — коэффициенты регрессии.
Цель — найти оптимальные значения коэффициентов β0, β1, β2, …, βn, которые минимизируют сумму квадратов ошибок.
Это может быть сделано с помощью методов оптимизации, к примеру таких как градиентный спуск или метод наименьших квадратов.
Далее рассмотрим именно второй метод.
@BigDataSchool_ru
https://python-school.ru/blog/linearregression-ols/
#ApacheSpark #bestpractice @BigDataSchool_ru
Тест по Spark.
♻️Что отвечает за соединение Spark и реляционной СУБД?
Anonymous Quiz
0%
ядро Spark
54%
RDBMS-драйвер
32%
Spark-драйвер
14%
исполнитель Spark
#ApacheKafka #DataScience #статьи
〽️Для чего нужны потоки в Kafka и как они работают
Потоки в Kafka — это неизменяемые коллекции данных, которые предназначены для добавления данных в топики Kafka. Kafka-потоки также являются потоками фактов, где каждый факт представляет собой уникальное и неизменяемое событие (event). Данные потоков хранятся в виде структуры ключ-значение (key-value).
Создавать Kafka-потоки можно двумя способами:
1️⃣с помощью библиотеки Kafka Streams
2️⃣с помощью платформы KSQL.

Каждый из этих способов мы подробно рассмотрим далее на практических примерах.
@BigDataSchool_ru
https://kafka-school.ru/blogs/kafka-streams-building/
#bigdata #spark #статьи
Что такое Gluten и как он появился в Apache Spark
Когда данных много, их обработка может длиться долго. Чтобы ускорить вычисления с Big Data, разработчики распределенных приложений и дата-инженеры применяют различные приемы оптимизации настроек инфраструктуры, исходного кода и самих данных.
Для Apache Spark, который считается самым популярным вычислительным движком аналитики больших данных, в 2022 году был представлен очередной инструмент повышения скорости выполнения SQL-запросов под названием Gluten.
Этот проект с открытым исходным кодом от компаний Intel и Kyligence заменяет Gazelle – SQL-механизм на основе Apache Arrow. В 2021 году Intel выпустил Gazelle, чтобы раскрыть возможности своей технологии Intel Advanced Vector Extensions (Intel AVX) с использованием SIMD-инструкций в векторизованном механизме SQL, которая позволяет Apache Spark преодолеть ограничения обработки данных на основе строк и JVM.
Spark SQL отлично работает со структурированными строковыми данными, используя WholeStageCodeGen для повышения производительности кода Java JIT. Но Java JIT имеет не очень высокую производительность при использовании SIMD-инструкций, особенно при сложных запросах. Кросс-платформенное табличное представление данных в памяти  Apache Arrow обеспечивает удобный для ЦП колоночный макет данных, оптимизированный для SIMD, а также включает эффективный SQL-движок на основе LLVM Gandiva. Плагин Gazelle повторно реализует уровень выполнения Spark SQL с обработкой колоночных данных, повышая его производительность.
Несмотря на статус открытого кода и регулярные обновления в Github-репозитории, основным недостатком Gazelle было ограниченное участие сообщества. Поэтому компания Intel решила объединить свои усилия с другими векторизованными SQL-движками, которые активно развиваются с корпоративной поддержкой  и пользуются спросом у энтузиастов профессионального сообщества. Например, Velox и движок Clickhouse, разработанный Kyligence.
Gluten в переводе с латыни означает клей, иллюстрируя идею кооперации нескольких векторизованных SQL-движков для их использования с Apache Spark. Такая интеграция делает возможным перенос функций и операторов в векторизованную библиотеку, внедрение механизмов компиляции «точно в срок» и использование аппаратных ускорителей, например, GPU и FPGA.

Как устроен этот движок, рассмотрим далее.
@BigDataSchool_ru
https://www.bigdataschool.ru/blog/what-is-gluten-for-spark-sql.html
#ApacheSpark #bestpractice @BigDataSchool_ru
Тест по Spark.
Какой коннектор используется для соединения Spark с реляционными СУБД?
Anonymous Quiz
6%
BDE
91%
JDBC
3%
ODBC
0%
RIS
#ApacheKafka #DataScience #статьи
Какие элементы отвечают за извлечение сообщений в Kafka

Извлечение сообщений в Kafka — это процесс получения содержимого опубликованных продюсером сообщений в заданном топике.
За получение сообщений отвечает продюсер, однако за сам процесс извлечения отвечают такие элементы, как:
⭕️смещение (offset) — это порядковый номер записи (индекс), который указывается для получения конкретной записи в данный момент времени независимо от того, когда она была создана. Заданные пользователем смещения позволяют переходить к конкретной записи минуя все остальные. Брокер Kafka устроен таким образом, что каждой записи при создании присваивается порядковый номер, на который указывает курсор (метка, которая перемещается при обращении или создании записи). Как только пользователь обращается к конкретной записи, указывая соответствующий индекс, курсор перемещается в данном направлении и фиксируется на заданном элементе (записи);
⭕️цикл опроса — это механизм, представляющий собой бесконечный цикл (цикл, выполнение которого не завершится до тех пор, пока не произойдет полная остановка программы), который осуществляет координацию (распределение подписчиков по топикам) и перебалансировку разделов (передачу раздела от неактивного подписчика активному), а также отвечает за извлечение данных из топиков.

Далее разберем извлечение сообщений в Kafka в нескольких практических примерах.
@BigDataSchool_ru
https://kafka-school.ru/blogs/kafka-message-polling/