文章編號:11498時間:2024-10-01人氣:
HDFS運行流程:客戶端通過調用FileSystem的open方法獲取需要讀取的數據文件。
HDFS通過RPC來調用NameNode,獲取要讀取的數據文件對應的block存放在哪些DataNode上。 客戶端先到距離最近的DataNode上調用FSDataInputStream的read方法,將數據從DataNode傳輸到客戶端。
當讀取完所有的數據后,FSDataInputstream會關閉與DataNode的連接,尋找下一塊的最佳位置(即距離最近的下一塊)。 當客戶端完成讀取操作之后,會調用FSDataInputStream的close方法完成對資源的關閉工作。 這個流程確保了數據的可靠存儲和高效訪問,滿足了大規模數據處理的需求。
HDFS的優勢
1、高容錯性:HDFS采用了數據塊的副本機制,當某個數據塊丟失或損壞時,可以從其他副本中恢復,確保了數據的可靠性和可用性。
2、可擴展性:HDFS可以在普通的硬件上運行,并且可以通過增加節點來擴展存儲和計算能力,滿足了大規模數據處理的需求。
3、簡單一致性模型:HDFS采用了“一次寫入,多次讀取”的模式,數據一旦寫入,就被永久存儲,并且可以隨時讀取,保證了數據的一致性。
4、支持大規模數據:由于數據被分散存儲在多個節點上,HDFS可以處理GB、TB甚至PB級別的數據,適合存儲和分析大規模數據集。
5、支持多種文件類型:除了常規的文件,HDFS還支持圖片、視頻、音頻等多種文件類型,可以滿足各種應用的需求。
學習大數據肯定需要學習Hadoop技術,Hadoop在大數據技術體系中的地位至關重要,Hadoop是大數據技術的基礎,對Hadoop基礎知識的掌握的扎實程度,會決定在大數據技術道路上走多遠。
Hadoop學習之后,還得學習Spark,它是一種與 Hadoop 相似的開源集群計算環境,擁有Hadoop MapReduce所具有的優點,Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。
這是大數據技術學習的兩大重點。
HDFS(Hadoop Distributed File System)不被歸類為NoSQL數據庫,因為它是分布式文件系統而不是數據庫。 HDFS是Apache Hadoop生態系統的一部分,旨在存儲和處理大規模數據集。 盡管HDFS非常適合用于存儲和處理大規模的結構化和非結構化數據,但作為數據庫,它存在以下一些不足之處:1. 缺乏事務支持:HDFS不支持事務,這意味著無法保證數據的一致性和完整性。 如果需要強一致性和事務支持的數據庫操作,HDFS并不是一個理想的選擇。 2. 有限的查詢能力:HDFS的設計目的是高吞吐量的批量處理,而不是實時交互式查詢。 雖然Hadoop生態系統提供了一些查詢工具(如Hive、Pig等),但相對于傳統的關系型數據庫,HDFS的查詢能力仍然有限。 3. 無結構化數據管理:HDFS主要用于存儲和處理大規模的非結構化數據(如日志文件、圖像、視頻等),而對于結構化數據的管理相對較弱。 與傳統的關系型數據庫相比,HDFS缺乏對表關系、查詢優化和數據約束的內建支持。 4. 難以更新和刪除數據:HDFS的設計重點是數據追加和批量處理,而不是頻繁的數據更新和刪除。 在HDFS上更新和刪除數據可能需要執行較為復雜的操作,且性能可能受到影響。 5. 數據一致性的挑戰:由于HDFS是分布式的,數據的一致性可能面臨挑戰。 在復制模式下,HDFS會將數據復制到多個節點上,但由于數據復制的異步性質,數據的讀取一致性可能受到影響。 綜上所述,盡管HDFS具有存儲和處理大規模數據的優勢,但作為數據庫,它仍然存在一些不足之處。 對于需要事務支持、強一致性和復雜查詢操作的應用場景,傳統的關系型數據庫或NoSQL數據庫可能更為適合。
五種大數據處理架構大數據是收集、整理、處理大容量數據集,并從中獲得見解所需的非傳統戰略和技術的總稱。 雖然處理數據所需的計算能力或存儲容量早已超過一臺計算機的上限,但這種計算類型的普遍性、規模,以及價值在最近幾年才經歷了大規模擴展。 本文將介紹大數據系統一個最基本的組件:處理框架。 處理框架負責對系統中的數據進行計算,例如處理從非易失存儲中讀取的數據,或處理剛剛攝入到系統中的數據。 數據的計算則是指從大量單一數據點中提取信息和見解的過程。 下文將介紹這些框架:· 僅批處理框架:Apache Hadoop· 僅流處理框架:Apache StormApache Samza· 混合框架:Apache SparkApache Flink大數據處理框架是什么?處理框架和處理引擎負責對數據系統中的數據進行計算。 雖然“引擎”和“框架”之間的區別沒有什么權威的定義,但大部分時候可以將前者定義為實際負責處理數據操作的組件,后者則可定義為承擔類似作用的一系列組件。 例如Apache Hadoop可以看作一種以MapReduce作為默認處理引擎的處理框架。 引擎和框架通??梢韵嗷ヌ鎿Q或同時使用。 例如另一個框架Apache Spark可以納入Hadoop并取代MapReduce。 組件之間的這種互操作性是大數據系統靈活性如此之高的原因之一。 雖然負責處理生命周期內這一階段數據的系統通常都很復雜,但從廣義層面來看它們的目標是非常一致的:通過對數據執行操作提高理解能力,揭示出數據蘊含的模式,并針對復雜互動獲得見解。 為了簡化這些組件的討論,我們會通過不同處理框架的設計意圖,按照所處理的數據狀態對其進行分類。 一些系統可以用批處理方式處理數據,一些系統可以用流方式處理連續不斷流入系統的數據。 此外還有一些系統可以同時處理這兩類數據。 在深入介紹不同實現的指標和結論之前,首先需要對不同處理類型的概念進行一個簡單的介紹。 批處理系統批處理在大數據世界有著悠久的歷史。 批處理主要操作大容量靜態數據集,并在計算過程完成后返回結果。 批處理模式中使用的數據集通常符合下列特征…· 有界:批處理數據集代表數據的有限集合· 持久:數據通常始終存儲在某種類型的持久存儲位置中· 大量:批處理操作通常是處理極為海量數據集的唯一方法批處理非常適合需要訪問全套記錄才能完成的計算工作。 例如在計算總數和平均數時,必須將數據集作為一個整體加以處理,而不能將其視作多條記錄的集合。 這些操作要求在計算進行過程中數據維持自己的狀態。 需要處理大量數據的任務通常最適合用批處理操作進行處理。 無論直接從持久存儲設備處理數據集,或首先將數據集載入內存,批處理系統在設計過程中就充分考慮了數據的量,可提供充足的處理資源。 由于批處理在應對大量持久數據方面的表現極為出色,因此經常被用于對歷史數據進行分析。 大量數據的處理需要付出大量時間,因此批處理不適合對處理時間要求較高的場合。 Apache HadoopApache Hadoop是一種專用于批處理的處理框架。 Hadoop是首個在開源社區獲得極大關注的大數據框架。 基于谷歌有關海量數據處理所發表的多篇論文與經驗的Hadoop重新實現了相關算法和組件堆棧,讓大規模批處理技術變得更易用。 新版Hadoop包含多個組件,即多個層,通過配合使用可處理批數據:· HDFS:HDFS是一種分布式文件系統層,可對集群節點間的存儲和復制進行協調。 HDFS確保了無法避免的節點故障發生后數據依然可用,可將其用作數據來源,可用于存儲中間態的處理結果,并可存儲計算的最終結果。 · YARN:YARN是Yet Another Resource Negotiator(另一個資源管理器)的縮寫,可充當Hadoop堆棧的集群協調組件。 該組件負責協調并管理底層資源和調度作業的運行。 通過充當集群資源的接口,YARN使得用戶能在Hadoop集群中使用比以往的迭代方式運行更多類型的工作負載。 · MapReduce:MapReduce是Hadoop的原生批處理引擎。 批處理模式Hadoop的處理功能來自MapReduce引擎。 MapReduce的處理技術符合使用鍵值對的map、shuffle、reduce算法要求。 基本處理過程包括:· 從HDFS文件系統讀取數據集· 將數據集拆分成小塊并分配給所有可用節點· 針對每個節點上的數據子集進行計算(計算的中間態結果會重新寫入HDFS)· 重新分配中間態結果并按照鍵進行分組· 通過對每個節點計算的結果進行匯總和組合對每個鍵的值進行“Reducing”· 將計算而來的最終結果重新寫入 HDFS優勢和局限由于這種方法嚴重依賴持久存儲,每個任務需要多次執行讀取和寫入操作,因此速度相對較慢。 但另一方面由于磁盤空間通常是服務器上最豐富的資源,這意味著MapReduce可以處理非常海量的數據集。 同時也意味著相比其他類似技術,Hadoop的MapReduce通??梢栽诹畠r硬件上運行,因為該技術并不需要將一切都存儲在內存中。 MapReduce具備極高的縮放潛力,生產環境中曾經出現過包含數萬個節點的應用。 MapReduce的學習曲線較為陡峭,雖然Hadoop生態系統的其他周邊技術可以大幅降低這一問題的影響,但通過Hadoop集群快速實現某些應用時依然需要注意這個問題。 圍繞Hadoop已經形成了遼闊的生態系統,Hadoop集群本身也經常被用作其他軟件的組成部件。 很多其他處理框架和引擎通過與Hadoop集成也可以使用HDFS和YARN資源管理器。 總結Apache Hadoop及其MapReduce處理引擎提供了一套久經考驗的批處理模型,最適合處理對時間要求不高的非常大規模數據集。 通過非常低成本的組件即可搭建完整功能的Hadoop集群,使得這一廉價且高效的處理技術可以靈活應用在很多案例中。 與其他框架和引擎的兼容與集成能力使得Hadoop可以成為使用不同技術的多種工作負載處理平臺的底層基礎。 流處理系統流處理系統會對隨時進入系統的數據進行計算。 相比批處理模式,這是一種截然不同的處理方式。 流處理方式無需針對整個數據集執行操作,而是對通過系統傳輸的每個數據項執行操作。 · 流處理中的數據集是“無邊界”的,這就產生了幾個重要的影響:· 完整數據集只能代表截至目前已經進入到系統中的數據總量。 · 工作數據集也許更相關,在特定時間只能代表某個單一數據項。 處理工作是基于事件的,除非明確停止否則沒有“盡頭”。 處理結果立刻可用,并會隨著新數據的抵達繼續更新。 流處理系統可以處理幾乎無限量的數據,但同一時間只能處理一條(真正的流處理)或很少量(微批處理,Micro-batch Processing)數據,不同記錄間只維持最少量的狀態。 雖然大部分系統提供了用于維持某些狀態的方法,但流處理主要針對副作用更少,更加功能性的處理(Functional processing)進行優化。 功能性操作主要側重于狀態或副作用有限的離散步驟。 針對同一個數據執行同一個操作會或略其他因素產生相同的結果,此類處理非常適合流處理,因為不同項的狀態通常是某些困難、限制,以及某些情況下不需要的結果的結合體。 因此雖然某些類型的狀態管理通常是可行的,但這些框架通常在不具備狀態管理機制時更簡單也更高效。 此類處理非常適合某些類型的工作負載。 有近實時處理需求的任務很適合使用流處理模式。 分析、服務器或應用程序錯誤日志,以及其他基于時間的衡量指標是最適合的類型,因為對這些領域的數據變化做出響應對于業務職能來說是極為關鍵的。 流處理很適合用來處理必須對變動或峰值做出響應,并且關注一段時間內變化趨勢的數據。 Apache StormApache Storm是一種側重于極低延遲的流處理框架,也許是要求近實時處理的工作負載的最佳選擇。 該技術可處理非常大量的數據,通過比其他解決方案更低的延遲提供結果。 流處理模式Storm的流處理可對框架中名為Topology(拓撲)的DAG(Directed Acyclic Graph,有向無環圖)進行編排。 這些拓撲描述了當數據片段進入系統后,需要對每個傳入的片段執行的不同轉換或步驟。 拓撲包含:· Stream:普通的數據流,這是一種會持續抵達系統的無邊界數據。 · Spout:位于拓撲邊緣的數據流來源,例如可以是API或查詢等,從這里可以產生待處理的數據。 · Bolt:Bolt代表需要消耗流數據,對其應用操作,并將結果以流的形式進行輸出的處理步驟。 Bolt需要與每個Spout建立連接,隨后相互連接以組成所有必要的處理。 在拓撲的尾部,可以使用最終的Bolt輸出作為相互連接的其他系統的輸入。 Storm背后的想法是使用上述組件定義大量小型的離散操作,隨后將多個組件組成所需拓撲。 默認情況下Storm提供了“至少一次”的處理保證,這意味著可以確保每條消息至少可以被處理一次,但某些情況下如果遇到失敗可能會處理多次。 Storm無法確??梢园凑仗囟樞蛱幚硐ⅰ? 為了實現嚴格的一次處理,即有狀態處理,可以使用一種名為Trident的抽象。 嚴格來說不使用Trident的Storm通??煞Q之為Core Storm。 Trident會對Storm的處理能力產生極大影響,會增加延遲,為處理提供狀態,使用微批模式代替逐項處理的純粹流處理模式。 為避免這些問題,通常建議Storm用戶盡可能使用Core Storm。 然而也要注意,Trident對內容嚴格的一次處理保證在某些情況下也比較有用,例如系統無法智能地處理重復消息時。 如果需要在項之間維持狀態,例如想要計算一個小時內有多少用戶點擊了某個鏈接,此時Trident將是你唯一的選擇。 盡管不能充分發揮框架與生俱來的優勢,但Trident提高了Storm的靈活性。 Trident拓撲包含:· 流批(Stream batch):這是指流數據的微批,可通過分塊提供批處理語義。 · 操作(Operation):是指可以對數據執行的批處理過程。 優勢和局限目前來說Storm可能是近實時處理領域的最佳解決方案。 該技術可以用極低延遲處理數據,可用于希望獲得最低延遲的工作負載。 如果處理速度直接影響用戶體驗,例如需要將處理結果直接提供給訪客打開的網站頁面,此時Storm將會是一個很好的選擇。 Storm與Trident配合使得用戶可以用微批代替純粹的流處理。 雖然借此用戶可以獲得更大靈活性打造更符合要求的工具,但同時這種做法會削弱該技術相比其他解決方案最大的優勢。 話雖如此,但多一種流處理方式總是好的。 Core Storm無法保證消息的處理順序。 Core Storm為消息提供了“至少一次”的處理保證,這意味著可以保證每條消息都能被處理,但也可能發生重復。 Trident提供了嚴格的一次處理保證,可以在不同批之間提供順序處理,但無法在一個批內部實現順序處理。 在互操作性方面,Storm可與Hadoop的YARN資源管理器進行集成,因此可以很方便地融入現有Hadoop部署。 除了支持大部分處理框架,Storm還可支持多種語言,為用戶的拓撲定義提供了更多選擇。 總結對于延遲需求很高的純粹的流處理工作負載,Storm可能是最適合的技術。 該技術可以保證每條消息都被處理,可配合多種編程語言使用。 由于Storm無法進行批處理,如果需要這些能力可能還需要使用其他軟件。 如果對嚴格的一次處理保證有比較高的要求,此時可考慮使用Trident。 不過這種情況下其他流處理框架也許更適合。 Apache SamzaApache Samza是一種與Apache Kafka消息系統緊密綁定的流處理框架。 雖然Kafka可用于很多流處理系統,但按照設計,Samza可以更好地發揮Kafka獨特的架構優勢和保障。 該技術可通過Kafka提供容錯、緩沖,以及狀態存儲。 Samza可使用YARN作為資源管理器。 這意味著默認情況下需要具備Hadoop集群(至少具備HDFS和YARN),但同時也意味著Samza可以直接使用YARN豐富的內建功能。 流處理模式Samza依賴Kafka的語義定義流的處理方式。 Kafka在處理數據時涉及下列概念:· Topic(話題):進入Kafka系統的每個數據流可稱之為一個話題。 話題基本上是一種可供消耗方訂閱的,由相關信息組成的數據流。 · Partition(分區):為了將一個話題分散至多個節點,Kafka會將傳入的消息劃分為多個分區。 分區的劃分將基于鍵(Key)進行,這樣可以保證包含同一個鍵的每條消息可以劃分至同一個分區。 分區的順序可獲得保證。 · Broker(代理):組成Kafka集群的每個節點也叫做代理。 · Producer(生成方):任何向Kafka話題寫入數據的組件可以叫做生成方。 生成方可提供將話題劃分為分區所需的鍵。 · Consumer(消耗方):任何從Kafka讀取話題的組件可叫做消耗方。 消耗方需要負責維持有關自己分支的信息,這樣即可在失敗后知道哪些記錄已經被處理過了。 由于Kafka相當于永恒不變的日志,Samza也需要處理永恒不變的數據流。 這意味著任何轉換創建的新數據流都可被其他組件所使用,而不會對最初的數據流產生影響。 優勢和局限乍看之下,Samza對Kafka類查詢系統的依賴似乎是一種限制,然而這也可以為系統提供一些獨特的保證和功能,這些內容也是其他流處理系統不具備的。 例如Kafka已經提供了可以通過低延遲方式訪問的數據存儲副本,此外還可以為每個數據分區提供非常易用且低成本的多訂閱者模型。 所有輸出內容,包括中間態的結果都可寫入到Kafka,并可被下游步驟獨立使用。 這種對Kafka的緊密依賴在很多方面類似于MapReduce引擎對HDFS的依賴。 雖然在批處理的每個計算之間對HDFS的依賴導致了一些嚴重的性能問題,但也避免了流處理遇到的很多其他問題。 Samza與Kafka之間緊密的關系使得處理步驟本身可以非常松散地耦合在一起。 無需事先協調,即可在輸出的任何步驟中增加任意數量的訂閱者,對于有多個團隊需要訪問類似數據的組織,這一特性非常有用。 多個團隊可以全部訂閱進入系統的數據話題,或任意訂閱其他團隊對數據進行過某些處理后創建的話題。 這一切并不會對數據庫等負載密集型基礎架構造成額外的壓力。 直接寫入Kafka還可避免回壓(Backpressure)問題。 回壓是指當負載峰值導致數據流入速度超過組件實時處理能力的情況,這種情況可能導致處理工作停頓并可能丟失數據。 按照設計,Kafka可以將數據保存很長時間,這意味著組件可以在方便的時候繼續進行處理,并可直接重啟動而無需擔心造成任何后果。 Samza可以使用以本地鍵值存儲方式實現的容錯檢查點系統存儲數據。 這樣Samza即可獲得“至少一次”的交付保障,但面對由于數據可能多次交付造成的失敗,該技術無法對匯總后狀態(例如計數)提供精確恢復。 Samza提供的高級抽象使其在很多方面比Storm等系統提供的基元(Primitive)更易于配合使用。 目前Samza只支持JVM語言,這意味著它在語言支持方面不如Storm靈活。 總結對于已經具備或易于實現Hadoop和Kafka的環境,Apache Samza是流處理工作負載一個很好的選擇。 Samza本身很適合有多個團隊需要使用(但相互之間并不一定緊密協調)不同處理階段的多個數據流的組織。 Samza可大幅簡化很多流處理工作,可實現低延遲的性能。 如果部署需求與當前系統不兼容,也許并不適合使用,但如果需要極低延遲的處理,或對嚴格的一次處理語義有較高需求,此時依然適合考慮。 混合處理系統:批處理和流處理一些處理框架可同時處理批處理和流處理工作負載。 這些框架可以用相同或相關的組件和API處理兩種類型的數據,借此讓不同的處理需求得以簡化。 如你所見,這一特性主要是由Spark和Flink實現的,下文將介紹這兩種框架。 實現這樣的功能重點在于兩種不同處理模式如何進行統一,以及要對固定和不固定數據集之間的關系進行何種假設。 雖然側重于某一種處理類型的項目會更好地滿足具體用例的要求,但混合框架意在提供一種數據處理的通用解決方案。 這種框架不僅可以提供處理數據所需的方法,而且提供了自己的集成項、庫、工具,可勝任圖形分析、機器學習、交互式查詢等多種任務。 Apache SparkApache Spark是一種包含流處理能力的下一代批處理框架。 與Hadoop的MapReduce引擎基于各種相同原則開發而來的Spark主要側重于通過完善的內存計算和處理優化機制加快批處理工作負載的運行速度。 Spark可作為獨立集群部署(需要相應存儲層的配合),或可與Hadoop集成并取代MapReduce引擎。 批處理模式與MapReduce不同,Spark的數據處理工作全部在內存中進行,只在一開始將數據讀入內存,以及將最終結果持久存儲時需要與存儲層交互。 所有中間態的處理結果均存儲在內存中。 雖然內存中處理方式可大幅改善性能,Spark在處理與磁盤有關的任務時速度也有很大提升,因為通過提前對整個任務集進行分析可以實現更完善的整體式優化。 為此Spark可創建代表所需執行的全部操作,需要操作的數據,以及操作和數據之間關系的Directed Acyclic Graph(有向無環圖),即DAG,借此處理器可以對任務進行更智能的協調。 為了實現內存中批計算,Spark會使用一種名為Resilient Distributed Dataset(彈性分布式數據集),即RDD的模型來處理數據。 這是一種代表數據集,只位于內存中,永恒不變的結構。 針對RDD執行的操作可生成新的RDD。 每個RDD可通過世系(Lineage)回溯至父級RDD,并最終回溯至磁盤上的數據。 Spark可通過RDD在無需將每個操作的結果寫回磁盤的前提下實現容錯。 流處理模式流處理能力是由Spark Streaming實現的。 Spark本身在設計上主要面向批處理工作負載,為了彌補引擎設計和流處理工作負載特征方面的差異,Spark實現了一種叫做微批(Micro-batch)*的概念。 在具體策略方面該技術可以將數據流視作一系列非常小的“批”,借此即可通過批處理引擎的原生語義進行處理。 Spark Streaming會以亞秒級增量對流進行緩沖,隨后這些緩沖會作為小規模的固定數據集進行批處理。 這種方式的實際效果非常好,但相比真正的流處理框架在性能方面依然存在不足。 優勢和局限使用Spark而非Hadoop MapReduce的主要原因是速度。 在內存計算策略和先進的DAG調度等機制的幫助下,Spark可以用更快速度處理相同的數據集。 Spark的另一個重要優勢在于多樣性。 該產品可作為獨立集群部署,或與現有Hadoop集群集成。 該產品可運行批處理和流處理,運行一個集群即可處理不同類型的任務。 除了引擎自身的能力外,圍繞Spark還建立了包含各種庫的生態系統,可為機器學習、交互式查詢等任務提供更好的支持。 相比MapReduce,Spark任務更是“眾所周知”地易于編寫,因此可大幅提高生產力。 為流處理系統采用批處理的方法,需要對進入系統的數據進行緩沖。 緩沖機制使得該技術可以處理非常大量的傳入數據,提高整體吞吐率,但等待緩沖區清空也會導致延遲增高。 這意味著Spark Streaming可能不適合處理對延遲有較高要求的工作負載。 由于內存通常比磁盤空間更貴,因此相比基于磁盤的系統,Spark成本更高。 然而處理速度的提升意味著可以更快速完成任務,在需要按照小時數為資源付費的環境中,這一特性通??梢缘窒黾拥某杀尽? Spark內存計算這一設計的另一個后果是,如果部署在共享的集群中可能會遇到資源不足的問題。 相比HadoopMapReduce,Spark的資源消耗更大,可能會對需要在同一時間使用集群的其他任務產生影響。 從本質來看,Spark更不適合與Hadoop堆棧的其他組件共存一處。 總結Spark是多樣化工作負載處理任務的最佳選擇。 Spark批處理能力以更高內存占用為代價提供了無與倫比的速度優勢。 對于重視吞吐率而非延遲的工作負載,則比較適合使用Spark Streaming作為流處理解決方案。 Apache FlinkApache Flink是一種可以處理批處理任務的流處理框架。 該技術可將批處理數據視作具備有限邊界的數據流,借此將批處理任務作為流處理的子集加以處理。 為所有處理任務采取流處理為先的方法會產生一系列有趣的副作用。 這種流處理為先的方法也叫做KAppa架構,與之相對的是更加被廣為人知的Lambda架構(該架構中使用批處理作為主要處理方法,使用流作為補充并提供早期未經提煉的結果)。 Kappa架構中會對一切進行流處理,借此對模型進行簡化,而這一切是在最近流處理引擎逐漸成熟后才可行的。 流處理模型Flink的流處理模型在處理傳入數據時會將每一項視作真正的數據流。 Flink提供的DataStream API可用于處理無盡的數據流。 Flink可配合使用的基本組件包括:· Stream(流)是指在系統中流轉的,永恒不變的無邊界數據集· Operator(操作方)是指針對數據流執行操作以產生其他數據流的功能· Source(源)是指數據流進入系統的入口點· Sink(槽)是指數據流離開Flink系統后進入到的位置,槽可以是數據庫或到其他系統的連接器為了在計算過程中遇到問題后能夠恢復,流處理任務會在預定時間點創建快照。 為了實現狀態存儲,Flink可配合多種狀態后端系統使用,具體取決于所需實現的復雜度和持久性級別。 此外Flink的流處理能力還可以理解“事件時間”這一概念,這是指事件實際發生的時間,此外該功能還可以處理會話。 這意味著可以通過某種有趣的方式確保執行順序和分組。 批處理模型Flink的批處理模型在很大程度上僅僅是對流處理模型的擴展。 此時模型不再從持續流中讀取數據,而是從持久存儲中以流的形式讀取有邊界的數據集。 Flink會對這些處理模型使用完全相同的運行時。 Flink可以對批處理工作負載實現一定的優化。 例如由于批處理操作可通過持久存儲加以支持,Flink可以不對批處理工作負載創建快照。 數據依然可以恢復,但常規處理操作可以執行得更快。 另一個優化是對批處理任務進行分解,這樣即可在需要的時候調用不同階段和組件。 借此Flink可以與集群的其他用戶更好地共存。 對任務提前進行分析使得Flink可以查看需要執行的所有操作、數據集的大小,以及下游需要執行的操作步驟,借此實現進一步的優化。 優勢和局限Flink目前是處理框架領域一個獨特的技術。 雖然Spark也可以執行批處理和流處理,但Spark的流處理采取的微批架構使其無法適用于很多用例。 Flink流處理為先的方法可提供低延遲,高吞吐率,近乎逐項處理的能力。 Flink的很多組件是自行管理的。 雖然這種做法較為罕見,但出于性能方面的原因,該技術可自行管理內存,無需依賴原生的Java垃圾回收機制。 與Spark不同,待處理數據的特征發生變化后Flink無需手工優化和調整,并且該技術也可以自行處理數據分區和自動緩存等操作。 Flink會通過多種方式對工作進行分許進而優化任務。 這種分析在部分程度上類似于SQL查詢規劃器對關系型數據庫所做的優化,可針對特定任務確定最高效的實現方法。 該技術還支持多階段并行執行,同時可將受阻任務的數據集合在一起。 對于迭代式任務,出于性能方面的考慮,Flink會嘗試在存儲數據的節點上執行相應的計算任務。 此外還可進行“增量迭代”,或僅對數據中有改動的部分進行迭代。 在用戶工具方面,Flink提供了基于Web的調度視圖,借此可輕松管理任務并查看系統狀態。 用戶也可以查看已提交任務的優化方案,借此了解任務最終是如何在集群中實現的。 對于分析類任務,Flink提供了類似SQL的查詢,圖形化處理,以及機器學習庫,此外還支持內存計算。 Flink能很好地與其他組件配合使用。 如果配合Hadoop 堆棧使用,該技術可以很好地融入整個環境,在任何時候都只占用必要的資源。 該技術可輕松地與YARN、HDFS和Kafka 集成。 在兼容包的幫助下,Flink還可以運行為其他處理框架,例如Hadoop和Storm編寫的任務。 目前Flink最大的局限之一在于這依然是一個非常“年幼”的項目。 現實環境中該項目的大規模部署尚不如其他處理框架那么常見,對于Flink在縮放能力方面的局限目前也沒有較為深入的研究。 隨著快速開發周期的推進和兼容包等功能的完善,當越來越多的組織開始嘗試時,可能會出現越來越多的Flink部署總結Flink提供了低延遲流處理,同時可支持傳統的批處理任務。 Flink也許最適合有極高流處理需求,并有少量批處理任務的組織。 該技術可兼容原生Storm和Hadoop程序,可在YARN管理的集群上運行,因此可以很方便地進行評估。 快速進展的開發工作使其值得被大家關注。 結論大數據系統可使用多種處理技術。 對于僅需要批處理的工作負載,如果對時間不敏感,比其他解決方案實現成本更低的Hadoop將會是一個好選擇。 對于僅需要流處理的工作負載,Storm可支持更廣泛的語言并實現極低延遲的處理,但默認配置可能產生重復結果并且無法保證順序。 Samza與YARN和Kafka緊密集成可提供更大靈活性,更易用的多團隊使用,以及更簡單的復制和狀態管理。 對于混合型工作負載,Spark可提供高速批處理和微批處理模式的流處理。 該技術的支持更完善,具備各種集成庫和工具,可實現靈活的集成。 Flink提供了真正的流處理并具備批處理能力,通過深度優化可運行針對其他平臺編寫的任務,提供低延遲的處理,但實際應用方面還為時過早。 最適合的解決方案主要取決于待處理數據的狀態,對處理所需時間的需求,以及希望得到的結果。 具體是使用全功能解決方案或主要側重于某種項目的解決方案,這個問題需要慎重權衡。 隨著逐漸成熟并被廣泛接受,在評估任何新出現的創新型解決方案時都需要考慮類似的問題。
那我就根據這兩三年的研究與工作經歷,說說如今的情況。
傳統行業,尤其是政府,醫療,學校和大企業,基本上還是Oracle應用最廣,其次就是DB2。 反而是WebLogic和WebSphere這些中間件基本上隨著經典javaee的沒落,已經逐步退出歷史舞臺,被富前端和微服務框架的輕量級組合所替代。
傳統行業的很多新項目也大量開始應用MySQL,因為輕量級數據庫的前期成本很低,可以保證項目預算夠用,所以主要是新項目居多,面向互聯網連接的項目也居多。 這些系統一般不會像Oracle一樣承擔關鍵性業務的數據存儲,所以選擇什么樣的數據庫都是開發公司自己的選擇決定。
目前有大量企業都開始上云,大家買云服務以阿里云ecs為主,總體上阿里云還是比較穩定,那么對于云上數據庫的穩定有要求的企業一般都會選擇阿里云主打的的rds系列,MySQL居多,PostgreSQL也開始逐漸被認可。
說到PostgreSQL,的確這兩年PG風頭正勁,以前我的文章也提到過我做過的互聯網醫療產品,其架構設計就選擇采用了PostgreSQL,主要就是看中PostgreSQL在生產上的穩定性極高,而且成本很低。 尤其是精通Linux服務的架構師,對于PostgreSQL更容易掌握。
更具體地說就是使用PostgreSQL的關鍵因素主要還是業務數據很關鍵,因為我們當時承載的是互聯網醫療數據,醫療數據自身屬性就很關鍵!所以穩定和安全都是剛性要求,同時要平衡成本與互聯網方式的靈活性,所以才否定了MySQL方案,堅決執行了PostgreSQL方案。
大數據類項目的主數據集還是以HadoopHDFS作為基礎存儲設施。 盡管現在很熱的討論就是Hadoop已經是日落黃昏,可以選擇其他更快的NoSQL存儲方案。 實際上,大數據工程師在最終落地的執行上,還是很誠實的選擇了Hadoop,因為其成熟度,穩定性是最終考量的標準。
ELK家族的Elasticsearch目前被大量作為日志監測分析的主數據集去使用,甚至都忽視了它本身是搜索引擎的這個事實,在電子商務網站,內容發布網站以及社交媒體網站,Elasticsearch作為專業搜索引擎,還是穩坐第一把交椅。
工業能源以及其他物聯網行業,實時、時序數據庫正在逐步采用開源的解決方案,例如、InfluxDB,OpenTSDB,還是目前存儲物聯網數據最好的開源選擇方案。 是實時與歷史一整套實時庫解決方案;InfluxDB目前熱度非常高的時序數據庫,自己獨立實現了一套原生的集群存儲結構;OpenTSDB主要依賴HBase分布式數據庫與HDFS分布式文件系統。 另外提一句,清華推出的開源時序數據庫IOTDB,目前已經升級成的頂級項目。
Hadoophbase作為列簇存儲,也是毫秒級的k-v存儲,越來越適應通用場景下的實時數據分析了,可能哪個領域都有能用到它,支撐實時處理的聯機分析以及小型批處理業務。 它的分布式一致性,存儲hdfs的穩定性,都是關鍵性業務數據進行實時分析的極佳方案。
在互聯網海量數據查詢,保證事務一致性以及大吞吐寫入并行的時代,就會形成兩種模式,一種是NewSQL對關系型數據庫的替代方案,以前我的文章也不斷提到TiDB對關系數據庫替代的必要性,這種替換行為一般會出現在基于關系數據庫的上層復雜業務不斷升級更新帶來的問題,導致運維過程中相關人員生無可戀的情況。 那么NewSQL這種分布式一致性,滿足ACID,又帶有k-v水平伸縮存儲的方案就極為合適,不用在關系數據庫的分庫分表的泥潭中掙扎。
另一種是關系數據庫自身的改進或者引入MongoDB進行部分替代,例如電子商務的訂單業務數據,互聯網醫療的健康檔案數據,內容發布的文章數據,都能實現MongoDB的文檔化替代,這不僅更符合業務的文檔化模型,而且能保證事務的前提下,實現海量數據的支撐。
關系數據庫也是在不斷改進中前進,尤其是輕量級數據庫的改進,MySQL8的cluster特性,PostgreSQL11的并行特性,都是不同手段想要達到同一個目的:那就是關系庫都在想盡一切辦法,不必讓用戶脫離關系型數據庫,非得擁抱NoSQL才能追求到海量數據的并行處理能力,同時也能降低用戶替換導致的巨大升級成本。
備注:以上架構圖均來自數據庫官方網站或相關技術的權威網站。
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.sycxjdsbhs.com/article/3f6464e520acbfe54fd0.html,復制請保留版權鏈接!
隨著數據密集型應用程序的興起,對高性能存儲解決方案的需求也在不斷增長,PhisonElectronics認識到這一需求,推出了最新的UP10控制器,專為滿足數據密集型應用程序的嚴格要求而設計,Phison,UP10控制器,卓越性能的領航者Phison,UP10控制器采用尖端技術,提供卓越的性能和可靠性,其主要特性包括,支持NVMe1....。
最新資訊 2024-10-01 16:38:35
前言隨著信息技術的飛速發展,數據已成為驅動企業發展的關鍵資產,企業面臨的挑戰是獲取和處理大量復雜的數據,以從中提取有價值的見解,采集俠應運而生,它是一個強大的數據采集平臺,旨在幫助企業應對這些挑戰,實現卓越運營,采集俠簡介采集俠是一個基于云端的數據采集平臺,旨在簡化和自動化企業的數據采集流程,它提供了一系列工具和功能,讓企業可以輕松地...。
互聯網資訊 2024-09-30 20:56:42
簡介XML,可擴展標記語言,是一種強大的標記語言,用于表示結構化數據,XSLT,可擴展樣式表語言轉換,是一種用于轉換XML文檔的語言,而XPath,XML路徑語言,是一種用于在XML文檔中選取節點和值的語言,這兩個技術一起使用,可以創建功能強大且靈活的XML數據處理解決方案,XSLTXSLT是一種聲明性語言,用于將XML文檔轉換為其他...。
技術教程 2024-09-26 22:49:54
在數據集成過程中,數據轉換是至關重要的一個環節,它可以幫助我們對數據進行格式化、標準化和清洗,從而使其能夠順利地被目標系統所接受和處理,在Java中,我們可以使用SpringIntegration框架來實現數據轉換,SpringIntegration提供了一個名為ResultTransformer的接口,它可以讓我們對數據集成管道中的...。
互聯網資訊 2024-09-23 20:00:01
在移動設備上提供流暢的滾動體驗至關重要,因為它可以讓用戶舒適地瀏覽內容并與應用程序交互,在移動設備上優化div滾動時,需要考慮以下因素,1.避免滾動反彈滾動反彈是當用戶將手指從內容頂部或底部拖動過遠時,內容會反彈回其原始位置的效果,這在移動設備上會讓人分心,尤其是在小屏幕上,為了避免滾動反彈,請使用以下CSS屬性,cssbody,ov...。
互聯網資訊 2024-09-23 04:27:12
^a%,column,name,>,0,示例3,查找以example結尾的記錄SELECTFROMtable,nameWHEREPATINDEX,%example$,column,name,>,0,示例4,查找包含數字123的記錄SELECTFROMtable,nameWHEREPATINDEX,%123%,column,na...。
本站公告 2024-09-14 09:51:21
引言在C,C,編程中,指針是一個非常重要的概念,它允許程序員直接訪問內存地址,從而可以高效地處理數據,指針函數是C,C,中的一種高級技術,它將指針與函數相結合,可以顯著提升代碼的效率和靈活性,指針函數的概念指針函數是一個指向函數的指針,換句話說,它存儲的是函數的地址,而不是函數的返回值,與普通函數不同,指針函數可以作為參數傳遞給其...。
技術教程 2024-09-09 07:10:40
排序是數據處理中一項基本任務,在Python中,`sort,`函數是執行此操作的強大工具,本文將提供一個全面且循序漸進的指南,幫助您從新手到大師掌握使用`sort,`函數排序Python列表,基礎知識`sort,`函數的語法```pythonlist.sort,key=None,reverse=False,````key`,可選...。
最新資訊 2024-09-09 00:18:17
概要本文檔提供了一份全面的指南,用于為開發人員和系統管理員安裝和配置PHP,本指南涵蓋了PHP的高級安裝配置,包括對其核心功能的自定義、擴展的安裝和配置以及故障排除技巧,目標受眾本指南面向有經驗的開發人員和系統管理員,他們需要在生產環境中安裝和配置PHP,讀者應具備Linux系統管理和PHP開發方面的基本知識,前提條件Linux操作系...。
最新資訊 2024-09-07 15:16:26
歡迎來到Java進階的奇妙世界!準備好踏上探索之旅,解鎖高級特性并提升您的編程技能了嗎,本文將為您推薦一些寶貴的Java進階書籍,為您提供必要的知識和技能,讓您成為一名出色的Java工程師,1.Java核心技術卷1,基礎知識作者,KathySierra,BertBates出版社,人民郵電出版社這本經典著作是Java學習者的必備書籍,它...。
最新資訊 2024-09-07 13:03:27
在數學和編程中,向下取整操作,也稱為舍入,是一種將實數四舍五入到其最大整數的運算,地板函數,floor,x,執行此操作,向下四舍五入到小于...。
技術教程 2024-09-05 22:45:20
2019年7月11日,南京市中級人民法院對備受社會關注的南京碎尸案進行公開宣判,被告人朱元璋因故意殺人罪被判處死刑,這起案件給受害者家庭帶來的傷痛和苦難至今難以愈合,破碎的家庭受害者李某某原本是一個幸福的三口之家,妻子溫柔賢惠,兒子活潑可愛,碎尸案的發生,將這個家庭徹底撕裂,妻子在得知丈夫遇害后,悲痛欲絕,最終因無法承受打擊而離世,兒...。
互聯網資訊 2024-09-03 05:35:42