關於 Apache Storm 你需要知道的一切

已發表: 2018-02-20

大數據生產和分析的不斷增長不斷提出新的挑戰,數據科學家和程序員通過不斷改進他們開發的應用程序,優雅地從容應對。 一個這樣的問題是實時流。 實時數據對企業具有極高的價值,但它有一個時間窗口,在此之後它就會失去價值——如果你願意的話,還有一個到期日。 如果這個實時數據的價值沒有在窗口內實現,就不能從中提取任何有用的信息。 這種實時數據快速而連續地進入,因此稱為“流式傳輸”。

對這些實時數據的分析可以幫助您及時了解當前正在發生的事情,例如閱讀您的博客文章的人數,或訪問您的 Facebook 頁面的人數。 雖然它可能聽起來只是一個“不錯的”功能,但在實踐中,它是必不可少的。 想像一下,您是一家廣告公司的一員,對您的廣告活動進行實時分析——客戶為此付出了高昂的代價。 實時分析可以讓您隨時了解您的廣告在市場上的表現如何、用戶對其的反應以及其他類似的事情。 如果您這樣想的話,這是一個非常重要的工具,對吧?

著眼於實時數據所具有的價值,組織開始提出各種實時數據分析工具。 在本文中,我們將討論其中之一——Apache Storm。 我們將看看它是什麼,一個典型的 Storm 應用程序的架構,它的核心組件(也稱為抽象),以及它的真實生活用例。

我們走吧!

目錄

什麼是阿帕奇風暴?

阿帕奇風暴
Apache Storm – 由 Twitter 發布,是一個分佈式開源框架,有助於實時處理數據。 Apache Storm 處理實時數據,就像 Hadoop 處理數據批處理一樣(批處理與實時相反。在這裡,數據被分成批處理,每個批處理都被處理。這不是真正的-時間。)

Apache Storm 沒有任何狀態管理功能,並且嚴重依賴 Apache ZooKeeper(用於管理大數據應用程序中的配置的集中服務)來管理其集群狀態——例如消息確認、處理狀態和其他此類消息。 Apache Storm 的應用程序以有向無環圖的形式設計。 它以每個節點每秒處理超過一百萬個元組而聞名 - 這是高度可擴展的並提供處理作業保證。 Storm 是用 Clojure 編寫的,它是一種類似 Lisp 的函數式優先編程語言。

Apache Storm 的核心是用於定義和提交邏輯圖(也稱為拓撲)的“Thrift 定義”。 由於 Thrift 可以用您選擇的任何語言實現,因此也可以用任何語言創建拓撲。 這使得 Storm 支持多種語言 - 使其對開發人員更加友好。

Storm 在 YARN 上運行,並與 Hadoop 生態系統完美集成。 它是一個真正的實時數據處理框架,支持零批處理。 它將完整的數據流作為一個完整的“事件”,而不是將其分成一系列小批量。 因此,它最適合作為單個實體攝取的數據。

讓我們看一下 Storm 應用程序的一般架構——它將讓您更深入地了解 Storm 的工作原理!

Apache Storm:通用架構和重要組件

阿帕奇風暴
任何 Storm 應用程序都涉及兩種類型的節點(如上所示)。

  • 主節點(Nimbus 服務)

如果您了解 Hadoop 的內部工作原理,那麼您必須知道什麼是“作業跟踪器”。 它是運行在 Hadoop 的 Master 節點上的守護進程,負責在節點之間分配任務。 Nimbus 是 Storm 的一種類似服務。 它運行在 Storm 集群的主節點上,負責在工作節點之間分配任務。

Nimbus 是 Apache 提供的 Thrift 服務,它允許您以您選擇的編程語言提交代碼。 這可以幫助您編寫應用程序,而無需學習專門針對 Storm 的新語言。

正如我們之前所說,Storm 缺乏任何狀態管理功能。 Nimbus 服務必須依靠 ZooKeeper 來監控工作節點在處理任務時發送的消息。 所有工作節點都會在 ZooKeeper 服務中更新其任務狀態,以供 Nimbus 查看和監控。

  • 工作節點(主管服務)

這些是負責執行任務的節點。 Storm 中的工作節點運行一個名為 Supervisor 的服務。 Supervisor 負責接收 Nimbus 服務分配給機器的工作。 顧名思義,Supervisor 監督工作進程並幫助他們完成分配的任務。 這些工作進程中的每一個都執行完整拓撲的一個子集。

Storm 應用程序本質上具有四個組件/抽象,它們負責執行手頭的任務。 這些是:

阿帕奇風暴

  • 拓撲

    任何實時應用程序的邏輯都以拓撲的形式打包——本質上是一個螺栓和噴口的網絡。 為了更好地理解,您可以將其與 MapReduce 作業進行比較(如果您不知道那是什麼,請閱讀我們關於 MapReduce 的文章!)。 一個關鍵的區別是 MapReduce 作業在其執行完成時完成,而 Storm 拓撲將永遠運行(除非您自己明確地殺死它)。 網絡由形成處理邏輯的節點和演示數據傳遞和流程執行的鏈接(也稱為流)組成。

  • 溪流

    在了解什麼是流之前,您需要了解什麼是元組。 元組是 Storm 集群中的主要數據結構。 這些是命名的值列表,其中值可以是從整數、長整數、短整數、字節、雙精度、字符串、布爾浮點數到字節數組的任何值。 現在,.streams 是在分佈式環境中實時創建和處理的元組序列。 它們構成了 Spark 集群的核心抽象單元。

  • 噴口

    新芽是 Storm 元組中流的來源。 它負責與實際的數據源取得聯繫,不斷地接收數據,將這些數據轉換成實際的元組流,最後發送到bolts進行處理。 它可以是可靠的,也可以是不可靠的。 如果 Storm 處理失敗,可靠的 Spout 將重播該元組,另一方面,不可靠的 Spout 將在發出元組後很快忘記該元組。

  • 螺栓

    螺栓負責執行拓撲的所有處理。 它們構成了 Storm 應用程序的處理邏輯單元。 可以利用 Bolt 執行許多基本操作,例如過濾、函數、連接、聚合、連接到數據庫等等。

誰使用風暴?

儘管在大數據市場中出現了許多功能強大且易於使用的工具,但 Storm 在該列表中找到了一個獨特的位置,因為它能夠處理您扔給它的任何編程語言。 許多組織使用 Storm。

讓我們看看幾個使用 Apache Storm 的大玩家以及如何使用它!

  • 推特

推特徽標
Twitter 使用 Storm 為其各種系統提供動力——從您的訂閱源的個性化、收入優化到改進搜索結果和其他此類流程。 由於 Twitter 開發了 Storm(後來被 Apache 收購併命名為 Apache Storm),它與 Twitter 的其他基礎設施——數據庫系統(Cassandra、Memcached 等)、消息傳遞環境(Mesos)和監控系統無縫集成.

  • Spotify

現貨標識
Spotify 以向超過 5000 萬活躍用戶和 1000 萬訂閱者提供流媒體音樂而聞名。 它提供了廣泛的實時功能,如音樂推薦、監控、分析、廣告定位和播放列表創建。 為了實現這一壯舉,Spotify 使用了 Apache Storm。
Apache Storm 與基於 Kafka、Memcached 和 netty-zmtp 的消息傳遞環境堆疊在一起,使 Spotify 能夠輕鬆構建低延遲容錯分佈式系統。

總結…

如果您希望建立自己的大數據分析師職業生涯,那麼流媒體是您的最佳選擇。 如果您能夠掌握處理實時數據的藝術,那麼您將成為招聘分析師職位的公司的第一選擇。 現在是深入研究實時數據分析的最佳時機,因為這是真正意義上的小時需求!

如果您有興趣了解有關大數據的更多信息,請查看我們的 PG 大數據軟件開發專業文憑課程,該課程專為在職專業人士設計,提供 7 多個案例研究和項目,涵蓋 14 種編程語言和工具,實用的動手操作研討會,超過 400 小時的嚴格學習和頂級公司的就業幫助。

從世界頂級大學在線學習軟件工程學位獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

引領數據驅動的技術革命

IIIT Bangalore 大數據高級證書課程