• Термин большие данные (Big Data) появился в начале 2000-х, когда глобальные IT-корпорации, в частности, Google, уже накопили данные такого объема, что с ними невозможно стало справляться традиционными методами.

    А метод на тот момент был следующий — вертикальное масштабирование:

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

    В ответ на это и на необходимость как-то хранить и обрабатывать терабайты и петабайты данных глобальной сети Интернет в 2000-м году корпорация Google разработала Google File System, которая работала по принципам горизонтального масштабирования. При необходимости обработки бОльшего объема данных в вычислительный кластер просто добавлялись дополнительные компьютеры (ноды). Сама технология позволяла работать с кластерами недорогих и не особо надежных машин, тем не менее, добиваясь высокой надежности хранения и производительности обработки данных. На основе этой архитектуры в 2005-м году компанией Yahoo был разработан фреймворк с открытым исходным кодом Hadoop.

    1


    Термин большие данные (Big Data) появился в начале 2000-х, когда глобальные IT-корпорации, в частности, Google, уже накопили данные такого объема, что с ними невозможно стало справляться традиционными методами.

    А метод на тот момент был следующий — вертикальное масштабирование:

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

    В ответ на это и на необходимость как-то хранить и обрабатывать терабайты и петабайты данных глобальной сети Интернет в 2000-м году корпорация Google разработала Google File System, которая работала по принципам горизонтального масштабирования. При необходимости обработки бОльшего объема данных в вычислительный кластер просто добавлялись дополнительные компьютеры (ноды). Сама технология позволяла работать с кластерами недорогих и не особо надежных машин, тем не менее, добиваясь высокой надежности хранения и производительности обработки данных. На основе этой архитектуры в 2005-м году компанией Yahoo был разработан фреймворк с открытым исходным кодом Hadoop.

    1


    Бесплатный

  • Что такое Airflow

    Согласно ИИ обзору от Google, Apache Arflow — самый популярный на сегодняшний день оркестратор данных. Как и другие оркестраторы, он выполняет задачи автоматизации запуска задач, пайплайнов (запуск по расписанию, запуск по событию). Управляет зависимостями между задачами. Позволяет удобно мониторить статус выполнения задач.

    Отмечу, что в целом область применения оркестратора не ограничивается Дата Инжинирингом. Благодаря расширяемости и 500 существующим операторам Airflow способен отослать email в день рождения, отправить сообщение в Slack или управлять рекламной компанией Google.

    Что такое оператор

    Оператор — минимальный компонент Airflow. Из совокупности операторов и настроенных зависимостей между ними строится flow (DAG).

    Например:


    Что такое Airflow

    Согласно ИИ обзору от Google, Apache Arflow — самый популярный на сегодняшний день оркестратор данных. Как и другие оркестраторы, он выполняет задачи автоматизации запуска задач, пайплайнов (запуск по расписанию, запуск по событию). Управляет зависимостями между задачами. Позволяет удобно мониторить статус выполнения задач.

    Отмечу, что в целом область применения оркестратора не ограничивается Дата Инжинирингом. Благодаря расширяемости и 500 существующим операторам Airflow способен отослать email в день рождения, отправить сообщение в Slack или управлять рекламной компанией Google.

    Что такое оператор

    Оператор — минимальный компонент Airflow. Из совокупности операторов и настроенных зависимостей между ними строится flow (DAG).

    Например:

    Бесплатный

  • Компания Databricks (разработчик фреймворка Spark) передала в публичное пользование часть обкатанного в ее облачном сервисе решения Lakeflow Spark Declarative Pipelines, а именно, сам движок решения.


    О чем речь?


    Речь идет о внедрении возможности декларативного описания пайплайна (переход от концепции «как делать» к «что делать»). Пример на Python:

    from pyspark import pipelines as dp
    from pyspark.sql.functions import *
    from pyspark.sql.types import DoubleType, IntegerType, StringType, StructType, \
       StructField
    
    # Путь к данным
    file_path = f"/databricks-datasets/songs/data-001/"
    
    # Определение streaming table для забора данных
    schema = StructType(
     [
      StructField("artist_id", StringType(), True),
      StructField("artist_lat", DoubleType(), True),
      StructField("artist_long", DoubleType(), True),
      StructField("artist_location", StringType(), True),
      StructField("artist_name", StringType(), True),
      StructField("duration", DoubleType(), True),
      StructField("end_of_fade_in", DoubleType(), True),
      StructField("key", IntegerType(), True),
      StructField("key_confidence", DoubleType(), True),
      StructField("loudness", DoubleType(), True),
      StructField("release", StringType(), True),
      StructField("song_hotnes", DoubleType(), True),
      StructField("song_id", StringType(), True),
      StructField("start_of_fade_out", DoubleType(), True),
      StructField("tempo", DoubleType(), True),
      StructField("time_signature", DoubleType(), True),
      StructField("time_signature_confidence", DoubleType(), True),
      StructField("title", StringType(), True),
      StructField("year", IntegerType(), True),
      StructField("partial_sequence", IntegerType(), True)
     ]
    )
    
    @dp.table(
     comment="Raw songs data"
    )
    def songs_raw():
     return (spark.readStream
      .format("cloudFiles")
      .schema(schema)
      .option("cloudFiles.format", "csv")
      .option("sep","\t")
      .load(file_path))
    
    # Описываем materialized view для валидации данных и переименования колонки
    @dp.materialized_view(
     comment="Million Song Dataset with data cleaned and prepared for analysis"
    )
    def songs_prepared():
     return (
      spark.read.table("songs_raw")
       .withColumnRenamed("title", "song_title")
       .select("artist_id", "artist_name", "duration", "release", "tempo", "time_signature", "song_title", "year")
     )
    
    # Описываем materialized view для фильтрации, агрегации, сортировки данных
    @dp.materialized_view(
     comment="A table summarizing counts of songs released by the artists who released the most songs each year."
    )
    def top_artists_by_year():
     return (
      spark.read.table("songs_prepared")
       .filter(expr("year > 0"))
       .groupBy("artist_name", "year")
       .count().withColumnRenamed("count", "total_number_of_songs")
       .sort(desc("total_number_of_songs"), desc("year"))
     )
    


    Компания Databricks (разработчик фреймворка Spark) передала в публичное пользование часть обкатанного в ее облачном сервисе решения Lakeflow Spark Declarative Pipelines, а именно, сам движок решения.


    О чем речь?


    Речь идет о внедрении возможности декларативного описания пайплайна (переход от концепции «как делать» к «что делать»). Пример на Python:

    from pyspark import pipelines as dp
    from pyspark.sql.functions import *
    from pyspark.sql.types import DoubleType, IntegerType, StringType, StructType, \
       StructField
    
    # Путь к данным
    file_path = f"/databricks-datasets/songs/data-001/"
    
    # Определение streaming table для забора данных
    schema = StructType(
     [
      StructField("artist_id", StringType(), True),
      StructField("artist_lat", DoubleType(), True),
      StructField("artist_long", DoubleType(), True),
      StructField("artist_location", StringType(), True),
      StructField("artist_name", StringType(), True),
      StructField("duration", DoubleType(), True),
      StructField("end_of_fade_in", DoubleType(), True),
      StructField("key", IntegerType(), True),
      StructField("key_confidence", DoubleType(), True),
      StructField("loudness", DoubleType(), True),
      StructField("release", StringType(), True),
      StructField("song_hotnes", DoubleType(), True),
      StructField("song_id", StringType(), True),
      StructField("start_of_fade_out", DoubleType(), True),
      StructField("tempo", DoubleType(), True),
      StructField("time_signature", DoubleType(), True),
      StructField("time_signature_confidence", DoubleType(), True),
      StructField("title", StringType(), True),
      StructField("year", IntegerType(), True),
      StructField("partial_sequence", IntegerType(), True)
     ]
    )
    
    @dp.table(
     comment="Raw songs data"
    )
    def songs_raw():
     return (spark.readStream
      .format("cloudFiles")
      .schema(schema)
      .option("cloudFiles.format", "csv")
      .option("sep","\t")
      .load(file_path))
    
    # Описываем materialized view для валидации данных и переименования колонки
    @dp.materialized_view(
     comment="Million Song Dataset with data cleaned and prepared for analysis"
    )
    def songs_prepared():
     return (
      spark.read.table("songs_raw")
       .withColumnRenamed("title", "song_title")
       .select("artist_id", "artist_name", "duration", "release", "tempo", "time_signature", "song_title", "year")
     )
    
    # Описываем materialized view для фильтрации, агрегации, сортировки данных
    @dp.materialized_view(
     comment="A table summarizing counts of songs released by the artists who released the most songs each year."
    )
    def top_artists_by_year():
     return (
      spark.read.table("songs_prepared")
       .filter(expr("year > 0"))
       .groupBy("artist_name", "year")
       .count().withColumnRenamed("count", "total_number_of_songs")
       .sort(desc("total_number_of_songs"), desc("year"))
     )
    
    Бесплатный