本地安裝單機版本Flink
一般來說,線上都是叢集模式,那麼單機模式方便我們測試和學習。
環境要求
本地機器上需要有 Java 8 和 maven 環境,推薦在linux或者mac上開發Flink應用:
如果有 Java 8 環境,執行下面的命令會輸出如下版本資訊:
如果有 maven 環境,執行下面的命令會輸出如下版本資訊:
開發工具推薦使用 ItelliJ IDEA。
插播廣告
-
全網唯一一個從0開始幫助Java開發者轉做大資料領域的公眾號~
-
公眾號大資料技術與架構或者搜尋import_bigdata關注,大資料學習路線最新更新,已經有很多小夥伴加入了~
第一種方式
看這裡:
注意:
An Apache Hadoop installation is not required to use Apache Flink. For users that use Flink without any Hadoop components, we recommend the release without bundled Hadoop libraries.
複製程式碼
這是啥意思?
這個意思就是說Flink可以不依賴Hadoop環境,如果說單機玩的話,下載一個only
版本就行了。
第二種方式(不推薦)
git clone https://github.com/apache/flink.git
cd flink
mvn clean package -DskipTests
複製程式碼
然後進入編譯好的Flink中去執行 bin/start-cluster.sh
其他亂七八糟的安裝辦法
比如 Mac使用者可以用brew install apache-flink
,前提是安裝過 brew
這個mac下的工具.
啟動Flink
我們先到Flink的目錄下來:
如下:
$ flink-1.7.1 pwd
/Users/wangzhiwu/Downloads/flink-1.7.1
複製程式碼
執行命令:
接著就可以進入 web 頁面(http://localhost:8081/) 檢視
恭喜你,一個單機版的flink就跑起來了。
構建一個應用
當然了,我們可以用maven,一頓new,new出來一個過程,這裡我們將使用 Flink Maven Archetype 來建立我們的專案結構和一些初始的預設依賴。在你的工作目錄下,執行如下命令來建立專案:
mvn archetype:generate
-DarchetypeGroupId=org.apache.flink
-DarchetypeArtifactId=flink-quickstart-java
-DarchetypeVersion=1.7.2
-DgroupId=flink-project
-DartifactId=flink-project
-Dversion=0.1
-Dpackage=myflink
-DinteractiveMode=false
複製程式碼
這樣一個工程就構建好了。
還有一個更加牛逼的辦法,看這裡:
curl https://flink.apache.org/q/quickstart.sh | bash
複製程式碼
直接在命令列執行上面的命令,結果如下圖:
同樣可以構建一個Flink工程,而且自帶一些demo。
原理是什麼?點一下它看看就明白了。
flink.apache.org/q/quickstar…
編寫一個入門級的WordCount
//
// Program
//
public static void main(String[] args) throws Exception {
// set up the execution environment
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// get input data
DataSet<String> text = env.fromElements(
"To be, or not to be,--that is the question:--",
"Whether `tis nobler in the mind to suffer",
"The slings and arrows of outrageous fortune",
"Or to take arms against a sea of troubles,"
);
DataSet<Tuple2<String, Integer>> counts =
// split up the lines in pairs (2-tuples) containing: (word,1)
text.flatMap(new LineSplitter())
// group by the tuple field "0" and sum up tuple field "1"
.groupBy(0) //(i,1) (am,1) (chinese,1)
.sum(1);
// execute and print result
counts.print();
}
//
// User Functions
//
/**
* Implements the string tokenizer that splits sentences into words as a user-defined
* FlatMapFunction. The function takes a line (String) and splits it into
* multiple pairs in the form of "(word,1)" (Tuple2<String, Integer>).
*/
public static final class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// normalize and split the line
String[] tokens = value.toLowerCase().split("\W+");
// emit the pairs
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
}
}
複製程式碼
類似的例子,官方也有提供的,可以在這裡下載:
WordCount官方推薦
執行
本地右鍵執行:
提交到本地單機Flink上
- 進入工程目錄,使用以下命令打包
mvn clean package -Dmaven.test.skip=true
複製程式碼
然後,進入 flink 安裝目錄 bin 下執行以下命令提交程式:
flink run -c org.myorg.laowang.WordCount /Users/wangzhiwu/WorkSpace/quickstart/target/quickstart-0.1.jar
複製程式碼
分別制定main方法和jar包的地址。
在剛才的控制檯中,可以看到:
我們剛才提交過的程式。
flink的log目錄下有我們提交過的任務的日誌:
總結
一次簡單的flink之旅就完成了。
-
全網唯一一個從0開始幫助Java開發者轉做大資料領域的公眾號~
-
公眾號大資料技術與架構或者搜尋import_bigdata關注,大資料學習路線最新更新,已經有很多小夥伴加入了~