zoukankan      html  css  js  c++  java
  • 实时事件统计项目:优化solr和morphline的时间字段

    morphline优化,如下:

    传过来的时间戳被复制到3个字段:eventTimeInMinuteChina_tdt ,eventTimeInMinuteUTC_tdt ,eventTimeInHourUTC_tdt 。

    eventTimeInMinuteChina_tdt:用于显示以及按中国时间来指定查询范围。

    eventTimeInMinuteUTC_tdt:用于匹配NOW/DAY-7DAYS TO NOW/DAY等时间格式。因为solr5以前的版本只支持UTC时区。

    eventTimeInHourUTC_tdt:提升按小时范围查询的性能。可以给Hue的TimeLine功能使用。Hue的TimeLine字段和时间字段如果是一个字段,则不能自己选择时间段。

    SOLR_LOCATOR : {
      # Name of solr collection
      collection : event_count_records
      
      # ZooKeeper ensemble 
      #CDH的专有写法,开源版本不支持。
      zkHost : "$ZK_HOST"
      }
    
    morphlines : [
      {
        id : morphline1
        importCommands : ["org.kitesdk.**", "org.apache.solr.**"]
        
        commands : [   
    {
      #Flume传过来的kafka的json数据是用二进制流的形式,需要先读取json
       readJson{}
    }
    
    {
     #读出来的json字段必须转换成filed才能被solr索引到
    extractJsonPaths {
     flatten:true
     paths:{
    account:/account
    accountName:/accountName
    subaccount:/subaccount
    subaccountName:/subaccountName
    eventTime:/timestamp
    eventType:/eventType
    eventTags:"/eventTags[]/name"
    #按UTC时间存timestamp
    eventTimeInMinuteUTC_tdt:/timestamp
    #按China时间存timestamp
    eventTimeInMinuteChina_tdt:/timestamp
    #按UTC时间存timestamp
    eventTimeInHourUTC_tdt:/timestamp
    #_tdt后缀会被动态识别为日期类型的索引字段
    #按不同时间间隔存索引以增加查询性能
    }
     
    }
    }
    
    #转换long型时间为Date格式
    {convertTimestamp {
      field : eventTimeInMinuteChina_tdt
      inputFormats : ["unixTimeInMillis"]
      inputTimezone : UTC
      outputFormat : "yyyy-MM-dd'T'HH:mm:ss.SSS'Z/MINUTE'"
      outputTimezone : Asia/Shanghai
    }}
    
    {convertTimestamp {
      field : eventTimeInMinuteUTC_tdt
      inputFormats : ["unixTimeInMillis"]
      inputTimezone : UTC
      outputFormat : "yyyy-MM-dd'T'HH:mm:ss.SSS'Z/MINUTE'"
      outputTimezone : UTC
    }}
    
    {convertTimestamp {
      field : eventTimeInHourUTC_tdt
      inputFormats : ["unixTimeInMillis"]
      inputTimezone : UTC
      outputFormat : "yyyy-MM-dd'T'HH:mm:ss.SSS'Z/HOUR'"
      outputTimezone : UTC
    }}
    
    #kafka中的json数据传到flume中时会被放入_attachment_body字段,readJson后会变成JsonNode对象,需要toString之后才能保存
    {toString { field : _attachment_body }}
    
    
    #为每一条记录生成一个UUID
    {generateUUID {
      field : id
    }}
    
    #对未定义的Solr字段加tws前缀,根据schema.xml中定义的tws_*为text_ws类型,会动态未未定义的字段建索引。
              {  
            sanitizeUnknownSolrFields {  
              # Location from which to fetch Solr schema  
              solrLocator : ${SOLR_LOCATOR} 
              renameToPrefix:"tws_"
            }  
          }  
    
    #将数据导入到solr中                
          {loadSolr {solrLocator : ${SOLR_LOCATOR}}}
        ]
      }
    ]

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
    如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
    如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Arli】。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    第五百五十二天 how can I 坚持
    第五百五十一天 how can I 坚持
    第五百五十天 how can I 坚持
    第五百四十七、八、九 how can I 坚持
    第五百四十六天 how can I 坚持
    第五百四十五天 how can I 坚持
    第五百四十四 how can I 坚持
    第五百四十一、二、三天 how can I 坚持
    第五百四十天 how can I 坚持
    MySql
  • 原文地址:https://www.cnblogs.com/arli/p/6230361.html
Copyright © 2011-2022 走看看