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

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

Представьте, что вас наняли специалистом по данным в молодой организации, ориентированной на данные. Ваша задача — разработать модель выявления мошеннических транзакций. Вы планируете применить сложную технику машинного обучения, которую вы оттачивали годами. Однако, покопавшись в данных пару часов, вы понимаете, что они разбросаны по нескольким базам данных. Кроме того, данные хранятся в таблицах, оптимизированных для запуска приложений, а не для проведения анализа. Что еще хуже, некоторые данные были повреждены из-за устаревшего кода. В вашей предыдущей компании вы никогда не сталкивались с такими проблемами, потому что данные были аккуратно организованы и легко доступны. В отчаянии вы находите утешение в приходе дата-инженера.

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

По сути, инженерия данных — это форма разработки программного обеспечения, которая вращается вокруг проектирования, разработки, тестирования и обслуживания таких архитектур, как базы данных и крупномасштабные системы обработки.

Теперь давайте рассмотрим основные навыки и знания, которыми должны обладать инженеры данных.

  • Во-первых, они должны быть знакомы с Linux и уметь пользоваться командной строкой.
  • У них должен быть опыт программирования хотя бы на одном языке, таком как Python, Scala или Java.
  • Знание SQL имеет решающее значение, включая умение писать запросы, извлекать данные и создавать схемы базы данных.
  • Инженеры данных также должны обладать фундаментальным пониманием распределенных систем и их отличий от традиционных систем хранения и обработки.
  • Они требуют глубокого понимания экосистемы, включая прием, обработку фреймворков и механизмы хранения. Для них жизненно важно знать сильные и слабые стороны каждого инструмента и определять их оптимальное применение.
  • Наконец, они должны обладать навыками эффективного доступа к данным и их обработки.

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

Data Engineer vs Data Scientist

Фокус и цели:

  • Инженер данных: создание и обслуживание систем и инфраструктуры данных.
  • Data Scientist: извлечение информации и знаний из данных.

Навыки и опыт:

  • Инженер данных: сильные навыки программирования, работы с базами данных и ETL.
  • Ученый по данным: знание математики, статистики и машинного обучения.

Рабочий процесс и обязанности:

  • Инженер данных: прием данных, интеграция, очистка и обеспечение качества данных.
  • Ученый по данным: исследовательские вопросы, анализ данных, моделирование и обмен мнениями.

Инструменты инженерии данных

Роль Data Engineer включает в себя перемещение, обработку и загрузку данных из различных источников в аналитическую базу данных с использованием специализированных инструментов.

Эти инструменты можно разделить на три категории:

  • Базы данных для хранения. Базы данных содержат большие объемы данных и могут быть основаны на SQL или NoSQL.
  • Средства обработки для манипулирования данными. Среды обработки, такие как Spark, Hive или Kafka, выполняют очистку, агрегирование и объединение данных из разных источников, используя кластеры компьютеров для эффективной обработки.
  • Инструменты планирования для автоматизации. Инструменты планирования, такие как Apache Airflow, обеспечивают своевременное и упорядоченное выполнение задач по перемещению и обработке данных.

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

Базы данных

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

Базы данных могут обрабатывать структурированные, полуструктурированные и неструктурированные данные. Структурированные данные имеют определенную структуру, например табличные данные в реляционных базах данных. Полуструктурированные данные имеют теги или маркеры, но не имеют строгой табличной структуры, как данные JSON. Неструктурированные данные не имеют схемы и напоминают файлы, такие как текст, фотографии или видео. Базы данных SQL используют таблицы и отношения, такие как MySQL и PostgreSQL, в то время как базы данных NoSQL обрабатывают различные типы данных, такие как хранилища ключей и значений (Redis) и базы данных документов (MongoDB).

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

Схема базы данных

Для проектирования и разработки баз данных нам необходимо понимать концепцию схемы базы данных. Схема описывает структуру и отношения между таблицами в базе данных. В простом примере системы заказов в ресторане у нас есть таблицы для клиентов и заказов, связанные внешним ключом, называемым идентификатором клиента. Операторы SQL можно использовать для создания такой схемы, определяя свойства и отношения между таблицами.

Для обработки больших объемов данных из различных источников в аналитических целях компании часто строят хранилища данных. Для этих целей предназначены многомерные схемы, такие как схема звезда. Схема звезда состоит из одной или нескольких таблиц фактов (например, заказов), ссылающихся на таблицы измерений (например, клиент, ресторан, время, блюдо). Таблицы измерений содержат информацию о мире, а таблицы фактов содержат записи, представляющие события.

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

Распределенные вычисления

Для обработки петабайт данных необходимы распределенные или параллельные вычисления. Конвейеры данных включают сбор, объединение, очистку и агрегирование данных из различных источников. Параллельные вычисления имеют решающее значение в мире больших данных из-за ограничений памяти и вычислительной мощности. Инструменты обработки больших данных делят задачи на более мелкие подзадачи и распределяют их между несколькими компьютерами, используя параллельную обработку для более быстрого выполнения общей задачи. Этот подход обеспечивает дополнительную вычислительную мощность и позволяет разбивать данные на разделы, чтобы уменьшить использование памяти и повысить отказоустойчивость.

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

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

Инструменты инженерии данных

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

MapReduce и Hadoop

Hadoop — это широко используемая платформа для систем больших данных. Он состоит из экосистемы инструментов с открытым исходным кодом, поддерживаемых Apache Software Foundation. Hadoop использует алгоритм MapReduce и играет центральную роль в разработке конвейеров ETL (извлечение, преобразование, загрузка).

Два важных проекта в рамках Hadoop — это HDFS, распределенная файловая система, и MapReduce, популярный метод обработки. Однако облачные системы хранения, такие как Amazon S3 или Google Cloud Storage, начали заменять HDFS.

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

Апачский улей

Одной из примечательных программ под эгидой Hadoop является Hive, которая облегчает фазу извлечения конвейера данных ETL. Hive действует как слой поверх экосистемы Hadoop, позволяя выполнять структурированные запросы данных из нескольких источников с использованием своего варианта SQL, Hive SQL. Он предлагает интерфейс, подобный SQL, и интегрируется с различными базами данных и файловыми системами, совместимыми с Hadoop. Раньше разработчикам приходилось реализовывать запросы с помощью сложного Java API MapReduce, прежде чем Hive предоставил более доступное решение. Первоначально MapReduce обрабатывал задания Hive, но теперь он легко интегрируется с несколькими инструментами обработки данных. Запрос Hive напоминает стандартный синтаксис SQL, но за кулисами он трансформируется в задание, использующее алгоритмы MapReduce для работы на кластере компьютеров. Hive поддерживает различные инструменты сбора данных, обеспечивая гибкость интеграции. После завершения извлечения данных мы можем изучить инструменты преобразования данных.

Апач Спарк

Еще один фреймворк для параллельных вычислений, о котором стоит упомянуть, — Spark. Spark распределяет задачи обработки данных по кластерам компьютеров, стремясь свести к минимуму количество операций записи на диск и сохранить большую часть обработки в памяти. Он устраняет ограничения MapReduce, особенно в интерактивном исследовательском анализе данных, где каждый шаг основывается на предыдущем. Spark возник в Калифорнийском университете и в настоящее время поддерживается Apache Software Foundation.

Он основан на устойчивых распределенных наборах данных (RDD), распределенной структуре данных, похожей на список кортежей, которые могут подвергаться преобразованиям и действиям. Преобразования включают в себя такие функции, как фильтр, сопоставление, groupByKey и объединение, в то время как действия дают один результат.

PySpark, интерфейс Python, обычно используется со Spark, предоставляя абстракцию DataFrame, аналогичную DataFrames pandas. Spark разработан для повышения производительности и может быть значительно быстрее, чем Hadoop, для крупномасштабной обработки данных. Закончив фазу преобразования, пришло время изучить автоматизацию конвейера ETL.

Воздушный поток Apache

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

Вы можете создать задание Spark, которое извлекает данные из CSV-файла, отфильтровывает поврежденные записи и загружает очищенные данные в базу данных SQL для анализа. Однако, если это задание необходимо выполнять ежедневно, запуск его каждый раз вручную не будет масштабируемым.

В таких случаях эту проблему могут решить простые инструменты, такие как cron, инструмент Linux. Но допустим, у вас есть несколько заданий: одно для обработки CSV-файла, другое для очистки данных из API и третье для объединения данных из обоих источников. Третье задание зависит от успешного завершения первых двух заданий. Становится очевидным, что необходим более комплексный подход, а базового инструмента, такого как cron, недостаточно. Именно здесь вступают в игру структуры планирования рабочих процессов, поскольку они организуют эти взаимосвязанные задания.

Зависимости между заданиями можно эффективно визуализировать с помощью направленных ациклических графов (DAG). DAG состоит из узлов, соединенных направленными ребрами, без циклов в графе. Это означает, что ни один путь, следующий по направленным ребрам, не встречает узел более одного раза.

Хотя Linux cron — это простое решение, которое используют многие компании, для управления всеми этими зависимостями требуется более комплексный инструмент. Airflow стал де-факто структурой планирования рабочего процесса. Первоначально разработанный Airbnb для внутреннего управления рабочими процессами, Airflow был открыт в 2015 году, а затем присоединился к Apache Software Foundation в 2016 году. Airflow вращается вокруг концепции DAG, позволяя разработчикам создавать и тестировать эти DAG с помощью Python, тем самым создавая сложные конвейеры данных. .

ETL-конвейеры

Вот пример выполнения ETL с использованием Apache Spark и Apache Airflow для рабочего процесса в Python:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from pyspark.sql import SparkSession

# Define the ETL function
def etl_job():
    # Create a SparkSession
    spark = SparkSession.builder \
        .appName("ETL Example") \
        .getOrCreate()

    # Extract data from a CSV file
    raw_data = spark.read.csv("input.csv", header=True, inferSchema=True)

    # Transform the data
    transformed_data = raw_data.filter("age >= 18").select("name", "age")

    # Load the transformed data into a database
    transformed_data.write \
        .format("jdbc") \
        .option("url", "jdbc:postgresql://localhost:5432/mydatabase") \
        .option("dbtable", "mytable") \
        .option("user", "myuser") \
        .option("password", "mypassword") \
        .mode("append") \
        .save()

    # Stop the SparkSession
    spark.stop()

# Define the DAG (workflow)
dag = DAG(
    dag_id="etl_workflow",
    start_date=datetime(2023, 5, 7),
    schedule_interval="0 * * * *",  # Run every hour
    catchup=False
)

# Define the ETL task
etl_task = PythonOperator(
    task_id="run_etl_job",
    python_callable=etl_job,
    dag=dag
)

# Set task dependencies
etl_task

В этом примере мы начинаем с создания SparkSession, который является точкой входа для использования функций Spark. Затем мы извлекаем данные из CSV-файла, используя spark.read.csv(), указывая путь к файлу, наличие заголовка у файла и вывод схемы.

Затем мы выполняем преобразование данных, фильтруя данные и выбирая определенные столбцы с помощью Spark DataFrame API. В этом случае мы отфильтровываем записи, где возраст меньше 18 лет, и выбираем только столбцы «имя» и «возраст».

Наконец, мы загружаем преобразованные данные в базу данных PostgreSQL, используя API JDBC (Java Database Connectivity). Мы указываем URL-адрес JDBC, имя таблицы, учетные данные и режим сохранения (в данном случае «добавьте», чтобы добавить данные в существующую таблицу). Затем данные записываются в базу данных с использованием метода save().

В этом примере мы определяем DAG (рабочий процесс) с идентификатором «etl_workflow». Запуск группы обеспечения доступности баз данных запланирован на 7 мая 2023 г., а для параметра schedule_interval задано значение "0 * * * *" для запуска задания ETL каждый час.

Краткое содержание

мы обсудили несколько важных инструментов и фреймворков в области инженерии данных. Мы начали с изучения Apache Hadoop — распределенной вычислительной платформы, предназначенной для обработки и хранения больших данных. Hadoop предоставляет масштабируемую и отказоустойчивую платформу, которая позволяет обрабатывать большие наборы данных в кластерах компьютеров.

Затем мы рассмотрели Apache Hive, хранилище данных и SQL-подобный механизм запросов, построенный на основе Hadoop. Hive позволяет пользователям писать SQL-подобные запросы для анализа и обработки данных, хранящихся в распределенной файловой системе Hadoop (HDFS). Он обеспечивает абстракцию высокого уровня, которая упрощает запросы данных и позволяет эффективно обрабатывать данные в масштабе.

Затем мы перешли к Apache Spark, мощному и быстрому механизму обработки данных с открытым исходным кодом. Spark предлагает возможности обработки в памяти, что позволяет ему обрабатывать большие наборы данных и эффективно выполнять сложные вычисления. Spark предоставляет различные API, включая Scala, Python и Java, и поддерживает широкий спектр задач обработки данных, таких как пакетная обработка, потоковая передача в реальном времени, машинное обучение и обработка графов.

Наконец, мы обсудили Apache Airflow, платформу для программного создания, планирования и мониторинга рабочих процессов. Airflow позволяет инженерам данных создавать сложные конвейеры данных, определяя задачи и их зависимости в виде направленных ациклических графов (DAG). Он предоставляет богатый набор операторов и интеграций, упрощая организацию и управление рабочими процессами данных в различных системах и службах.

Эти инструменты широко используются в экосистеме обработки данных и предлагают ценные возможности для обработки, анализа и управления крупномасштабными данными. Приобретая знания и опыт работы с такими инструментами, как Hadoop, Hive, Spark и Airflow, инженеры данных могут эффективно решать задачи работы с большими данными и создавать надежные конвейеры обработки данных.

Рекомендации

Apache Hadoop: https://hadoop.apache.org/
Apache Hive: https://hive.apache.org/
Apache Spark: https://spark.apache. org/
Apache Airflow: https://airflow.apache.org/