久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Flink入門基礎 – 簡介

      一. Flink的引入

              這幾年大數(shù)據(jù)的飛速發(fā)展,出現(xiàn)了很多熱門的開源社區(qū),其中著名的有 Hadoop、Storm,以及后來的 Spark,他們都有著各自專注的應用場景。Spark 掀開了內(nèi)存計算的先河,也以內(nèi)存為賭注,贏得了內(nèi)存計算的飛速發(fā)展。Spark 的火熱或多或少的掩蓋了其他分布式計算的系統(tǒng)身影。就像 Flink,也就在這個時候默默的發(fā)展著。

      在國外一些社區(qū),有很多人將大數(shù)據(jù)的計算引擎分成了 4 代,當然,也有很多人不會認同。我們先姑且這么認為和討論。

      首先第一代的計算引擎,無疑就是 Hadoop 承載的 MapReduce。這里大家應該都不會對 MapReduce 陌生,它將計算分為兩個階段,分別為 Map 和 Reduce。對于上層應用來說,就不得不想方設法去拆分算法,甚至于不得不在上層應用實現(xiàn)多個 Job 的串聯(lián),以完成一個完整的算法,例如迭代計算。

      由于這樣的弊端,催生了支持 DAG 框架的產(chǎn)生。因此,支持 DAG 的框架被劃分為第二代計算引擎。如 Tez 以及更上層的 Oozie。這里我們不去細究各種 DAG 實現(xiàn)之間的區(qū)別,不過對于當時的 Tez 和 Oozie 來說,大多還是批處理的任務。

      接下來就是以 Spark 為代表的第三代的計算引擎。第三代計算引擎的特點主要是 Job 內(nèi)部的 DAG 支持(不跨越 Job),以及強調(diào)的實時計算。在這里,很多人也會認為第三代計算引擎也能夠很好的運行批處理的 Job。

      隨著第三代計算引擎的出現(xiàn),促進了上層應用快速發(fā)展,例如各種迭代計算的性能以及對流計算和 SQL 等的支持。Flink 的誕生就被歸在了第四代。這應該主要表現(xiàn)在 Flink 對流計算的支持,以及更一步的實時性上面。當然 Flink 也可以支持 Batch 的任務,以及 DAG 的運算。

      二. Flink簡介

      Apache Flink是一個框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進行有狀態(tài)計算。Flink設計為在所有常見的集群環(huán)境中運行,以內(nèi)存速度和任何規(guī)模執(zhí)行計算。

      1.無界流和有界流

      任何類型的數(shù)據(jù)都是作為事件流產(chǎn)生的。信用卡交易,傳感器測量,機器日志或網(wǎng)站或移動應用程序上的用戶交互,所有這些數(shù)據(jù)都作為流生成。

      數(shù)據(jù)可以作為無界或有界流處理。

      1. 無界流有一個開始但沒有定義的結(jié)束。它們不會在生成時終止并提供數(shù)據(jù)。必須持續(xù)處理無界流,即必須在攝取事件后立即處理事件。無法等待所有輸入數(shù)據(jù)到達,因為輸入是無界的,并且在任何時間點都不會完成。處理無界數(shù)據(jù)通常要求以特定順序(例如事件發(fā)生的順序)攝取事件,以便能夠推斷結(jié)果完整性。

      2. 有界流具有定義的開始和結(jié)束。可以在執(zhí)行任何計算之前通過攝取所有數(shù)據(jù)來處理有界流。處理有界流不需要有序攝取,因為可以始終對有界數(shù)據(jù)集進行排序。有界流的處理也稱為批處理。

      Flink入門基礎 - 簡介

      Apache Flink擅長處理無界和有界數(shù)據(jù)集。精確控制時間和狀態(tài)使Flink的運行時能夠在無界流上運行任何類型的應用程序。有界流由算法和數(shù)據(jù)結(jié)構內(nèi)部處理,這些算法和數(shù)據(jù)結(jié)構專門針對固定大小的數(shù)據(jù)集而設計,從而產(chǎn)生出色的性能。

      2.隨處部署應用程序

      Apache Flink是一個分布式系統(tǒng),需要計算資源才能執(zhí)行應用程序。Flink與所有常見的集群資源管理器(如Hadoop YARNApache MesosKubernetes)集成,但也可以設置為作為獨立集群運行。

      Flink旨在很好地適用于之前列出的每個資源管理器。這是通過特定于資源管理器的部署模式實現(xiàn)的,這些模式允許Flink以其慣用的方式與每個資源管理器進行交互。

      部署Flink應用程序時,F(xiàn)link會根據(jù)應用程序配置的并行性自動識別所需資源,并從資源管理器請求它們。如果發(fā)生故障,F(xiàn)link會通過請求新資源來替換發(fā)生故障的容器。提交或控制應用程序的所有通信都通過REST調(diào)用進行。這簡化了Flink在許多環(huán)境中的集成。

      3.以任何比例運行應用程序

      Flink旨在以任何規(guī)模運行有狀態(tài)流應用程序。應用程序可以并行化為數(shù)千個在集群中分布和同時執(zhí)行的任務。因此,應用程序可以利用幾乎無限量的CPU,主內(nèi)存,磁盤和網(wǎng)絡IO。而且,F(xiàn)link可以輕松維護非常大的應用程序狀態(tài)。其異步和增量檢查點算法確保對處理延遲的影響最小,同時保證一次性狀態(tài)一致性。

      用戶報告了在其生產(chǎn)環(huán)境中運行的Flink應用程序的可擴展性數(shù)字令人印象深刻,例如

      • 應用程序每天處理數(shù)萬億個事件,
      • 應用程序維護多個TB的狀態(tài),以及
      • 應用程序在數(shù)千個內(nèi)核的運行。

      4.利用內(nèi)存中的性能

      有狀態(tài)Flink應用程序針對本地狀態(tài)訪問進行了優(yōu)化。任務狀態(tài)始終保留在內(nèi)存中,或者,如果狀態(tài)大小超過可用內(nèi)存,則保存在訪問高效的磁盤上數(shù)據(jù)結(jié)構中。因此,任務通過訪問本地(通常是內(nèi)存中)狀態(tài)來執(zhí)行所有計算,從而產(chǎn)生非常低的處理延遲。Flink通過定期和異步檢查本地狀態(tài)到持久存儲來保證在出現(xiàn)故障時的一次狀態(tài)一致性。

      Flink入門基礎 - 簡介

      5.Flink的架構

          Flink 可以支持本地的快速迭代,以及一些環(huán)形的迭代任務。并且 Flink 可以定制化內(nèi)存管理。在這點,如果要對比 Flink 和 Spark 的話,F(xiàn)link 并沒有將內(nèi)存完全交給應用層。這也是為什么 Spark 相對于 Flink,更容易出現(xiàn) OOM 的原因(out of memory)。就框架本身與應用場景來說,F(xiàn)link 更相似與 Storm。如果之前了解過 Storm 或者 Flume 的讀者,可能會更容易理解 Flink 的架構和很多概念。下面讓我們先來看下 Flink 的架構圖。

       Flink入門基礎 - 簡介

      我們可以了解到 Flink 幾個最基礎的概念,Client、JobManager 和 TaskManager。Client 用來提交任務給 JobManager,JobManager 分發(fā)任務給 TaskManager 去執(zhí)行,然后 TaskManager 會心跳的匯報任務狀態(tài)??吹竭@里,有的人應該已經(jīng)有種回到 Hadoop 一代的錯覺。確實,從架構圖去看,JobManager 很像當年的 JobTracker,TaskManager 也很像當年的 TaskTracker。然而有一個最重要的區(qū)別就是 TaskManager 之間是是流(Stream)。其次,Hadoop 一代中,只有 Map 和 Reduce 之間的 Shuffle,而對 Flink 而言,可能是很多級,并且在 TaskManager 內(nèi)部和 TaskManager 之間都會有數(shù)據(jù)傳遞,而不像 Hadoop,是固定的 Map 到 Reduce。

      三. Flink技術特點

      1. 流處理特性

      • 支持高吞吐、低延遲、高性能的流處理
      • 支持帶有事件時間的窗口(Window)操作
      • 支持有狀態(tài)計算的Exactly-once語義
      • 支持高度靈活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
      • 支持具有Backpressure功能的持續(xù)流模型
      • 支持基于輕量級分布式快照(Snapshot)實現(xiàn)的容錯
      • 一個運行時同時支持Batch on Streaming處理和Streaming處理
      • Flink在JVM內(nèi)部實現(xiàn)了自己的內(nèi)存管理
      • 支持迭代計算
      • 支持程序自動優(yōu)化:避免特定情況下Shuffle、排序等昂貴操作,中間結(jié)果有必要進行緩存

      2. API支持

      • 對Streaming數(shù)據(jù)類應用,提供DataStream API
      • 對批處理類應用,提供DataSet API(支持Java/Scala)

      3. Libraries支持

      • 支持機器學習(FlinkML)
      • 支持圖分析(Gelly)
      • 支持關系數(shù)據(jù)處理(Table)
      • 支持復雜事件處理(CEP)

      4. 整合支持

      • 支持Flink on YARN
      • 支持HDFS
      • 支持來自Kafka的輸入數(shù)據(jù)
      • 支持Apache HBase
      • 支持Hadoop程序
      • 支持Tachyon
      • 支持ElasticSearch
      • 支持RabbitMQ
      • 支持Apache Storm
      • 支持S3
      • 支持XtreemFS

      5. Flink生態(tài)圈

      Flink 首先支持了 Scala 和 Java 的 API,Python 也正在測試中。Flink 通過 Gelly 支持了圖操作,還有機器學習的 FlinkML。Table 是一種接口化的 SQL 支持,也就是 API 支持,而不是文本化的 SQL 解析和執(zhí)行。對于完整的 Stack 我們可以參考下圖。

       Flink入門基礎 - 簡介

           Flink 為了更廣泛的支持大數(shù)據(jù)的生態(tài)圈,其下也實現(xiàn)了很多 Connector 的子項目。最熟悉的,當然就是與 Hadoop HDFS 集成。其次,F(xiàn)link 也宣布支持了 Tachyon、S3 以及 MapRFS。不過對于 Tachyon 以及 S3 的支持,都是通過 Hadoop HDFS 這層包裝實現(xiàn)的,也就是說要使用 Tachyon 和 S3,就必須有 Hadoop,而且要更改 Hadoop 的配置(core-site.xml)。如果瀏覽 Flink 的代碼目錄,我們就會看到更多 Connector 項目,例如 Flume 和 Kafka。

      四. Flink的編程模型

      Flink提供不同級別的抽象來開發(fā)流/批處理應用程序。

      Flink入門基礎 - 簡介

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號