1. 程式人生 > >【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink實戰基礎004--flink特性:類庫和API示例

【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink實戰基礎004--flink特性:類庫和API示例

三、類庫和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也在大力發展。