Всем привет!)

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

Отмечу, что в каждой компании инструменты могут отличаться, и мой опыт может не совпадать с опытом других Data Engineer'ов. Однако, я постараюсь поделиться информацией, которая может быть полезна не только для профессионалов в этой области, но и для тех, кто только начинает свой путь в Data Engineering. Буду рада, если этот материал поможет вам структурировать и закрепить свои знания.

В этой статье я расскажу о таких инструментах, как:

  • Python

  • PySpark

  • Amazon S3

  • Apache Impala

  • Amazon Redshift

  • Databricks

  • Apache Airflow

  • GitHub, Git

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

Python

Начну с самого базового. Насколько может быть известно, большинство специалистов при работе с данными используют в основном язык программирования такой как Python. Возникает вопрос - почему именно Python? Ответ очень прост, это связано с тем, что Python предоставляет множество инструментов для работы с данными и обработки информации. Вот несколько причин, почему Python так популярен в Data Engineering:

  1. Простота: Python является простым и легко читаемым языком, что делает его идеальным выбором для работы с данными, особенно для начинающих. Многие высокоуровневые концепции, такие как функциональное программирование и объектно-ориентированное программирование, также легко изучаются в Python.

  2. Большое сообщество: Python имеет огромное сообщество разработчиков, которые создают и поддерживают различные библиотеки и инструменты для обработки данных. Это значительно упрощает работу с данными и позволяет быстрее находить решения проблем.

  3. Библиотеки: В Python существует множество библиотек для работы с данными, таких как Pandas, NumPy, Scikit-Learn, Matplotlib и многие другие. Они предоставляют готовые решения для различных задач, таких как анализ данных, обработка и визуализация.

  4. Инструменты: Python также имеет различные инструменты, которые помогают при работе с данными. Например, Jupyter Notebook позволяет создавать интерактивные записные книжки для анализа данных, а PySpark предоставляет возможность распределенной обработки больших объемов данных.

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

  • Шикарна книга, которую могу посоветовать - "Python. К вершинам мастерства", автор - Лучано Рамальо.

  • Если хотите пойти дальше и пощупать паттерны проектирования, то однозначно это книга "Паттерны проектирования", авторы - Эрик Фримен, Элизабет Фримен и др.

PySpark

Python и Spark? Как такое возможно?

А вот и да, в этом мире возможно все. PySpark - это фреймворк для обработки больших объемов данных на Apache Spark, написанный на языке Python. Он широко используется в качестве инструмента для Data Engineering, поскольку позволяет обрабатывать и анализировать данные в реальном времени, работать с данными из разных источников и проводить сложные аналитические вычисления.

С помощью PySpark Data Engineers могут работать с данными из разных источников, таких как Hadoop Distributed File System (HDFS), Amazon S3, Apache Cassandra, Apache HBase и других. Pyspark позволяет объединять данные из разных источников в одном месте, проводить различные трансформации и обработки данных, а также агрегировать данные и проводить аналитические вычисления.

Очень важно, что PySpark позволяет использовать распределенные вычисления для обработки больших объемов данных. Он позволяет работать с данными параллельно на нескольких узлах кластера, что значительно ускоряет обработку больших объемов данных и снижает время выполнения задач.

Amazon S3

Начнем с определения, что же такое Amazon S3 и с чем его едят?

Amazon S3 (Simple Storage Service) – это хранилище объектов в облаке, предоставляемое компанией Amazon Web Services. S3 предоставляет высокую доступность, масштабируемость, надежность и безопасность хранения данных. Он может быть использован для хранения любого типа данных, включая файлы, видео, аудио, изображения, документы и т.д.

В нашей команде для укладки данных в бакет S3 используется следующий процесс - при игре пользователей в мобильные игры, все их действия, такие как нажатия на экран, покупки и другие события, собираются во внешней SDK и отправляются в наш бакет на S3 в виде неструктурированных данных. Этот подход предоставляет нам удобство использования множества инструментов Big Data, таких как Impala, Spark, Hive и других, для получения ценной информации из этих данных.

Нет ничего лучше официальной документации для знакомства с S3 и его настройки.

Apache Impala

Что же мы теперь делаем с дынными, хранящимся в S3?

Для начала, мы можем использовать Apache Hadoop, который позволяет распределенно обрабатывать и анализировать большие объемы данных. Однако, для работы с данными, хранящимися в S3, мы должны использовать дополнительный инструмент - Amazon S3A (S3A - это способ обращения к данным, хранящимся в S3, через Hadoop).

Когда мы устанавливаем связь между Impala и Hadoop, Impala начинает работать как интерактивный SQL-запросовый движок, который может обращаться к данным, хранящимся в бакете S3. Для этого мы используем Hadoop Distributed File System (HDFS) с помощью S3A, который предоставляет драйвер для чтения и записи данных из S3.

Impala - это инструмент для выполнения быстрых SQL-запросов на больших объемах данных, которые хранятся в распределенной файловой системе HDFS. Он является интерактивным SQL-запросовым движком, который позволяет проводить анализ данных в режиме реального времени.

Таким образом, используя Impala и Hadoop вместе с S3A, мы можем получить доступ к большому объему неструктурированных данных, хранящихся в бакете S3, и производить анализ и обработку данных в режиме реального времени.

И всё-таки, чтобы уложить данные из S3 бакета в Impala, сначала необходимо создать таблицу в Impala с указанием местонахождения данных в S3. Для этого можно использовать команду CREATE TABLE с указанием параметров, таких как формат файла, расположение данных в S3 и т.д. Пример команды для создания таблицы в Impala и укладки в нее данных из S3:

CREATE TABLE my_table
STORED AS PARQUET
LOCATION 's3a://my_bucket/path/to/data';

В данном примере мы создаем таблицу с именем my_table, указываем формат хранения данных в Parquet, а также расположение данных в S3 бакете my_bucket по пути path/to/data. После создания таблицы, Impala сможет обращаться к данным в S3 через Hadoop с помощью S3A и проводить операции анализа и обработки данных в режиме реального времени.

Amazon Redshift

Amazon Redshift - это облачное решение для хранения и анализа данных, разработанное Amazon Web Services (AWS). Оно представляет собой мощную колоночную базу данных, которая может обрабатывать большие объемы данных и поддерживает распределенную архитектуру.

Data Engineer-ы могут использовать Amazon Redshift для многих целей, таких как:

  1. Хранение и обработка больших объемов данных: Amazon Redshift может обрабатывать терабайты данных и обеспечивает быстрый доступ к данным благодаря колоночной структуре.

  2. PySpark: Amazon Redshift может использоваться с PySpark, что дает возможность выполнять запросы на больших объемах данных, хранящихся в Amazon Redshift, используя распределенные вычисления.

  3. Использование SQL для анализа данных: Amazon Redshift поддерживает SQL, что делает его более доступным для Data Engineer, которые знакомы с SQL-запросами.

  4. Интеграция с другими инструментами: Amazon Redshift интегрируется с другими сервисами AWS, такими как S3 и т.п., что позволяет Data Engineer легко обрабатывать данные из разных источников.

  5. Масштабируемость: Amazon Redshift легко масштабируется в зависимости от объема данных, которые нужно хранить и обрабатывать.

  6. Оптимизация: Amazon Redshift позволяет производить оптимизацию и анализ данных с помощью функций, таких как автоматическое распределение и сортировка данных, что ускоряет запросы и облегчает анализ больших объемов данных.

Шикарно все написано на этом сайте, есть абсолютно все и даже больше, если хорошо искать.

Databricks

Databricks - это облачная платформа для обработки и анализа данных, которая позволяет работать с большими объемами данных и проводить исследования в режиме реального времени. Она основана на Apache Spark и предоставляет инструменты для работы с данными на Python, R, SQL и Scala.

Одним из преимуществ Databricks является его интеграция с PySpark. Это обеспечивает Data Engineer возможность использовать Python для обработки и анализа данных в Spark.

Перед началом работ в Databricks необходимо понимать, что в нем для выполнения задач по обработке и анализу данных используется Apache Spark, который запускается на кластере. Кластер - это набор вычислительных ресурсов (виртуальных машин), на которых выполняются задачи. Кластер в Databricks может быть настроен под различные требования, например, можно выбрать тип машин, количество вычислительных узлов, объем памяти и т.д.

При работе с кластером в Databricks можно использовать Spark UI - веб-интерфейс, который позволяет отслеживать состояние выполнения задач, мониторить использование ресурсов и производительность кластера. Spark UI также позволяет просматривать подробную информацию о задачах и операциях, выполняемых в рамках кластера.

Для написания и отладки PySpark-кода в Databricks используется окружение notebooks. Notebook - это интерактивный документ, который содержит код, результаты его выполнения, комментарии и графики (аналог уже знакомого jupyer notebook). В Databricks можно использовать как Python, так и SQL-код, а также интегрировать их в одном документе.

Интерфейс Databricks

Если вы заинтересовались Databricks и хотите глубже изучить его возможности, то рекомендуется обратиться к документации платформы.

Apache Airflow

Airflow - это инструмент управления и планирования задач (workflow management tool), который позволяет автоматизировать запуск и мониторинг задач и процессов в распределенных системах.

Data Engineer может использовать Airflow для автоматизации ETL-процессов (извлечение, трансформация и загрузка данных). Например, для ежедневной загрузки данных из различных источников в хранилище данных. С помощью Airflow можно, например:

  • Установить расписание запуска задач

  • Настроить оповещения о состоянии процесса

  • Автоматическое восстановление задач в случае ошибок

  • Определить зависимости между задачи

Airflow имеет графический интерфейс пользователя, который позволяет легко настроить задачи и их зависимости, а также просматривать историю выполнения процесса и состояние каждой задачи.

Конечно, и тут я порекомендую обратиться к официальной документации :)

Git и GitHub

В заключительной части статьи я хотела бы немного поделиться информацией о важности использования Git и GitHub для Data Engineer и других разработчиков.

В нашей команде мы активно используем GitHub для управления и совместной работы над кодом. Это платформа для хранения, управления и совместной работы над исходным кодом.

Мы используем Git, систему контроля версий, для управления изменениями в нашем коде. С помощью Git мы можем сохранять изменения, вносить исправления и возвращаться к предыдущим версиям кода, если что-то идет не так.

Давайте рассмотрим пример, чтобы понять необходимость рассматриваемых инструментов.

Допустим, у нас есть команда Data Engineer, которая работает над проектом по обработке больших данных. Каждый разработчик пишет свой код для обработки данных в отдельных файлах и сохраняет их в локальной папке. Чтобы совместно работать над проектом, они используют систему контроля версий Git и хранят все свои изменения и код в удаленном репозитории на GitHub. Таким образом, когда разработчики хотят работать над определенной частью проекта, они сначала получают последнюю версию кода из репозитория и создают новую ветку для своих изменений. Когда они закончили свою работу, они создают запрос на слияние (pull request) своей ветки с основной веткой проекта, чтобы другие разработчики могли просмотреть их изменения, оставить комментарии и решить, нужно ли объединять изменения в основной код проекта.

На YouTube или уже достала в официальной документации можно найти всю нужную информацию для начала работы или для решения возникших вопросов. На вкус и цвет, как говорится :)


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

Мой ник в telegram: @nadya8ch