Всем привет!)
Меня зовут Надя, я занимаю должность 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:
Простота: Python является простым и легко читаемым языком, что делает его идеальным выбором для работы с данными, особенно для начинающих. Многие высокоуровневые концепции, такие как функциональное программирование и объектно-ориентированное программирование, также легко изучаются в Python.
Большое сообщество: Python имеет огромное сообщество разработчиков, которые создают и поддерживают различные библиотеки и инструменты для обработки данных. Это значительно упрощает работу с данными и позволяет быстрее находить решения проблем.
Библиотеки: В Python существует множество библиотек для работы с данными, таких как Pandas, NumPy, Scikit-Learn, Matplotlib и многие другие. Они предоставляют готовые решения для различных задач, таких как анализ данных, обработка и визуализация.
Инструменты: 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 для многих целей, таких как:
Хранение и обработка больших объемов данных: Amazon Redshift может обрабатывать терабайты данных и обеспечивает быстрый доступ к данным благодаря колоночной структуре.
PySpark: Amazon Redshift может использоваться с PySpark, что дает возможность выполнять запросы на больших объемах данных, хранящихся в Amazon Redshift, используя распределенные вычисления.
Использование SQL для анализа данных: Amazon Redshift поддерживает SQL, что делает его более доступным для Data Engineer, которые знакомы с SQL-запросами.
Интеграция с другими инструментами: Amazon Redshift интегрируется с другими сервисами AWS, такими как S3 и т.п., что позволяет Data Engineer легко обрабатывать данные из разных источников.
Масштабируемость: Amazon Redshift легко масштабируется в зависимости от объема данных, которые нужно хранить и обрабатывать.
Оптимизация: 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](https://habrastorage.org/getpro/habr/upload_files/48a/332/05b/48a33205bf7c0618c793bceca8ac261e.png)
Если вы заинтересовались 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