1. 業務說:“…… bulabula……,這個需求很簡單,怎麼實現我不管?” 面對霸氣側漏的業務需求,由於沒有大數據知識儲備,咱心裡沒底,咱也不敢問,咱也不敢說,只能靜下來默默儲備、默默尋覓解決方案。 關註“一猿小講”公眾號的小伙伴們,今天有福啦,因為今天我們將一起跳出系統之外,共同邁入大數據之 ...
1.
業務說:“…… bulabula……,這個需求很簡單,怎麼實現我不管?”
面對霸氣側漏的業務需求,由於沒有大數據知識儲備,咱心裡沒底,咱也不敢問,咱也不敢說,只能靜下來默默儲備、默默尋覓解決方案。
關註“一猿小講”公眾號的小伙伴們,今天有福啦,因為今天我們將一起跳出系統之外,共同邁入大數據之 flink 的大門。
flink 是啥?flink 幹啥用的?……
我相信,你心中肯定有類似千萬種這樣疑問,但是你花兩分鐘堅持讀到最後,我想想能撲滅你心中的疑問的 99.99%。
好了,請準備好小板凳,我們的故事開始。
2.
上來理論先不談,一言不合就實踐。環顧了一下四周,90% 的同事都用 Mac 本,本次演示也是基於 Mac 系統。
磨刀不誤砍柴工,準備環境。確保本機安裝了JDK,因為 flink 編譯和運行要求 Java 版本至少是 JDK 1.8,來輸入命令檢查一下
java -version
如果沒有安裝 JDK 1.8,請按照內心的指引安裝一下。我相信這步過了之後,後面將會順風順水,大鵬一日同風起,扶搖直上九萬里(捂嘴笑)。
版本千千萬,總有一款你喜歡。這裡我們選擇最新版本 1.8.1 進行入門學習,不要問為什麼,就因為王八看綠豆,看對眼了。
http://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.8.1/flink-1.8.1-bin-scala_2.12.tgz
選好版本下載完,來個全局看一看。其中 bin 為啟動停止腳本,conf 為配置文件目錄,examples 為小樣例,lib 所依賴的類庫,log 為日誌目錄。
本次我們重點關註bin、examples、log 三個目錄。
一切準備就緒,小試牛刀。單機方式運行 flink,在 flink 的主目錄下,輸入命令鬧鈴響起,呼喚 flink 要去工作啦。
./bin/start-cluster.sh
縱然他人誇你千萬遍,讓我看看好看不好看。輸入 http://127.0.0.1:8081/ 一覽容顏。
畫龍畫虎難畫骨,知人知面不知心。看完錶面,猜背後。深入瞭解又何妨?輸入 jps 命令一探究竟。
哦,原來背後主要是兩個進程在默默的付出:一個是 JobManager 進程, 另一個是 TaskManager 進程。其實我最喜歡背後默默付出的人,給兩位默默付出的進程打 Call,點贊。
flink 已經從睡夢中蘇醒,並準備就緒,就等咱們下發任務啦。HelloWorld 跑跑看。
3.
有界的數據處理(裝文藝書生了有沒有)。我這定義了一些 WORDS,麻煩 flink 你幫忙統計一下每個單詞出現的次數唄?
第一步:準備數據。數據來自 flink 自帶的 example 源碼,找個時間咱們從源碼上再深入聊一次。數據貼出來,目的就是為了讓大家看一下,要知道咱們要讓 flink 幹啥就行了,數據來源本次無需特別關註。
第二步:提交 WordCount.jar 給 flink。不得不說 flink 毫秒級處理,還未等片刻,就給咱們反饋了。
輸入命令:
./bin/flink run examples/streaming/WordCount.jar
結果如下:
第三步:打開頁面看一看 flink 留下的軌跡。
第四步:結果在哪裡?關註點在哪裡,結果就在哪裡。
4.
無界的數據處理(再次裝文藝書生有沒有)。我這定義了一個埠 9000,麻煩 flink 你連上我,這樣咱倆就可以秘密通訊了,我時不時會給你暗送秋波,但是你一定要每隔 5 秒統計一下,當前我給你說的每個詞出現的數量,因為詞詞珠璣(捂嘴笑)。
第一步:啟動本地服務。我們通過 netcat 命令來啟動本地服務,然後就可以不停的說出對 flink 的熱愛。
如果報錯,根據報錯進行提示安裝 nc,我相信一猿小講的粉絲肯定秒秒鐘都能搞定。
第二步:提交 SocketWindowWordCount.jar 程式。其實 flink 早已按捺不住啦,儘管放馬過去吧。
打開新的視窗,鍵入如下命令:
./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000
看一看 flink 羞澀的反應。
第三步:看看效果,一睹芳容。
第四步:千萬別矜持,說出你對 flink 的熱愛,來點真情看看 flink 的反應?
在 nc 打開的視窗寫一些文本,回車一行就發送一行輸入給Flink。
不錯不錯,統計效果杠杠的。
能否再浪漫一些,再多真情吐露一些。
在控制台看看 flink 的嬌羞的樣子。新開一個視窗,執行
tail -f log/flink*.out
效果確實杠杠滴
也可以在頁面一睹 flink 那羞澀的反應。
第五步:真情吐露完成,退出 nc,flink 還有點不捨。
視力不好,我們把上面的圖拆開放大了看。退出 nc 的效果如下。
當我們斷開 nc 時,flink 的反應流露出有點不捨,效果如下。
5.
好了,收工!到這兩個 flink 的 HelloWorld 都完事了,我們也一起入門了。flink 你釋放資源吧,你也休息一會兒吧。
輸入命令:
./bin/stop-cluster.sh
效果如下:
6.
先實踐再理論,HelloWorld 實踐完,不妨拋倆概念玩一玩。
概念一:流?
註意,這裡說的可不是流氓的流。咱們想指的是信用卡交易、感測器測量、機器日誌、網站或移動應用程式上的用戶交互記錄,等等所有這些數據都形成的一種流。不過任何類型的數據,都可以形成一種事件流。
概念二:無界流 vs 有界流?
無界流有定義流的開始,但沒有定義流的結束。它們會無休止地產生數據。無界流的數據必須持續處理,即數據被攝取後需要立刻處理。我們不能等到所有數據都到達再處理,因為輸入是無限的,在任何時候輸入都不會完成。處理無界數據通常要求以特定順序攝取事件,例如事件發生的順序,以便能夠推斷結果的完整性。
有界流有定義流的開始,也有定義流的結束。有界流可以在攝取所有數據後再進行計算。有界流所有數據可以被排序,所以並不需要有序攝取。有界流處理通常被稱為批處理。
概念三:那話說回來 flink 到底是啥東東?
Apache Flink 擅長處理無界和有界數據集。精確的時間控制和狀態化使得 Flink 的運行時(runtime)能夠運行任何處理無界流的應用。有界流則由一些專為固定大小數據集特殊設計的演算法和數據結構進行內部處理,產生了出色的性能。
概念四:流式技術哪家強?
從網上邂逅到這張圖(若侵、速刪),並摘了個結論:如圖中藍色柱形為單線程 Storm 作業的吞吐,橙色柱形為單線程 Flink 作業的吞吐,可以看出,Flink 吞吐約為 Storm 的 3-5 倍。至於 Flink vs Spark 的事情就交給你去問度娘或者谷哥吧,搜之會一大堆。
7.
好了,今天的分享就帶你成功邁入大數據之 flink 的大門,希望對你有收穫。
最後,還是那句話:跳出舒適區、持續不斷的學習;跳出系統之外,會別有一番滋味涌上心頭。