
# Linux中未安装客户端时提交Storm拓扑
#### 操作场景
Storm支持拓扑在未安装Storm客户端的Linux环境中运行。
#### 前提条件
- 客户端机器的时间与MRS集群的时间要保持一致，时间差要小于5分钟。
- 当Linux环境所在主机不是集群中的节点时，需要在节点的**hosts**文件中设置主机名和IP地址映射。主机名和IP地址请保持一一对应。
 
#### 操作步骤
1. 准备依赖的Jar包和配置文件。 
   在Linux环境新建目录，例如"/opt/test"，并创建子目录"lib"和"src/main/resources/"。将样例工程中"lib"文件夹下的Jar包上传Linux环境的"lib"目录。将样例工程中"src/main/resources"文件夹下的配置文件上传到Linux环境的"src/main/resources"目录。
   
   
2. 在IntelliJ IDEA工程中修改WordCountTopology.java类，使用remoteSubmit方式提交应用程序。并替换Jar文件地址。 
   - 使用remoteSubmit方式提交应用程序
     ```
     public static void main(String[] args) 
              throws Exception 
          { 
              TopologyBuilder builder = buildTopology(); 
               
              /* 
               * 任务的提交认为三种方式 
               * 1、命令行方式提交，这种需要将应用程序jar包复制到客户端机器上执行客户端命令提交 
               * 2、远程方式提交，这种需要将应用程序的jar包打包好之后在IntelliJ IDEA中运行main方法提交 
               * 3、本地提交 ，在本地执行应用程序，一般用来测试 
               * 命令行方式和远程方式安全和普通模式都支持 
               * 本地提交仅支持普通模式 
               *  
               * 用户同时只能选择一种任务提交方式，默认命令行方式提交，如果是其他方式，请删除代码注释即可 
               */ 
               
              submitTopology(builder, SubmitType.REMOTE); 
          }
     ```
     
   
   - 修改userJarFilePath为Linux环境指定路径"/opt/test/lib/example.jar"。
     ```
     private static void remoteSubmit(TopologyBuilder builder) 
              throws AlreadyAliveException, InvalidTopologyException, NotALeaderException, AuthorizationException, 
              IOException 
          { 
              Config config = createConf(); 
               
              String userJarFilePath = "/opt/test/lib/example.jar "; 
              System.setProperty(STORM_SUBMIT_JAR_PROPERTY, userJarFilePath); 
               
              //安全模式下的一些准备工作 
              if (isSecurityModel()) 
              { 
                  securityPrepare(config); 
              } 
              config.setNumWorkers(1); 
              StormSubmitter.submitTopologyWithProgressBar(TOPOLOGY_NAME, config, builder.createTopology()); 
          }
     ```
     
   
   
   
   
3. 导出Jar包并上传到Linux环境。 
   - 参考[打包Storm样例工程应用](https://support.huaweicloud.com/devg3-mrs/mrs_07_420017.html)执行打包，并将jar包命名为"example.jar"。
   
   - 将导出的Jar包复制到Linux环境的"/opt/test/lib"目录下。
   
   
   
   
4. 切换到"/opt/test"，执行以下命令，运行Jar包。 
   **java -classpath /opt/test/lib/\*:/opt/test/src/main/resources com.huawei** **.storm.example.wordcount.WordCountTopology**
   
   
 
