[Tianyan Series 01] Глубокое понимание компонента Flink FileSource: реализация крупномасштабной обработки файлов данных
[Tianyan Series 01] Глубокое понимание компонента Flink FileSource: реализация крупномасштабной обработки файлов данных

01 Основные понятия

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

02 Принцип работы

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

1. Назначение файлов

В кластере Flink каждая задача отвечает за чтение фрагмента файла. FileSource назначает файлы различным задачам для обработки в зависимости от их размера и количества.

2. Параллельное чтение

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

3. Анализ данных

Прочитанные данные будут проанализированы анализатором и преобразованы в структуру данных в Flink, например DataSet или DataStream.

4. Распределение данных

Разобранные данные будут переданы последующим операторам для дальнейшей обработки и анализа.

03 Реализация потока данных

Ограниченные потоки

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

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

Неограниченные потоки

Неограниченный поток относится к потоку данных, который не имеет четкой конечной точки, то есть поток данных будет продолжать генерироваться, а объем данных может быть неограниченным. Например, данные датчиков в реальном времени, потоки журналов, данные в очередях сообщений и т. д. — все это неограниченные потоки. К особенностям неограниченного потока относятся:

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

Различные реализации потока данных

При создании источника файла источник по умолчанию находится в ограниченном/пакетном режиме;

Язык кода:javascript
копировать
//СоздайтеFileSourceданныеисточник,и установить пакетный режим,Завершить после прочтения файла
final FileSource<String> source = FileSource.forRecordStreamFormat(...)
        .build();

Установите параметр MonitorContinuly(Duration.ofMillis(5)) для установки источника в режим непрерывного потока.

Язык кода:javascript
копировать
//СоздайтеFileSourceданныеисточник,и установить напотоковый режим,Проверяйте путь на наличие новых файлов каждые 5 минут,и читать
final FileSource<String> source = FileSource.forRecordStreamFormat(...)
        .monitorContinuously(Duration.ofMillis(5))  
        .build();   

04 Проект реального боя

1.FileSource поддерживает чтение и анализ данных в нескольких форматах данных. В этой проблеме используется текст. Файл файл в качестве примера для расширения. 2.JDK версии 11 3.Флинк версия 1.18.0 4.Ниже приведены два простых примера кода, демонстрирующие, как использовать Flink FileSource Чтение данных файла.

4.1 Структура проекта

4.2 зависимости maven

Язык кода:javascript
копировать
<!-- флинк читает текст Зависимость файла файла start-->
<dependency>
	<groupId>org.apache.flink</groupId>
	<artifactId>flink-connector-files</artifactId>
	<version>1.18.0</version>
</dependency>
<!-- флинк читает текст Зависимость файла файла end-->

<!-- фликнуть основные зависимости start -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
    <version>1.18.0</version>
</dependency>

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-scala_2.12</artifactId>
    <version>1.18.0</version>
</dependency>

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-clients</artifactId>
    <version>1.18.0</version>
</dependency>

<!-- фликнуть основные зависимости end -->

4.3 StreamFormat считывает данные файла

  • StreamFormat считывает содержимое файла из файлового потока. Это самый простой формат для реализации, и предоставляет множество готовых функций (таких как Checkpoint логика),Но да ограничивает возможности применения (например, повторное использование объектов, пакетную обработку и т. д.).
Язык кода:javascript
копировать
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.connector.file.src.FileSource;
import org.apache.flink.connector.file.src.reader.TextLineInputFormat;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import java.time.Duration;

/**
 * описывать:
 * Flink интегрирует FileSource & forRecordStreamFormat использует & потоковый режим
 * StreamFormat: чтение содержимого файла из файлового потока. Это самый простой формат для реализации,
 * и предоставляет множество готовых функций (таких как Checkpoint логика),
 * Но да ограничивает возможности применения (например, повторное использование объектов, пакетную обработку и т. д.).
 *
 * @author легкий летний кот
 * @version 1.0.0
 * @date 2024-02-07 15:30:22
 */
public class FileSourceRecordStreamingJob {

    public static void main(String[] args) throws Exception {

        // создавать Путь к файлу для чтения
        Path path = new Path("D:\\flink\\file_source.txt");

        // создавать Функция форматирования для чтения файлов
        TextLineInputFormat textLineInputFormat = new TextLineInputFormat();

        // создавать FileSource
        FileSource<String> fileSource = FileSource.
                forRecordStreamFormat(textLineInputFormat, path)
                //Освободить комментарии и использовать потоковый режим,Проверяйте каждые 5 минут, есть ли новые файлы, в противном случае по умолчанию будет использоваться пакетный режим.
//                .monitorContinuously(Duration.ofMillis(5))
                .build();

        // создавать среда выполнения
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // добавить в FileSource приезжатьданныепоток        env.fromSource(fileSource, WatermarkStrategy.noWatermarks(), "FileSource").print();

        // выполнять задания
        env.execute("FileSourceRecordStreamingJob");
    }
}

4.4 BulkFormat считывает данные файла

  • BulkFormat считывает из файла пакет записей за раз, хотя большинство "нижний" реализации формата, но обеспечивает наибольшую гибкость в реализации оптимизации.
Язык кода:javascript
копировать
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.connector.file.src.FileSource;
import org.apache.flink.connector.file.src.FileSourceSplit;
import org.apache.flink.connector.file.src.impl.StreamFormatAdapter;
import org.apache.flink.connector.file.src.reader.BulkFormat;
import org.apache.flink.connector.file.src.reader.TextLineInputFormat;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import java.time.Duration;


/**
 * Описание: Флинк интегрирует FileSource & forBulkFileFormat использует & потоковый режим
 * BulkFormat: чтение пакета записей из файла за раз. Хотя это самое "нижний" реализации формата, но обеспечивает наибольшую гибкость в реализации оптимизации.
 *
 * @author легкий летний кот
 * @version 1.0.0
 * @date 2024-02-07 15:30:22
 */
public class FileSourceBulkStreamingJob {

    public static void main(String[] args) throws Exception {

        //создавать партия Функция форматирования для чтения файлов,На самом деле нижний этаж все ещеда Чтение из однострочного файла
        BulkFormat<String, FileSourceSplit> bulkFormat = new StreamFormatAdapter<>(new TextLineInputFormat());

        // создавать FileSource
        FileSource<String> fileSource = FileSource.
                forBulkFileFormat(bulkFormat, new Path("D:\\flink\\file_source.txt"))
                //Освободить комментарии и использовать потоковый режим,каждый5минутная проверкада Есть ли новые файлы?,В противном случае по умолчанию используется пакетный режим.
//                .monitorContinuously(Duration.ofMillis(5))
                .build();

        // создавать среда выполнения
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // добавить в FileSource приезжатьданныепоток        env.fromSource(fileSource, WatermarkStrategy.noWatermarks(), "FileSource").print();

        // выполнять задания
        env.execute("FileSourceBulkStreamingJob");
    }
}

4.5 Краткое описание использования

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

05 Сравнение источников данных

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

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

06 Резюме

FileSource да Apache Flink используется в Чтении данных Являясь важным компонентом файла, он может эффективно обрабатывать крупномасштабные данные файлов и обеспечивает богатые функции и гибкое использование. через глубокое понимание FileSource Принцип работы и использование Flink Для решения задач обработки и анализа крупномасштабных файлов данных.

Благодаря приведенному выше подробному описанию вы сможете получить полное представление о FileSource в Apache Flink, чтобы лучше применять его в реальных проектах обработки данных.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose