更新时间:2022-07-19 GMT+08:00
分享

Storm-HDFS开发指引

操作场景

本章节只适用于Storm和HDFS交互的场景。本章中描述的jar包的具体版本信息请以实际情况为准。

安全模式下登录方式分为两种,票据登录和keytab文件登录,两种方式操作步骤基本一致,票据登录方式为开源提供的能力,后期需要人工上传票据,存在可靠性和易用性问题,因此推荐使用keytab方式。

应用开发操作步骤

  1. 确认Storm和HDFS组件已经安装,并正常运行。
  2. 将storm-examples导入到Eclipse开发环境,请参见配置并导入工程
  3. 如果集群启用了安全服务,按登录方式需要进行以下配置。

    • keytab方式:需要从管理员处获取一个“人机”用户,用于认证,并且获取到该用户的keytab文件。
    • 票据方式:从管理员处获取一个“人机”用户,用于后续的安全登录,开启Kerberos服务的renewable和forwardable开关并且设置票据刷新周期,开启成功后重启kerberos及相关组件。
    • 获取的用户需要属于storm组。
    • Kerberos服务的renewable、forwardable开关和票据刷新周期的设置在Kerberos服务的配置页面的“系统”标签下,票据刷新周期的修改可以根据实际情况修改“kdc_renew_lifetime”和“kdc_max_renewable_life”的值。

  4. 下载并安装HDFS客户端,参见《准备Linux客户端运行环境》。
  5. 获取HDFS相关配置文件。获取方法如下。

    在安装好的HDFS客户端目录下找到目录“/opt/client/HDFS/hadoop/etc/hadoop”,在该目录下获取到配置文件“core-site.xml”和“hdfs-site.xml”。

    如果使用keytab登录方式,按3获取keytab文件;如果使用票据方式,则无需获取额外的配置文件。

    将获取到的这些文件拷贝到示例工程的 src/main/resources目录。

    获取到的keytab文件默认文件名为user.keytab,若用户需要修改,可直接修改文件名,但在提交任务时需要额外上传修改后的文件名作为参数。

Eclipse代码样例

创建Topology。

  public static void main(String[] args) throws Exception   
    {  
      TopologyBuilder builder = new TopologyBuilder();  

      // 分隔符格式,当前采用“|”代替默认的“,”对tuple中的field进行分隔  
      // HdfsBolt必选参数  
      RecordFormat format = new DelimitedRecordFormat()  
              .withFieldDelimiter("|");  

      // 同步策略,每1000个tuple对文件系统进行一次同步  
      // HdfsBolt必选参数  
      SyncPolicy syncPolicy = new CountSyncPolicy(1000);  

      // 文件大小循环策略,当文件大小到达5M时,从头开始写  
      // HdfsBolt必选参数  
      FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(5.0f, Units.MB);  

      // 写入HDFS的目的文件  
      // HdfsBolt必选参数  
      FileNameFormat fileNameFormat = new DefaultFileNameFormat()  
              .withPath("/user/foo/");  


      //创建HdfsBolt  
      HdfsBolt bolt = new HdfsBolt()  
              .withFileNameFormat(fileNameFormat)  
              .withRecordFormat(format)  
              .withRotationPolicy(rotationPolicy)  
              .withSyncPolicy(syncPolicy);  

      //Spout生成随机语句  
      builder.setSpout("spout", new RandomSentenceSpout(), 1);   
      builder.setBolt("split", new SplitSentence(), 1).shuffleGrouping("spout");  
      builder.setBolt("count", bolt, 1).fieldsGrouping("split", new Fields("word"));  

      //增加Kerberos认证所需的plugin到列表中,安全模式必选  
      setSecurityConf(conf,AuthenticationType.KEYTAB); 

      Config conf = new Config();  
      //将客户端配置的plugin列表写入config指定项中,安全模式必配  
      conf.put(Config.TOPOLOGY_AUTO_CREDENTIALS, auto_tgts);  

      if(args.length >= 2)  
      {  
          //用户更改了默认的keytab文件名,这里需要将新的keytab文件名通过参数传入  
          conf.put(Config.STORM_CLIENT_KEYTAB_FILE, args[1]);  
      }  

      //命令行提交拓扑  
      StormSubmitter.submitTopology(args[0], conf, builder.createTopology());  

    }

部署运行及结果查看

  1. 在Storm示例代码根目录执行如下命令打包:"mvn package"。执行成功后,将会在target目录生成storm-examples-1.0.jar。
  2. 执行命令提交拓扑。

    keytab方式下,若用户修改了keytab文件名,如修改为“huawei.keytab”,则需要在命令中增加第二个参数进行说明,提交命令示例(拓扑名为hdfs-test):

    storm jar /opt/jartarget/storm-examples-1.0.jar com.huawei.storm.example.hdfs.SimpleHDFSTopology hdfs-test huawei.keytab

    安全模式下在提交source.jar之前,请确保已经进行kerberos安全登录,并且keytab方式下,登录用户和所上传keytab所属用户必须是同一个用户。

  3. 拓扑提交成功后,请登录HDFS集群查看/user/foo目录下是否有文件生成。
  4. 如果使用票据登录,则需要使用命令行定期上传票据,具体周期由票据刷新截止时间而定,步骤如下。

    1. 在安装好的storm客户端目录的Storm/storm-0.10.0/conf/storm.yaml文件尾部新起一行添加如下内容。

      topology.auto-credentials:

      - backtype.storm.security.auth.kerberos.AutoTGT

    2. 执行命令:./storm upload-credentials hdfs-test

分享:

    相关文档

    相关产品