import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._
object StreamWordCount {
def main(args: Array[String]): Unit = {
// 创建流处理的执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
// 利用传入参数来指定hostname和port
val paramTool: ParameterTool = ParameterTool.fromArgs(args)
val host = paramTool.get("host")
val port = paramTool.getInt("port")
val dataStream = env.socketTextStream(host, port)
// 对每条数据进行处理
val wordCountDataStream = dataStream.flatMap(_.split(" "))
.filter(_.nonEmpty)
.startNewChain()/*开始一个新的任务链(一般在forward(one-to-one)模式,并且任务执行并行度相同的情况下,如果不设置此参数,则任务会合并)*/
.map((_, 1))
.keyBy(0)
.sum(1)
wordCountDataStream.print()
.setParallelism(1) //设定输出时候的并行执行个数(并行度)
// 启动executor
env.execute("stream word count job")
}
}
FLINK構成パラメータの設定(ドキュメントコードをカバーするために提供されます):
#每个 TaskManager 提供的任务 slots 数量
taskmanager.numberOfTaskSlots: 2
# 程序默认并行计算的个数,最大并行计算个数为所有的taskmanager上面的slots总和
parallelism.default: 1
我々が表示されたら、フィルタの後ろに並列処理の元々同じ程度後startNewChain()を設定し、スタイルが前方(1対1)実施計画、2つのタスクチェーンに分かれています。(設定されていない場合は、デフォルトではFLINKは全て1対1と同じタスク並列一緒に合成されます。)
あなたは)フィルター.startNewChain(背後にあるコードを削除した場合、前方(1対1)との並列タスクのと同じ程度は必ずしも組み合わせた場合。
2つの設定は通常の方法でタスクチェーンをマージがあります。
1.タスクチェーンをマージしていない環境内のすべてのタスクのためにこの仕事のデフォルト設定を設定します。
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.disableOperatorChaining()
2.上記の実施形態が提供されることをマージしない場合のステップでタスクチェーン
.filter(_.nonEmpty).startNewChain()
FLINKは、公式文書によると、ファイルを読み込むとき:フードの下では、2つのファイルの読み出し処理サブタスク、すなわちに分割FLINK ディレクトリの監視 と データ読み出し、これらは、エンティティA別々のモニターによって実装されているサブの各タスクは、ISによって実装します.. SINGLE Aは、 非平行 (平行= 1)タスク、並列度のみを読み取ることができ、並列のsocketsource同程度は一つだけであることができる、1です。全体WORDCOUNTミッション計画が(startNewChainを除去した後)以下に示すように、印刷出力タスクの並列処理は1つだけであることができる場合(これは理解できるが、なぜ難しい記述します):
1の平行度:
2の平行度:
3並列処理は次のとおりです。
注意:これは悪い言語の組織であってもよいし、唯一の自分の理解と学習に、スプレーしない好きではありません