`
wx1569110409
  • 浏览: 18759 次
文章分类
社区版块
存档分类
最新评论

Storm Topology优化之lib库分离

 
阅读更多

最近在基于storm做实时分析统计工作,每次将topology打包上传到服务器上,都是一个艰难的事情,原因有里两个:

1,因为一个topology,如果引用了第三方包,体积就会变大,上传时间随着包体成正比例。

2,加大Nimbus、Supervisor、Zookeeper的网络压力。

 

先简单描述storm运行一个topology的流程:

1,提交topology.jar后,jar包上传到Nimbus的${storm.local.dir}/inbox目录中,之后把该jar包序列化到stormdist目录中。

2,Nimbus根据topology设定的spout、bolt数分配worker,nimbus会根据spout、bolt的数量尽量平均分配到每个worker

3,nimbus将任务信息(包括代码)提交到zookeeper集群上,保存当前topology与所有worker进程的心跳信息(workerbeats节点);同时将topology的任务分配信息、代码存储目录、任务之间的关联关系保存到assignments节点下。

4,supervisor不断轮询zookeeper的assignments节点上,是否有自己的任务。当轮询到有自己的任务,将任务信息(包括代码)下载到本地,分配给对应的worker开始执行topology。

5,topology开始执行之后,spout不断发stream流,bolt不断接受stream流。如果执行过程中,某个worker多次执行失败,supervisor会发挥给nimbus重新调度分配。

 

上述5步中,1、3、4都涉及到代码的网络传输。假如topology包体很大的话,并且分配的worker比较多,那传输包体的瞬时带宽就很高。

 

利用maven打包优化

mvn 打包时,配置classpathPrefix来指定所有依赖JAR文件的前缀,即在运行时,添加一个额外的ClassPath。然后在storm集群,新建刚刚指定的classpathPrefix目录,将topology所依赖的包都放进去。完成后,当我们打包时,只要将具体的业务代码上传就可以。

 

示例:

在pom文件下添加如下配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <archive>
      <addMavenDescriptor>false</addMavenDescriptor>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>YOUR_LIB_PATH</classpathPrefix>
      </manifest>
    </archive>
  </configuration>
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <!-- 配置assembly组件 -->
    <descriptors>
      <descriptor>package.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

将上面的YOUR_LIB_PATH替换成你的目录。

再在项目下添加package.xml文件(上面的pom.xml中指定的),文件内容如下:

<assembly>
    <id>bin</id>
    <!-- 最终打包成一个用于发布的zip文件 -->
    <formats>
        <format>zip</format>
    </formats>

    <!-- Adds dependencies to zip package under lib directory -->
    <dependencySets>
        <dependencySet>
            <!--
               不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录
           -->
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>

    <fileSets>
        <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

转载于:https://my.oschina.net/Denniswang/blog/801975

分享到:
评论

相关推荐

    java开发的基于kafka、xlog的web日志实时分析storm topology

    java开发的基于kafka、xlog的web日志实时分析storm topology storm-kafka-xlog 使用java语言开发的基于storm、kafka、xlog的web日志实时分析系统,实时分析指定时间周期内web日志中每个ip访问的各项数据指标(访问总...

    Storm流计算项目:1号店电商实时数据分析系统-32.项目3-非跳出UV-Storm topology开发一.pptx

    【课程大纲】01.Storm项目实战课程大纲02.CDH5搭建之CM5安装部署03.CDH5搭建和CM界面化集群管理04.Hadoop、HBase、Zookeeper集群管理和角色分配05.Kafka基础知识和集群搭建06.Kafka基本操作和最优设置07.Kafka Java ...

    java开发的基于kafka、xlog的web日志实时分析storm topology.zip

    本项目"java开发的基于kafka、xlog的web日志实时分析storm topology"聚焦于使用Java编程语言,结合Kafka消息队列、Xlog日志处理库以及Apache Storm流处理框架,构建了一个能够实时分析Web日志的系统。下面我们将深入...

    storm提交topology的过程共1页.pdf.zip

    【标题】"storm提交topology的过程"涉及到的是Apache Storm这一分布式实时计算系统中的核心操作——部署和运行流处理任务,即topology。Apache Storm被广泛应用于实时数据处理、在线机器学习、持续计算以及大规模...

    Storm流计算项目:1号店电商实时数据分析系统-33.项目3-非跳出UV-Storm topology开发二.pptx

    项目3-非跳出UV-Storm topology开发二】 在本项目中,我们将探讨如何利用Apache Storm开发一个实时数据分析系统,特别是关注非跳出用户视图(UV)的计算。非跳出UV是指在网站上至少访问了两个不同页面的用户数,它...

    Storm杂谈之Topology的启动过程

    大家都知道,要提交StormTopology到Cluster,需要运行如下命令:bin目录下storm是一个Python文件,我们可以看一下Python脚本的main方法首先解析args参数,解析完了之后,把所有的参数传递给COMMANDS,由COMMANDS调用...

    STORM流计算Topology性能监控

    STORM的TOPOLOGY在线上运行时,随着数据量的增加,在一定的服务器性能及集群规模下,会渐渐达到一个极限,到达极限后,服务器的load、io、cpu、mem等可能会出现耗尽,系统很卡,storm吞吐量骤降的情况。本文档中截图...

    topology3d.zip_169行3D拓扑优化_3D 拓扑优化_拓扑优化_拓扑优化 matlab_拓扑优化3D

    3D拓扑优化算法,经典169行代码,MATLAB语言

    storm0.9.0jar包

    6. **lib目录**:包含各种依赖库,如Hadoop客户端库(如果Storm配置为与HDFS集成),以及各种网络和序列化库。 7. **config目录**:可能包含默认配置文件,如`storm.yaml`,用于配置Storm集群的参数。 在使用storm...

    storm安装包

    Apache Storm 是一个开源的分布式实时计算系统,它允许开发者处理无界数据流,提供高度容错性和可扩展性。在本教程中,我们将详细介绍如何安装和...通过不断实践和优化,Storm可以在大数据实时处理领域发挥巨大作用。

    细细品味Storm_Storm简介及安装

    未来,Storm将进一步优化其性能和可靠性,增强对更多编程语言的支持,并与其他大数据生态系统更好地集成。 #### 二、Storm安装 **2.1 版本选择** 在安装之前,应先了解所需的Storm版本及其兼容性。通常建议使用...

    apache-storm-0.9.5源码

    `lib/storm.thrift`包含了Thrift定义的Storm服务接口和数据结构,通过这些接口,用户可以编写Spouts、Bolts,并提交Topology到集群。 此外,`storm-core`模块中的`backtype.storm.util`提供了各种工具类,如`...

    apache-storm-2.4.0.tar.gz

    3. `lib` 目录:包含 Storm 及其依赖的库文件,这些文件是 Storm 运行所必需的。 4. `docs` 目录:文档和用户指南,帮助开发者了解如何使用 Storm。 5. `examples` 目录:示例项目,用于演示如何构建和运行 Storm ...

    storm入门.pdf

    Storm的基本单位是“topology”(拓扑结构),它可以理解为一个实时计算的网络图,包含spouts和bolts两个主要组件。 Spout是拓扑中的数据源组件,主要负责从外部数据源如文件、数据库或者消息队列中获取原始数据,...

    Storm在Linux集群上运行.docx

    1. `storm-client`: 这是Storm的核心客户端库,包含用于编写和提交topology的API。 2. `storm-server`: 提供了Storm集群的服务器端组件,包括nimbus、supervisor等节点。 3. `jedis`: 这是Redis客户端,可能被用作...

    storm-topology-examples

    风暴拓扑示例 概述: 该项目提供了有关使用各种Apache Storm拓扑的示例集合... cd /tmp/storm-topology-examples && bash -x bin/install_mongodb.sh 如果使用HiveBolt,则创建表(您可能要修改ddl) cd /tmp/storm

    Storm 源码分析

    - **Nimbus**:Nimbus是Storm集群的核心组件之一,负责整个集群的管理和协调工作,包括任务调度、故障恢复等。Nimbus通过Zookeeper来实现状态同步和集群协调。 - **Supervisor**:Supervisor运行在每个Worker节点上...

Global site tag (gtag.js) - Google Analytics