Storm大資料位置

mcxiaoracle發表於2022-09-14

Storm


Twitter


流式處理


Twitter 的新流式大資料分析解決方案


S4


Yahoo!


流式處理


來自 Yahoo! 的分散式流計算平臺


Hadoop


Apache


批處理


MapReduce 正規化的第一個開源實現


Spark


UC Berkeley AMPLab


批處理/流處理


支援記憶體中資料集和恢復能力的最新分析平臺


Disco


Nokia


批處理


Nokia 的分散式 MapReduce 框架


HPCC


LexisNexis


批處理


HPC 大資料叢集


二、Storm概念及元件


1. Nimbus:負責資源分配和任務排程。 

2. Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker程式。 


3. Worker:執行具體處理元件邏輯的程式。 

4. Task:worker中每一個spout/bolt的執行緒稱為一個task. 在storm0.8之後,task不再與物理執行緒對應,同一個 spout/bolt的task可能會共享一個物理執行緒,該執行緒稱為xecutor。

5. Topology:storm中執行的一個實時應用程式,因為各個元件間的訊息流動形成邏輯上的一個拓撲結構。

6. Spout:在一個topology中產生源資料流的元件。通常情況下spout會從外部資料來源中讀取資料,然後轉換為topology內部的源資料。Spout是一個主動的角色,其介面中有個nextTuple()函式,storm框架會不停地呼叫 此函式,使用者只要在其中生成源資料即可。


7. Bolt: 在一個topology中接受資料然後執行處理的元件。Bolt可以執行過濾、函式操作、合併、寫資料庫等任何操作。Bolt是一個被動的角色,其介面中有個execute(Tuple input)函式,在接受到訊息後會呼叫此函式,使用者可以在其中執行自己想要的操作。


8. Tuple: Storm Spout、Bolt元件訊息傳遞的基本單元(資料模型),Tuple是包含名稱的列表,Storm支援所有原生型別,位元組陣列為Tuple欄位 傳遞,如果要傳遞自定義物件,需要實現介面serializer。


Stream:源源不斷傳遞的tuple就組成了stream。

 三、建立邏緝元件

下圖二所示,建立Storm元件Spout、Bolt及Storm拓撲構建並結合拓撲描述併發情況(Worker、Executor、Task關係)

   SPOUT:自定義類實現IRichSpout介面或繼承BaseRichSpout即建立Spout元件。Spout從外部資料來源讀取資料(佇列、DRPC等)為Storm拓撲提供資料,Storm可以實現可靠或不可靠,可靠性表現在Storm可以對Storm toplogy處理失敗的tuple進行重發,反之不處理。


   Spout可以傳送多個流,透過在呼叫SpoutOutputCollector類的emit方法的同時使用declareStream方法申 明並指定多個流傳送。


 Spout中主要方法nextTuple,能夠傳送新流到toplopy及無資料流傳送時直接返回。最重要的是不要阻塞 nextTuple方法,因為Spout在同一個執行緒執行。Spout主要將讀取到的資料組織成Tuple傳送到Bolt元件處 理。


public class SimpleTopolog {

public static void main(String[] args) throws Exception {

// 解決ZOOKEEPER客戶端連線服務端問題(IPV6)

System.setProperty("java.net.preferIPv4Stack", "true");

TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("green-spout", new GreenSpout(), 2) // 2 executor(執行緒)

       .setNumTasks(4); // 4 task 對應2個executor

builder.setBolt("yellow-bolt", new YellowBolt(),6) // 6 executor(執行緒)

.shuffleGrouping("green-spout"); //tuple隨機分發到bolt處理

builder.setBolt("blue-bolt", new BlueBolt(), 2) // 2 executor(執行緒)

   .shuffleGrouping("yellow-bolt");

Config conf = new Config();

/*設定工作程式數*/

conf.setNumWorkers(2); 

conf.setDebug(true);

/*本地執行模式*/

StormRunner.runTopologyLocally(builder.createTopology(), "simpleTopology", conf, 0);

}


————————————————






package com.sunshine.tools;

import backtype.storm.Config;

import backtype.storm.LocalCluster;

import backtype.storm.StormSubmitter;

import backtype.storm.generated.AlreadyAliveException;

import backtype.storm.generated.InvalidTopologyException;

import backtype.storm.generated.StormTopology;

public final class StormRunner {

  private static final int MILLIS_IN_SEC = 1000;

  private StormRunner() {

  }

  public static void runTopologyLocally(StormTopology topology, String topologyName, Config conf, int runtimeInSeconds)

      throws InterruptedException {

    LocalCluster cluster = new LocalCluster();

    cluster.submitTopology(topologyName, conf, topology);

    Thread.sleep((long) runtimeInSeconds * MILLIS_IN_SEC);

    cluster.killTopology(topologyName);

    cluster.shutdown();

  }

  public static void runTopologyRemotely(StormTopology topology, String topologyName, Config conf)

      throws AlreadyAliveException, InvalidTopologyException {

    StormSubmitter.submitTopology(topologyName, conf, topology);

  }

}



推薦閱讀:

https://blog.csdn.net/yangyangmyself/article/details/52346859



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2914509/,如需轉載,請註明出處,否則將追究法律責任。

相關文章