NoSQL-流式數據處理與Spark

来源:http://www.cnblogs.com/Echo-41/archive/2017/10/18/7685142.html
-Advertisement-
Play Games

隨著信息時代的到來,數據開始急劇膨脹,業務也變得很複雜,我們每個人都是個數據源,每時每刻都在產生著數據與個性化、實時化的需求,原本的人力以及伺服器已經不足以支撐數據處理平臺的業務。由此,流式數據處理便應運而生。 ...


流式數據處理與Spark

技術產生背景

隨著信息時代的到來,數據開始急劇膨脹,業務也變得很複雜,我們每個人都是個數據源,每時每刻都在產生著數據與個性化、實時化的需求,原本的人力以及伺服器已經不足以支撐數據處理平臺的業務。由此,流式數據處理便應運而生。

在我們的普遍認知中,數據的價值會隨著時間的流逝而降低,所以在事件出現後必須儘快對它進行處理,最好是數據出現時便立刻對其進行處理,發生一個事件處理一次,而不是緩存起來進行批處理。

批處理 流處理
數據範圍 對數據集中的所有或大部分數據進行查詢或處理 對滾動時間視窗內的數據或僅對最近的數據記錄進行查詢或處理
數據大小 大批量數據 單條記錄或包含幾條記錄的微批量數據
性能 幾分鐘至幾小時的延遲 只需大約幾秒或幾毫秒的延遲
分析 複雜分析 簡單的響應函數、聚合和滾動指標

流式數據處理是針對流式數據的實時處理(計算)。既然要處理流式數據,那麼首先要搞明白的該是處理對象本身,既流式數據是什麼呢?流式數據是指由數千個數據源持續生成的數據,通常也同時以數據記錄的形式發送,規模較小(約幾千位元組)。

流數據包括多種數據,例如客戶使用您的移動或 Web 應用程式生成的日誌文件、網購數據、游戲內玩家活動、社交網站信息、金融交易大廳或地理空間服務,以及來自數據中心內所連接設備或儀器的遙測數據。[1]

它具有數據實時持續不斷到達、到達次序獨立、數據來源眾多格式複雜、數據規模大且十分關註存儲、註重數據的整體價值而不關註個別數據等特點。

具體而言,流式數據處理一般有三個流程:數據實時採集,數據實時處理,實時查詢服務。而這個過程也就對高性能、海量式、實時性、分散式以及可靠性提出了需求,並且,流式數據處理需要兩個層:存儲層和處理層。存儲層需要支持記錄定序和高度一致性,以便以快速、便宜且可重覆的方式讀取和寫入大型數據流。處理層負責處理存儲層中的數據,基於該數據運行計算,然後通知存儲層刪除不再需要的數據。除此之外,還必須為存儲層和處理層制定可擴展性、數據持久性和容錯規劃。因此,滿足以上性能的流式數據處理系統便炙手可熱,隨後出現了可提供構建流數據應用程式所需的基礎設施的多種平臺,Apache Spark便是其中之一。

下麵,我們以Spark為例,將會從技術基本原理,應用特點與應用場景這三個方面作以介紹。

技術基本原理

Spark是一個Apache項目,它被標榜為“快如閃電的集群計算”。它擁有一個繁榮的開源社區,並且是目前最活躍的Apache項目。它是基於記憶體計算的大數據並行計算框架.Spark基於記憶體計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量的廉價硬體之上,形成集群。

Spark誕生於加州大學伯利克分校AMPLab,AMPLab開發以Spark為核心的BDAS時提出的目標是:one stack to rule them all,也就是說在一套軟體棧內完成各種大數據分析任務。[2]

Spark生態圈

Spark的整個生態圈如下圖所示,最底層為資源管理器,採用Mesos、Yarn等資源管理集群或者Spark自帶的Standalone模式,底層存儲為文件系統或者其他格式的存儲系統如HBase。Spark作為計算框架,為上層多種應用提供服務。Graphx和MLBase提供數據挖掘服務,如圖計算和挖掘迭代計算等。Shark提供SQL查詢服務,相容Hive語法,性能比Hive快3-50倍,BlinkDB是一個通過權衡數據精確度來提升查詢晌應時間的交互SQL查詢引擎,二者都可作為互動式查詢使用。Spark Streaming將流式計算分解成一系列短小的批處理計算,並且提供高可靠和吞吐量服務。

Spark Core

Spark Core是一個基本引擎,用於大規模並行和分散式數據處理。它主要負責:

  1. 記憶體管理和故障恢復
  2. 在集群上安排、分佈和監控作業
  3. 和存儲系統進行交互

Spark引入了一個稱為彈性分散式數據集的概念,它是一個不可變的、容錯的、分散式對象集合,我們可以並行的操作這個集合。RDD可以包含任何類型的對象,它在載入外部數據集或者從驅動應用程式分發集合時創建。

RDD支持兩種操作類型:[3]

  1. 轉換是一種操作(例如映射、過濾、聯接、聯合等等),它在一個RDD上執行操作,然後創建一個新的RDD來保存結果。
  2. 行動是一種操作(例如歸併、計數、第一等等),它在一個RDD上執行某種計算,然後將結果返回。

在Spark中,轉換是“懶惰”的,也就是說它們不會立刻計算出結果。相反,它們只是“記住”要執行的操作以及要操作的數據集(例如文件)。只有當行為被調用時,轉換才會真正的進行計算,並將結果返回給驅動器程式。這種設計讓Spark運行得更有效率。例如,如果一個大文件要通過各種方式進行轉換操作,並且文件被傳遞給第一個行為,那麼Spark只會處理文件的第一行內容並將結果返回,而不會處理整個文件。

預設情況下,當你在經過轉換的RDD上運行一個行為時,這個RDD有可能會被重新計算。然而,你也可以通過使用持久化或者緩存的方法,將一個RDD持久化從年初在記憶體中,這樣,Spark就會在集群上保留這些元素,當你下一次查詢它時,查詢速度會快很多。

Spark架構

Spark架構採用了分散式計算中的Master-Slave模型。Master是對應集群中的含有Master進程的節點,Slave是集群中含有Worker進程的節點。Master作為整個集群的控制器,負責整個集群的正常運行;Worker相當於是計算節點,接收主節點命令與進行狀態彙報;Executor負責任務的執行;Client作為用戶的客戶端負責提交應用,Driver負責控制一個應用的執行,如下圖所示。

Spark集群部署後,需要在主節點和從節點分別啟動Master進程和Worker進程,對整個集群進行控制。在一個Spark應用的執行過程中,Driver和Worker是兩個重要角色。Driver程式是應用邏輯執行的起點,負責作業的調度,即Task任務的分發,而多個Worker用來管理計算節點和創建Executor並行處理任務。在執行階段,Driver會將Task和Task所依賴的file和jar序列化後傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理。

Spark的整理運行流程為:Client提交應用時,Master找到一個Worker啟動Driver,Driver向Master或者資源管理器申請資源,之後將應用轉化為RDD Graph,再由DAGScheduler將RDD Graph轉化為Stage的有向無環圖提交給TaskScheduler,由TaskScheduler提交任務給Executor執行。在任務執行的過程中,其他組件協同工作,確保整個應用順利執行。[4]

Spark運行邏輯

如下圖所示,在Spark應用中,整個執行流程在邏輯上會形成有向無環圖(DAG)。Action運算元觸發之後,將所有累積的運算元形成一個有向無環圖,然後由調度器調度該圖上的任務進行運算。Spark的調度方式與MapReduce有所不同。Spark根據RDD之間不同的依賴關係切分形成不同的階段(Stage),一個階段包含一系列函數執行流水線。圖中的A、B、C、D、E、F分別代表不同的RDD,RDD內的方框代表分區。數據從HDFS輸入,Spark形成RDD A和RDD C,RDD C上執行map操作,轉換為RDD D,RDD B和RDDE執行join操作,轉換為F,而在B和E連接轉化為F的過程中又會執行Shuffle,最後RDD F通過函數saveAsSequenceFile輸出並保存到HDFS中。

技術的特點與應用場景

技術特點

今天,Spark已經被很多巨頭使用,包括Amazon、eBay以及Yahoo!。很多組織都在擁有成千上萬節點的集群上運行Spark。

根據Spark FAQ,已知的最大的Spark集群擁有超過8000個節點,且已經有1000個組織在生產中使用Spark。[5]

Spark的特點可概括為以下幾點:

  • 高效易用,擁有Java、Scala、Python和R APIs。
  • 可擴展至超過8000個結點。
  • 能夠在記憶體內緩存數據集以進行互動式數據分析。
  • 與Hadoop集成
  • Scala或Python中的互動式命令行介面可降低橫向擴展數據探索的反應時間。
  • Spark Streaming對即時數據流的處理具有可擴充性、高吞吐量、可容錯性等特點。
  • Spark SQL支持結構化和和關係式查詢處理(SQL)。
  • MLlib機器學習演算法[6]和Graphx圖形處理演算法的高級庫。

應用場景分析

Spark是基於記憶體的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。數據量不是特別大,但是要求近實時統計分析需求。

參考文獻:

[1] https://amazonaws-china.com/cn/streaming-data/

[2] https://zh.wikipedia.org/wiki/Apache_Spark

[3] http://blog.jobbole.com/89446/

[4] http://www.jianshu.com/p/eb2bc8d8ebc0

[5] Apache Spark FAQ. apache.org. Apache Software Foundation. [5 December 2014].

    本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接(http://www.cnblogs.com/Echo-41/p/7685142.html)。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般阿裡社招都是招3-5年的P6+高級工程師,當初自己一年經驗也沒有想過有這個面試機會。 雖然沒想著換工作,但是經常關註一些招聘網站的信息,某一天,在某boss上有個人找我,叫我發一下簡歷,我一看是阿裡的某技術專家,雖然之前也有阿裡的在某boss上給我要簡歷,但是我深知自己經驗不足,然後給boss說 ...
  • 1、內高度、內寬度: 內邊距 + 內容框 clientWidth clientHeight 2、外高度,外寬度: 邊框 + 內邊距 + 內容框 offsetWidth offsetHeight 3、上邊框、左邊框 clientTop clientLeft 4、元素的大小及其相對於視口的位置 getB ...
  • 利用css3 transform屬性刻畫鐘錶的的刻度以及指針的角度,代碼如下: ...
  • 1. Operation 設置依賴關係 先看看如何設置operation的依賴關係。 啥叫依賴關係?有啥用啊?打個比方咱們要做一個聽音樂的付費App項目,需要經過登陸、付費、下載、播放四個步驟。其實一看就明白,這四個操作是有先後順序的,但假如所有的操作都是多線程,咱們怎麼控制順序?通過設置“優先順序” ...
  • 上一篇博客描述了一個簡單的串口應用程式和驅動程式,瞭解了應用程式訪問串口的基本操作,如打開串口,設置串口,寫串口,讀串口,關閉串口等。和Linux串口驅動的基本框架。這裡將瞭解Android下的串口系統框架,仍然使用上一篇博客中的tiny_serial.c作為本例的驅動,本例實現的功能不變,無論應用 ...
  • 關註react native這個技術很久了,去年就做了一個簡單的Demo,最近有時間,重新瞭解了一下react native的現狀,發現已經有很大的進步,現在完善了一下原有的項目,並重新開源共用一下。 背景 對react native這個技術關註很久了,去年也花了很長時間學習,但中途因為時間問題沒有 ...
  • DEVELOPER.XIAOYAOLI 技術筆記 簡單的利用UIImagePickerController調用iPhone攝像頭獲取照片的方法,同時介紹了怎麼添加overlay,用於自定義預覽界面 UIImagePickerController是一種獲取攝像頭照片取景器的方法,簡單的實現方法如下,我 ...
  • 1. 進程和線程 1.1 進程 進程:正在運行的應用程式叫進程 進程之間都是獨立的,運行在專用且受保護的記憶體空間中 兩個進程之間無法通訊 通俗的理解,手機上同時開啟了兩個App。這兩個App肯定是在不同的進程中的。所以這兩個App之間是獨立的,記憶體中的數據不能互相竄來竄去,兩個App之間也沒有辦法進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...