Flink DataSet API #3 – 資料集的轉化(2)

在這篇文章中,我們將接續上一篇文章,介紹以下主題:

  • 傳遞參數給于函式(Passing Paramters to Functions):如何將相關參數傳遞給前述的自定義轉化函式。
  • 語義標注(Semantic Annotations):適當的為資料轉化操作使用語義標注,將可以使其節省一些不必要的資料移動或排序,進而提昇執行效率。我們將會介紹如何在 Flink 中使用語義標注。
  • 累加器及計數器(Accumulators and Counters):累加器(accumulators)是一個具有加法運算子和最終累加結果的簡單構造,可以在應用程式中的工作結束後,取得工作結果。對除錯(debug)及資料的初期觀察以發現進一步資訊時非常有用。
  • 除錯(Debugging):我們將介紹幾個在 Flink 中,能有效簡化資料分析應用程式開發的除錯方法。

Continue reading “Flink DataSet API #3 – 資料集的轉化(2)"

廣告

Flink DataSet API #5 – 平行執行(Parallel Execution)

在這篇文章中,我們首先將介紹 Flink 中對其應用程式的執行配置,接著介紹如何設置應用程式的平行執行(parallel execution)及執行計畫(execution plans)。接著將介紹如何讓平行執行的 instances 共享變數;最後介紹執行計畫的視覺化工具。 Continue reading “Flink DataSet API #5 – 平行執行(Parallel Execution)"

Flink DataSet API #4 – 迭代操作(Iterations)

這篇文章將介紹 Flink 中對 DataSet 進行迭代操作(iteration operations)的方法:批次迭代(Bulk iteration)以及差異性迭代(Delta iteration)。

迭代演算法(iterative algorithm)在資料分析的許多領域中都會需要用到,例如:機器學習(machine learning)或圖形分析(graph analysis)。要從大量數據中粹取出有意義的資訊,迭代演算法是不可或缺的。為了加速其於大資料集上的分析,使迭代演算法能以大量並行的方式執行並突顯其重要性。

在 Flink 中的迭代操作封裝了某一部份需重覆執行的程式碼,實現了類似迴圈的概念。其透過定義 step function 並將之嵌入在一個特殊的迭代操作中,來實現迭代演算法。每一迭代所產生的結果,將會傳遞給下一次迭代。在 Flink 中有兩種迭代操作:批次迭代及差異性迭代。此兩種操作都會在當前的迭代狀態上,反覆的觸發給定的 step function,直到某個終結條件滿足為止。下表列出了批次迭代及 差異性迭代兩者的概觀:
Continue reading “Flink DataSet API #4 – 迭代操作(Iterations)"

Flink DataSet API #3 – 資料集的轉化(1)

上一篇文章中,我們介紹了 Flink DataSet API 中,如何生成資料集以及如何輸出資料集。在這一篇文章,我們將會介紹以下幾個圍繞在資料集轉化相關的主題上:

  • 資料集轉化操作(Transformation Operations):首先將介紹 Flink 中所提供資料轉化(data transformations)的相關操作。
  • 鍵的指定(Specifying Keys):資料的轉化可以將一或多個資料集,透過我們自行定義的轉化函式,轉化為另一個新的資料集。而在資料集的轉化操作中,對於分群(grouping)、排序(sorting)或結合(joining)等,會需要指明該操作所依據的鍵(key),我們會在稍後介紹指定鍵的相關議題。
  • 傳遞函式給于 Flink(Passing Functions to Flink):接下來,我們介紹如何將自行定義的轉化函式傳遞給 Flink 以利後續的執行。
  • 傳遞參數給于函式(Passing Paramteres to Functions):如何將相關參數傳遞給前述的自定義轉化函式。 Continue reading “Flink DataSet API #3 – 資料集的轉化(1)"

Flink DataSet API #2 – 資料集的輸入與輸出

上一篇文章中,以一個簡單的word count範例為出發點,介紹了一個Flink應用程式的基本構成要素。接下來這篇文章,則是要介紹如何從外部獲取欲進行處理的資料,以及相關的資料集輸出方式。對資料集轉化(transformation)的相關操作,則會放在後續的文章中說明。

在本文中,首先我們會簡單介紹在Flink中表示資料集的DataSet類別。接著介紹如何從資料來源取得資料集,以及相關的資料集輸出操作方法。 Continue reading “Flink DataSet API #2 – 資料集的輸入與輸出"

Flink DataSet API #1 – 第一個範例

以下是一個簡單的word count範例程式

import org.apache.flink.api.scala._
object WordCount {
  def main(args: Array[String]) {
    val env = ExecutionEnvironment.getExecutionEnvironment
    val text = env.fromElements(
      "Who's there?",
      "I think I hear them. Stand, ho! Who's there?")

    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
      .map { (_, 1) }
      .groupBy(0)
      .sum(1)

    counts.print()
  }
}

Continue reading “Flink DataSet API #1 – 第一個範例"