Apache Flink - Khái niệm API
Flink có một bộ API phong phú sử dụng để các nhà phát triển có thể thực hiện chuyển đổi trên cả dữ liệu hàng loạt và dữ liệu thời gian thực. Một loạt các phép biến đổi bao gồm ánh xạ, lọc, sắp xếp, nối, nhóm và tổng hợp. Các biến đổi này của Apache Flink được thực hiện trên dữ liệu phân tán. Hãy để chúng tôi thảo luận về các API khác nhau mà Apache Flink cung cấp.
API tập dữ liệu
API tập dữ liệu trong Apache Flink được sử dụng để thực hiện các hoạt động hàng loạt trên dữ liệu trong một khoảng thời gian. API này có thể được sử dụng trong Java, Scala và Python. Nó có thể áp dụng các loại biến đổi khác nhau trên tập dữ liệu như lọc, ánh xạ, tổng hợp, nối và nhóm.
Tập dữ liệu được tạo từ các nguồn như tệp cục bộ hoặc bằng cách đọc tệp từ một tệp cụ thể và dữ liệu kết quả có thể được ghi trên các phần chìm khác nhau như tệp phân tán hoặc thiết bị đầu cuối dòng lệnh. API này được hỗ trợ bởi cả hai ngôn ngữ lập trình Java và Scala.
Đây là một chương trình Wordcount của Dataset API -
public class WordCountProg {
public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements(
"Hello",
"My Dataset API Flink Program");
DataSet<Tuple2<String, Integer>> wordCounts = text
.flatMap(new LineSplitter())
.groupBy(0)
.sum(1);
wordCounts.print();
}
public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
for (String word : line.split(" ")) {
out.collect(new Tuple2<String, Integer>(word, 1));
}
}
}
}
API DataStream
API này được sử dụng để xử lý dữ liệu trong luồng liên tục. Bạn có thể thực hiện các thao tác khác nhau như lọc, ánh xạ, tạo cửa sổ, tổng hợp dữ liệu luồng. Có nhiều nguồn khác nhau trên luồng dữ liệu này như hàng đợi tin nhắn, tệp, luồng ổ cắm và dữ liệu kết quả có thể được viết trên các phần chìm khác nhau như thiết bị đầu cuối dòng lệnh. Cả hai ngôn ngữ lập trình Java và Scala đều hỗ trợ API này.
Đây là một chương trình Wordcount trực tuyến của DataStream API, nơi bạn có dòng đếm từ liên tục và dữ liệu được nhóm trong cửa sổ thứ hai.
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class WindowWordCountProg {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<String, Integer>> dataStream = env
.socketTextStream("localhost", 9999)
.flatMap(new Splitter())
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
dataStream.print();
env.execute("Streaming WordCount Example");
}
public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
for (String word: sentence.split(" ")) {
out.collect(new Tuple2<String, Integer>(word, 1));
}
}
}
}