【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink實戰基礎004--flink特性:類庫和API示例
阿新 • • 發佈:2019-02-19
三、類庫和API
1.流處理程式
flink的 DataStream API在流處理的業務場景下,支援多種資料轉換,支援使用者自定義狀態的操作,支援靈活的視窗操作!
示例程式:
//1.定義case class
case class Word(word: String, freq: Long)
//2.定義資料來源
val texts: DataStream[String] = ...
//3.支援資料的流操作
val counts = text
.flatMap { line => line.split("\\W+") }
.map { token => Word(token, 1 ) }
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1))
.sum("freq")
程式說明:
以上程式演示瞭如何在一個數據流上,對源源不斷流入的訊息進行一個word-count操作!
2.批處理程式
flink的 DataSet API具有以下特性:
1.支援Java和scale開發語言
2.支援編寫型別安全的程式
3.能夠編寫漂亮的易於維護的程式
4.支援豐富的資料型別
5.支援鍵值對資料型別
6.支援豐富的運算元
示例程式:
//1.定義case class
case class Page(pageId: Long, rank: Double)
case class Adjacency(id: Long, neighbors: Array[Long])
//2.執行運算
val result = initialRanks.iterate(30) { pages =>
pages.join(adjacency).where("pageId").equalTo("id") {
(page, adj, out: Collector[Page]) => {
out.collect(Page(page.pageId, 0.15 / numPages))
val nLen = adj.neighbors.length
for (n <- adj.neighbors) {
out.collect(Page(n, 0.85 * page.rank / nLen))
}
}
}
.groupBy("pageId").sum("rank")
}
程式說明:
以上程式演示了一個在圖計算中PageRank演算法的核心程式碼!
3.類庫和軟體棧
flink的軟體棧
flink deploy:
有三種部署方式
1.本地部署:在本地啟動基於單個jvm的flink例項。
2.叢集部署:在叢集中可以單獨部署成standalone模式,也可以採用hadoop的YARN進行部署成yarn模式
3.雲部署:相容Google的雲服務GCE(Google Compute Engine),也相容amazon的雲服務AWS(Amazon
Web Services)。
flink core:
flink的核心是一個分散式基於流的資料處理引擎,將一切處理都認為是流處理,將批處理看成流處理的一個特例。
這與spark正好相反,spark是將一切處理都認為是批處理,將流處理看成批處理的一個特例。spark的流處理不
是真正的流處理它是一種微型批處理(micro batch),因此spark的流處理實的時性不是很高,spark streaming
定位是準實時流處理引擎。而flink是真正的流處理系統,它的實時性要比spark高出不少,它對標是Twitter開源的
storm和heron,他是一個真正的大資料實時分析系統。
flink API:
flink的API分為兩個部分
1.流處理API,流處理主要是基於dataStream
2.批處理API,批處理主要是基於dataSet
flink liberaries:
Flink還針對特定的應用領域提供了相應的軟體庫,方便適應特定領域的操作。主要包括
1.flink table:主要用於處理關係型的結構化資料,對結構化資料進行查詢操作,將結構化資料抽象成關係表,
並通過類SQL的DSL對關係表進行各種查詢操作。提供SQL on bigdata的功能,flink table既可以在流處
理中使用SQL,也可以在批處理中使用SQL,對應sparkSQL.
2.flink gelly:主要用於圖計算領域,提供相關的圖計算API和圖計算演算法的實現,對應spark graph。
3.flink ML(machine leaning):主要用於機器學習領域,提供了機器學習Pipelines APIh和多種機器學
習演算法的實現,對應sparkML
4.flink CEP(Complex event processing):主要用於複雜事件處理領域。
總結:
flinK為支援各種計算場景提供了相應的高層api
1.提供DataSet API來支援批處理場景
2.提供DataSream API來支援批流理場景
3.提供CEP API來支援F複雜事件處理(Complex Event Processing)的場景
4.提供Gelly API來支援圖分析場景
5.提供Table API來支援SQL-ON-BIGDATA場景
6.提供FlinkML API來支援機器學習場景
flink為了和大資料生態圈的其他技術進行融合,也在努力的擴充套件器儲存層的支撐。
spark的軟體棧
1.在高層api方面,flink和spark幾乎一樣都覆蓋了大多數的大資料處理場景。
2.由於發展的原因spark在API方面要超出flink,這方面flink也在大力發展。