FLINKシリーズは、糸に展開増分ファイルWORDCOUNT、ミッションを達成するためのJava
そこのデータ・ストリームの状態計算 - ApacheのFlink®
ApacheのFLINKは、分散フレームには、境界と境界データストリームを持っていない状態で計算を実行するためのエンジンを処理しています。FLINKは、
すべての一般的なクラスタ環境上で実行することができ、かつ任意のサイズとメモリ速度で計算することができます。次に、我々は重要な側面FLINKアーキテクチャを紹介します。
無制限と囲まれたデータの処理
任意のタイプのデータは、イベントのストリームを形成してもよいです。クレジットカード取引、センサーの測定、マシンはデータ・ストリームを形成するすべてのそれらのウェブサイトやモバイルアプリケーション上の記録ユーザーの操作を記録します。
データは有界または無制限プロセス流として使用することができます。
無制限のストリームは、ストリームの定義を開始する必要がありますが、ストリームの終わりを定義していません。彼らは際限なくデータを生成します。データの無限のストリームが摂取されたデータはすぐに注意が必要であること、に対処し続けなければなりません。すべてのデータが再処理を到着するまで私たちは、入力が無限であるので、入力は任意の時点で行われることはありません、待つことができません。無制限の処理は、一般に、結果の整合性を推定することができるように、イベントのシーケンス、例えば、特定の順序で摂取可能なイベント・データを必要とします。
有界流れがフローを定義し始め、だけでなく、ストリームの終わりを定義しました。有界ストリームは、すべてのデータの摂取後に計算することができます。あなたが受注する必要はありませんので、有界ストリームのすべてのデータは、ソートすることができます。一般的に、バッチプロセス流と称する有界
アパッチFLINK良い処理が有界と非有界データセットのアプリケーション(ランタイム)時の動作の制御および状態は、任意FLINK無制限フロー処理を実行することができる正確な時間。ストリームの数によって境界は、内部処理アルゴリズムおよび特別に設計され、製造さ優れた性能の固定サイズのデータ・セットのデータ構造のために設計されています。
環境の準備
パッケージ | 版 |
---|---|
ApacheのHadoopの | 3.2.1 |
考え | 2018.3 |
CentOSの | 7 |
JDK | 1.8 |
ApacheのFLINK | 1.10.0 |
私たちの目標
Javaを使用してプログラムを実装し、FLINKはワードファイルに数えることができる、と私たちはそれファイルにして保存新しいコンテンツを作成する際に、プログラムが自動的に増分回数の内容に追加されます。
私たちは、その後、糸の上で実行するタスクを送信します。
FileWindowWordCount
依存性の導入
Gradleの
// 下面四个依赖是java开发Flink应用必要的依赖
// https://mvnrepository.com/artifact/org.apache.flink/flink-core
compile group: 'org.apache.flink', name: 'flink-core', version: '1.10.0'
// https://mvnrepository.com/artifact/org.apache.flink/flink-java
compile group: 'org.apache.flink', name: 'flink-java', version: '1.10.0'
// https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java
compile group: 'org.apache.flink', name: 'flink-streaming-java_2.12', version: '1.10.0'
// https://mvnrepository.com/artifact/org.apache.flink/flink-clients
compile group: 'org.apache.flink', name: 'flink-clients_2.12', version: '1.10.0'
コードコード
package cn.flink;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.io.TextInputFormat;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.core.fs.Path;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.FileProcessingMode;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
/**
* 增量读取文件中的内容并对单词计数
* 改编自Apache Flink官网上的SocketStreamWordCount
*/
public class LocalFileWindowWordCount {
public static void main(String[] args) throws Exception {
// 待处理的文件由 --input 参数指定
String input;
try {
final ParameterTool params = ParameterTool.fromArgs(args);
input = params.get("input");
} catch (Exception e) {
System.err.println("No port specified. Please run 'LocalFileWindowWordCount --input <input>'");
return;
}
// get the execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Path path = new org.apache.flink.core.fs.Path(input);
TextInputFormat textInputFormat = new TextInputFormat(path);
// get input data by connecting to the socket
DataStream<String> text = env.readFile(textInputFormat, input, FileProcessingMode.PROCESS_CONTINUOUSLY,2000);
// parse the data, group it, window it, and aggregate the counts
DataStream<WordWithCount> windowCounts = text
.flatMap(new FlatMapFunction<String, WordWithCount>() {
@Override
public void flatMap(String value, Collector<WordWithCount> out) {
for (String word : value.split("\\s")) {
out.collect(new WordWithCount(word, 1L));
}
}
})
.keyBy("word")
.timeWindow(Time.seconds(1), Time.seconds(1))
.reduce(new ReduceFunction<WordWithCount>() {
@Override
public WordWithCount reduce(WordWithCount a, WordWithCount b) {
return new WordWithCount(a.word, a.count + b.count);
}
});
// print the results with a single thread, rather than in parallel
windowCounts.print().setParallelism(2);
env.execute("Local File Window WordCount");
}
// Data type for words with count
public static class WordWithCount {
public String word;
public long count;
public WordWithCount() {}
public WordWithCount(String word, long count) {
this.word = word;
this.count = count;
}
@Override
public String toString() {
return word + " : " + count;
}
}
}
IDEでfacie効果を実行します
最初のことを新しい空のテキストファイルを作成する必要があり
、私がここに持っていることはDです:\ TMP \ INPUT.TXT
プロジェクトの実行
INPUT.TXTメモ帳がファイルを開くには
、その後、一行の書き込み
[OK]を、結果は正常です。
あなたは、サーバーの稼働にアップロードすることができます。
-m糸クラスタ-p 2 -yjm 700メートル-ytm 1024メートル-c cn.flink.LocalFileWindowWordCount〜/ ApacheFlink-0.0.3-alpha.jar --input /root/wordcount/input.txt実行ビン/ FLINK