storm

作者: pamperxg | 来源:发表于2017-09-07 21:35 被阅读0次
    • 离线计算
      批量获取数据、批量传输数据、周期性批量计算数据、数据展示(报表)
      代表技术:sqoop批量导入数据、hdfs批量存储数据、mapreduce批量计算数据、hive批量计算数据、任务调度
      在生产环境中安装sqoop客户端导入数据有生产风险。需要使用更安全的方式,比如用ftp采集,内天到ftp拿数据。在一个公司内部,对一份数据感兴趣的部门很多,可以flume采集后,用kafka缓存,不同的部门根据需要拿数据。直接消费或者存入hdfs
    • 流式计算
      数据实时产生、实时传输、实时计算、实时展示
      代表技术:flume实时采集、kafka/metaq实时存储数据、storm/jstorm实时计算数据、redis实时结果缓存、mysql持久化存储

    Storm

    用来实时计算源源不断产生的数据,如同流水线生产。
    流式计算的一般架构:(如网站系统)flume实时数据采集、kafka临时缓存数据、storm计算数据、redis结果存储

    Storm核心组件
    storm核心组件

    nimbus:资源分配、任务调度
    supervisor:接收任务,启动和通知属于自己管理的worker进程。worker的数量根据端口号来。一个worker里面不会运行属于不同的topology的执行任务。
    worker:执行任务的具体组件(其实就是一个jvm)。可以执行spout任务或者bolt任务。
    zookeeper:保存分配任务信息、心跳信息、元数据信息
    executor:可以理解为一个worker进程中的工作线程。一个executor中只能运行隶属于一个component(spout/bolt)的task。一个worker进程中可以有一个或者多个executor线程。
    task:默认情况下,一个executor运行一个task,非默认情况可以有多个task。每个component(spout/bolt)的并发度就是其对应的task数量。(task也是各个节点之间进行grouping(partition)的单位)

    Storm编程模型
    storm编程模型
    Topology:Storm中运行的一个实时应用程序
    Datasource:外部数据源
    Spout:在一个Topology中获取源数据流的组件。将外部数据转化为Storm内部的数据,以Tuple为基本的传输单元下发给Bolt:接收Spout发送的数据,或上游的bolt发送的数据。根据业务逻辑进行处理。发送给下一个bolt或者存储到某种介质上(redis,mysql)。
    Tuple:Storm内部数据传输的基本单元,里面封装了一个List对象,用来保存数据。
    StreamGrouping:数据分组策略
    ---- 7种:ShuffleGrouping(Random函数random.nextInt(2))、NonGrouping(Random函数)、FieldGrouping(Hash取模hashcode%num)、Local or ShuffleGrouping(本地或随机,优先本地)
    • 并发度
      topology在storm cluster中运行时,并发主要和3个逻辑实体有关:worker,executor,task
      worker是一个进程,executor是worker进程中的工作线程。一个Executor中只能运行隶属于同一个component(spout/bolt)的task。一个Worker进程中可以有一个或多个Executor线程。在默认情况下,一个Executor运行一个task。每个component(spout/bolt)的并发度就是这个component对应的task数量。
      例:



      图中是一个包含有两个 worker 进程的拓扑。其中,蓝色的 BlueSpout 有两个 executor,每个 executor 中有一个 task,并行度为 2;绿色的 GreenBolt 有两个 executor,每个 executor 有两个 task,并行度也为2;而黄色的YellowBolt 有 6 个 executor,每个 executor 中有一个 task,并行度为 6,因此,这个拓扑的总并行度就是 2 + 2 + 6 = 10。具体分配到每个 worker 就有 10 / 2 = 5 个 executor。

    一个worker只属于一个topology,每个worker中运行的task只能属于这个topology。 反之,一个topology包含多个worker,其实就是这个topology运行在多个worker上。一个topology要求的worker数量如果不被满足,集群在任务分配时,根据现有的worker先运行topology。如果当前集群中worker数量为0,那么最新提交的topology将只会被标识active,不会运行,只有当集群有了空闲资源之后,才会被运行。

    相关文章

      网友评论

          本文标题:storm

          本文链接:https://www.haomeiwen.com/subject/oxavjxtx.html