共計(jì) 1931 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
這篇文章主要講解了“Storm 編程入門知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Storm 編程入門知識(shí)點(diǎn)有哪些”吧!
Storm 是什么?什么是流式計(jì)算
Storm 是一個(gè)分布式實(shí)時(shí)計(jì)算框架,適應(yīng)于流式計(jì)算。所謂流式計(jì)算,你可以把它想像成你家的電表,電在流過電表時(shí),電表就要計(jì)算耗用量,電表對(duì)耗用量的計(jì)算就是典型的流式計(jì)算。
下面介紹編程過程中需要用到的 Storm 的幾個(gè)概念:
Topology
Topology 似于 Hadoop 中的 MapReduce Job,是一個(gè)用來編排、容納一組計(jì)算邏輯組件(Spout、Bolt)的對(duì)象(Hadoop MapReduce 中一個(gè) Job 包含一組 Map Task、Reduce Task),這一組計(jì)算組件可以按照 DAG 圖的方式編排起來(通過選擇 Stream Groupings 來控制數(shù)據(jù)流分發(fā)流向),從而組合成一個(gè)計(jì)算邏輯更加強(qiáng)大的對(duì)象,那就是 Topology。一個(gè) Topology 運(yùn)行以后就不能停止,它會(huì)無限地運(yùn)行下去,除非手動(dòng)干預(yù)(顯式執(zhí)行 bin/storm kill)或意外故障(如停機(jī)、整個(gè) Storm 集群掛掉)讓它終止。
Spout
Spout 是一個(gè) Topology 消息源頭,是一個(gè)可持續(xù)不斷生產(chǎn)消息的組件,例如,它可以是一個(gè) Socket Server 在監(jiān)聽外部 Client 連接并發(fā)送消息,可以是一個(gè)消息隊(duì)列(MQ)的消費(fèi)者、可以是用來接收 Flume Agent 的 Sink 所發(fā)送消息的服務(wù),等等。Spout 生產(chǎn)的消息在 Storm 中被抽象為 Tuple,在整個(gè) Topology 的多個(gè)計(jì)算組件之間都是根據(jù)需要抽象構(gòu)建的 Tuple 消息來進(jìn)行連接,從而形成流。
Bolt
Storm 中消息的處理邏輯被封裝到 Bolt 中,任何處理邏輯都可以在 Bolt 里面執(zhí)行,處理過程和普通計(jì)算應(yīng)用程序沒什么區(qū)別,只是需要根據(jù) Storm 的計(jì)算語義來合理設(shè)置一下組件之間消息流的聲明、分發(fā)、連接即可。Bolt 可以接收來自一個(gè)或多個(gè) Spout 的 Tuple 消息,也可以來自多個(gè)其它 Bolt 的 Tuple 消息,也可能是 Spout 和其它 Bolt 組合發(fā)送的 Tuple 消息。
Stream Grouping
Storm 中用來定義各個(gè)計(jì)算組件(Spout、Bolt)之間流的連接、分組、分發(fā)關(guān)系。Storm 定義了如下 7 種分發(fā)策略:Shuffle Grouping(隨機(jī)分組)、Fields Grouping(按字段分組)、All Grouping(廣播分組)、Global Grouping(全局分組)、Non Grouping(不分組)、Direct Grouping(直接分組)、Local or Shuffle Grouping(本地 / 隨機(jī)分組),各種策略的具體含義可以參考 Storm 官方文檔、比較容易理解。
示例代碼 storm-demo
storm-demo 是一個(gè)包含完整的 storm topology 的代碼示例,有詳盡的注釋。
源碼見: https://git.oschina.net/HuQingmiao/storm-demo.git
怎么把 storm 程序跑起來
### 本地模式 在本地開發(fā)時(shí),不需要部署 storm,直接在 eclipse 或 IntelliJ idea 下運(yùn)行即可,便于調(diào)試。 也可以通過命令行執(zhí)行:java -jar jar 文件名 main 入口類
### 生產(chǎn)模式 先將你的應(yīng)用程序打成 jar 包,但 jar 包中不要含有 storm 及相關(guān)日志包,即將 storm 及相關(guān)日志包的 scope 設(shè)為 provided 即可:
dependency
groupId org.apache.storm /groupId
artifactId storm-core /artifactId
version 0.9.5 /version
scope provided /scope
/dependency
再把應(yīng)用程序 jar 包上傳到 storm 結(jié)點(diǎn)(Nimbus),然后在結(jié)點(diǎn)上執(zhí)行指令:
storm jar 你的應(yīng)用程序.jar Main 入口類 參數(shù) (topologId)
或
jstorm jar 你的應(yīng)用程序.jar Main 入口類 參數(shù) (topologId)
若要在在生產(chǎn)模式下停止這個(gè) topology,則執(zhí)行以下命令即可:
storm kill 參數(shù) (topologId)
jstorm kill 參數(shù) (topologId)
感謝各位的閱讀,以上就是“Storm 編程入門知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì) Storm 編程入門知識(shí)點(diǎn)有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!