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.tw 1st Saturday Meetup: Understanding Flink & Hands-On Flink Streaming

 

第一次的 Flink.tw Saturday Meetup 為大家準備了 Apache Flink 的整體介紹,內容包含上層應用與系統核心的講解。 當天會準備好 Data Source 來讓大家實際串接並且練習以 Flink Streaming API 撰寫即時串流運算程式, 另外也會示範 Flink 如何與其他如 Kafka 和 Elasticsearch 外部系統共同搭建成一個從資料收集到視覺化呈現的簡易 end-to-end 應用。

Continue reading “Flink.tw 1st Saturday Meetup: Understanding Flink & Hands-On Flink Streaming"

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 – 第一個範例"

「Flink Forward 2015 重點整理」:DataStream API Hands-On #1

 

 

此議程為 Flink Forward 2015 的 Flink Training Session 第一堂議程,主要介紹透過 Flink DataStream API 撰寫即時串流運算的叢集程式,適合的對象為幾乎沒有寫過其他例如 Storm、MapReduce 或者 Spark 等分散式運算框架應用程式的初學者。對於已經有類似經驗的人,可以直接快速瀏覽 1、2、4、6 即可,這幾個地方跟其他運算框架有些微的不同。

Continue reading “「Flink Forward 2015 重點整理」:DataStream API Hands-On #1″