Apache Flink — это платформа потоковой обработки, которая широко используется в задачах обработки и анализа данных в реальном времени в области больших данных. В Flink FileSource — это важный компонент, используемый для чтения данных из файловой системы и преобразования их в поток данных Flink. В этой статье подробно рассматривается, как работает FileSource, как его использовать и как он соотносится с другими источниками данных.
FileSource — это источник, предоставляемый Flink для чтения данных из файловой системы. Он может обрабатывать различные типы файлов, включая текстовые файлы, сжатые файлы, файлы последовательностей и т. д. Принцип работы FileSource можно резюмировать в следующих шагах:
1. Назначение файлов
В кластере Flink каждая задача отвечает за чтение фрагмента файла. FileSource назначает файлы различным задачам для обработки в зависимости от их размера и количества.
2. Параллельное чтение
Каждая задача параллельно считывает назначенные ей фрагменты файлов. Это означает, что данные в файле считываются одновременно, тем самым повышая общую скорость чтения и эффективность обработки.
3. Анализ данных
Прочитанные данные будут проанализированы анализатором и преобразованы в структуру данных в Flink, например DataSet или DataStream.
4. Распределение данных
Разобранные данные будут переданы последующим операторам для дальнейшей обработки и анализа.
Ограниченные потоки
Ограниченный поток относится к потоку данных с четкой конечной точкой, то есть поток данных закончится в определенный момент, а объем данных ограничен. Например, потоки данных, считывающие статические файлы, базы данных или ограниченные наборы данных, являются ограниченными потоками. К характеристикам ограниченных потоков относятся:
Неограниченные потоки
Неограниченный поток относится к потоку данных, который не имеет четкой конечной точки, то есть поток данных будет продолжать генерироваться, а объем данных может быть неограниченным. Например, данные датчиков в реальном времени, потоки журналов, данные в очередях сообщений и т. д. — все это неограниченные потоки. К особенностям неограниченного потока относятся:
Различные реализации потока данных
При создании источника файла источник по умолчанию находится в ограниченном/пакетном режиме;
//СоздайтеFileSourceданныеисточник,и установить пакетный режим,Завершить после прочтения файла
final FileSource<String> source = FileSource.forRecordStreamFormat(...)
.build();
Установите параметр MonitorContinuly(Duration.ofMillis(5)) для установки источника в режим непрерывного потока.
//СоздайтеFileSourceданныеисточник,и установить напотоковый режим,Проверяйте путь на наличие новых файлов каждые 5 минут,и читать
final FileSource<String> source = FileSource.forRecordStreamFormat(...)
.monitorContinuously(Duration.ofMillis(5))
.build();
1.FileSource поддерживает чтение и анализ данных в нескольких форматах данных. В этой проблеме используется текст. Файл файл в качестве примера для расширения. 2.JDK версии 11 3.Флинк версия 1.18.0 4.Ниже приведены два простых примера кода, демонстрирующие, как использовать Flink FileSource Чтение данных файла.
<!-- флинк читает текст Зависимость файла файла 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 -->
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");
}
}
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");
}
}
В приведенном выше примере мы используем метод FileSource для чтения текстового файла по указанному пути, преобразования его в поток данных, выбора различных форматов ввода и методов анализа, а затем вызываем метод печати для распечатки данных в данных. транслировать.
FileSource — один из часто используемых источников данных в Flink. По сравнению с другими источниками данных он имеет некоторые преимущества и недостатки. В зависимости от реальной ситуации и потребностей можно выбрать различные источники данных, отвечающие требованиям задачи.
FileSource да Apache Flink используется в Чтении данных Являясь важным компонентом файла, он может эффективно обрабатывать крупномасштабные данные файлов и обеспечивает богатые функции и гибкое использование. через глубокое понимание FileSource Принцип работы и использование Flink Для решения задач обработки и анализа крупномасштабных файлов данных.
Благодаря приведенному выше подробному описанию вы сможете получить полное представление о FileSource в Apache Flink, чтобы лучше применять его в реальных проектах обработки данных.