まず、Scalaのプラグインをインストール
FLINKは、それぞれ、あなたがFLINKプログラムを開発するためにScalaの言語を使用したい場合は、プロンプト文法、構文の強調表示などの機能を提供するためのScalaプラグインIDEAをインストールすることができ、Java言語とScalaの言語に基づいたAPIを提供します。オープンIDEA、クリックしてFile => settings => plugins
、プラグインのインストールページを開くのScalaプラグインを検索し、それをインストールする。インストールを有効に再起動IDEA、完了したら。
二、FLINKプロジェクトの初期化
公式スクリプトビルダー2.1
JavaベースのプロジェクトFLINKを構築するためのMavenとGradleの両構築ツールを使用してFLINK公式サポート、Scalaの言語に基づいて、2つの構築物FLINKプロジェクトを構築するためのSBTやMavenのツールの使用をサポートしています。ここでは一例としてのMavenに、それは同時に、Java言語とScalaの言語のプログラムを構築するサポートすることができますので。FLINK 1.9以上のみ、インストール後のMaven、Mavenのバージョン3.0.4をサポートしていますが完了し、次の2つの方法でプロジェクトをビルドすることができます。
Mavenの原型に直接1.建設
MVNは、このような初期化の完了を待っているような情報のgroupId、たartifactIdとパッケージ名を入力し、情報と対話順番にするために、直接作成するには、次の文を使用して、その後、画面の指示に従います。
$ mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.9.0
复制代码
注:あなたがScalaの言語に基づいてプロジェクトを作成したい場合は、単にFLINK-クイックスタート-javaのは後にも同様に、FLINK-クイックスタート - Scalaの缶を置き換えます。
2.すぐにビルドへの公式のスクリプト
それが簡単にプロジェクトには、次のコマンドから直接呼び出すことができます公式素早くビルド・スクリプトを初期化するようにするには:
$ curl https://flink.apache.org/q/quickstart.sh | bash -s 1.9.0
复制代码
方法は、実際にそのスクリプトを次のように読み込むコマンドMaven原型を、実行することで初期化することです。
PACKAGE=quickstart
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=${1:-1.8.0} \
-DgroupId=org.myorg.quickstart \
-DartifactId=$PACKAGE \
-Dversion=0.1 \
-Dpackage=org.myorg.quickstart \
-DinteractiveMode=false
复制代码
これは、第一の方法に比べて見ることができますが、方法は直接まあのgroupId、たartifactId、バージョン情報のみを指定しました。
2.2 IDEAビル
あなたのアイデアを開発ツールをされて使用している場合は、直接プロジェクトにMavenのFLINKアーキタイププロジェクトの初期化を選択するページを作成することができます。
あなたは原型上記IDEAない場合は、右上隅をクリックすることで、ADD ARCHETYPE
上記から入手可能である。必要な情報、ターンフィルでは、追加するarchetype:generate
取得声明。クリックしてOK
保存したら、原型は常に、あなたのIDEAの各項目が作成された後に時間が存在します、ちょうどに直接原型を選択します。
FLINK原型を選択し、をクリックしてNEXT
すべてのステップが同じで、通常のMavenプロジェクトされた後、ボタンを押します。
第三に、プロジェクト構造
3.1プロジェクトの構造
自動的に次のように構成を作成するために、プロジェクトの完了後に生成さ:
次のようにBatchJobは、ソースコードは、サンプルコードのバッチです。
import org.apache.flink.api.scala._
object BatchJob {
def main(args: Array[String]) {
val env = ExecutionEnvironment.getExecutionEnvironment
....
env.execute("Flink Batch Scala API Skeleton")
}
}
复制代码
バッチ実行環境のgetExecutionEnvironment代表、それがローカルで実行されている場合は、ローカル実行環境を得ることです。あなたは、クラスタ上で実行している場合は、実行環境のクラスタを取得することです。あなたは、プロセスストリームの実行環境を取得したい場合は、それだけはする必要がExecutionEnvironment
置き換えられStreamExecutionEnvironment
、StreamingJobでサンプル中の対応するコードを:
import org.apache.flink.streaming.api.scala._
object StreamingJob {
def main(args: Array[String]) {
val env = StreamExecutionEnvironment.getExecutionEnvironment
...
env.execute("Flink Streaming Scala API Skeleton")
}
}
复制代码
ストリーム処理プロジェクトのことを注意env.execute()
このコードの絶対必要である、そうでない場合は、ストリーム・ハンドラが実行されますが、バッチ項目のためにオプションであることはありません。
3.2依存
スケルトンを作成するには、Mavenのベースのプロジェクトは、主に以下のコア依存提供:flink-scala
バッチプログラムの開発をサポートするために使用されるが、flink-streaming-scala
ストリーム処理プログラムの開発を支援するために、scala-library
クラスライブラリには、Scalaの言語のニーズを提供します。あなたはスケルトンJava言語を作成するために、Mavenを使用するときに選択した場合は、デフォルトが提供されているflink-java
とflink-streaming-java
依存性。
<!-- Apache Flink dependencies -->
<!-- These dependencies are provided, because they should not be packaged into the JAR file. -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<!-- Scala Library, provided by Flink as well. -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>provided</scope>
</dependency>
复制代码
特に注目すべきは、上記に依存しているscope
ラベルは、すべての彼らは、最終的なパッケージに依存JARならないことを意味し、提供されたものとして同定されています。FLINKインストールパッケージは、これらの依存関係が提供されているので、libという名前のディレクトリに配置されているflink-dist_*.jar
すべてのコアクラスとFLINK依存性が含まれています:
scope
タグが提供として識別されますが、IDEAにプロジェクトを開始するときにClassNotFoundExceptionがスローされますなります。このため、IDEA Shihaiを使用してプロジェクトを作成する際に自動的に次のプロファイル設定を生成します。
<!-- This profile helps to make things run out of the box in IntelliJ -->
<!-- Its adds Flink's core classes to the runtime class path. -->
<!-- Otherwise they are missing in IntelliJ, because the dependency is 'provided' -->
<profiles>
<profile>
<id>add-dependencies-for-IDEA</id>
<activation>
<property>
<name>idea.version</name>
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
</profile>
</profiles>
复制代码
IDでadd-dependencies-for-IDEA
プロファイル、コアのすべてが依存コンパイルとして同定されており、その後、あなたが任意のコードを変更する必要はないかもしれない、唯一のMavenのパネルIDEAにプロフィールをチェックする必要があり、あなたがFLINKでIDEAプロジェクトで直接実行できます。
第四に、単語頻度統計ケース
プロジェクトが作成されたら、あなたは以下のScalaの言語で、FLINKプロジェクトを実行しようとするために、単語頻度統計の単純なケースを書くことができ、例えば、ストリームの例をプログラミングするプログラムやバッチ処理プログラムを導入しました。
4.1バッチ例
import org.apache.flink.api.scala._
object WordCountBatch {
def main(args: Array[String]): Unit = {
val benv = ExecutionEnvironment.getExecutionEnvironment
val dataSet = benv.readTextFile("D:\\wordcount.txt")
dataSet.flatMap { _.toLowerCase.split(",")}
.filter (_.nonEmpty)
.map { (_, 1) }
.groupBy(0)
.sum(1)
.print()
}
}
复制代码
ここでwordcount.txt
次のように内容は以下のとおりです。
a,a,a,a,a
b,b,b
c,c
d,d
复制代码
マシンは任意の構成他のFLINK環境を必要としない、方法は次のように主な結果は直接実行することができます:
4.2処理フロー例
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
object WordCountStreaming {
def main(args: Array[String]): Unit = {
val senv = StreamExecutionEnvironment.getExecutionEnvironment
val dataStream: DataStream[String] = senv.socketTextStream("192.168.0.229", 9999, '\n')
dataStream.flatMap { line => line.toLowerCase.split(",") }
.filter(_.nonEmpty)
.map { word => (word, 1) }
.keyBy(0)
.timeWindow(Time.seconds(3))
.sum(1)
.print()
senv.execute("Streaming WordCount")
}
}
复制代码
ここでは例えば、開いているポートサービスには、次のコマンドを使用して、指定したポート番号上のコンテンツを聞くこと:
nc -lk 9999
复制代码
入力後の試験データは、ストリーム処理プログラムの観察された取り扱いとすることができます。
第五は、Scalaのシェルを使用します
デモ日常のアイテムのために、あなたは、毎日の研究のために、効果がより直感的かつ少ない時間でプログラムを実行するために直接Scalaのシェル、スパークと同じにすることができ、テスト結果を観察するために頻繁にIDEAを開始したくない場合。FLINKインストールパッケージのダウンロードは、次のとおりです。
https://flink.apache.org/downloads.html
复制代码
FLINKほとんどのバージョンはScalaの2.11とScalaのインストールパッケージの2.12二つのバージョンを提供しているダウンロードできます。
ダウンロードが完了した後に解凍する、直接、次のコマンドローカルモードを使用することができ、次のScalaシェルのインストールディレクトリのbinディレクトリが活性化されています。
./start-scala-shell.sh local
复制代码
バッチ(benvとbtenv)とストリーム処理(SENVとstenv)オペレーティング環境を提供された開始コマンドの完了後、プログラムはスカラFLINKを直接実行することができ、例としては、次の通りであります:
最後に、例外の一般的な解釈:FLINKバージョン私が使用ここでは、次の起動時に例外がスローされます、1.9.1です。ここでは理由は、公式の説明によると、インストールパッケージのすべての現在のScala 2.12バージョンはScalaのシェルでは、Scalaのシェルを使用する場合ので、あなただけのインストールパッケージのScalaの2.11バージョンを選択することができ、一時的にサポートされていません。
[root@hadoop001 bin]# ./start-scala-shell.sh local
错误: 找不到或无法加载主类 org.apache.flink.api.scala.FlinkShell
复制代码
もっと大きなデータ系列は、GitHubのオープンソースプロジェクト見つけることができます:ビッグデータ入門します