[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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода