1. 日志格式
    202.108.16.254^A1546795482.600^A/cntv.gif?appId=3&areaId=8213&srcContId=2535575&areaType=1&srcContName=%E5%88%87%E7%89%B9%E9%87%8C%E6%A2%85%E5%BC%80%E4%BA%8C%E5%BA%A6+%E5%8D%B0%E5%BA%A64-1%E5%A4%A7%E8%83%9C%E6%B3%B0%E5%9B%BD%E5%96%9C%E8%BF%8E%E5%BC%80%E9%97%A8%E7%BA%A2&clientChannel=vivo&clientVersion=2.7.2&contId=2535584&serverIp=172.16.42.154&menuId=8212&visitTime=20190107012442630&url=http%3A%2F%2Fm.cctv4g.com%2Fcntv%2Fresource%2Fcltv2%2FdramaDetailPage.jsp%3FcontId%3D2535575%26dataType%3D3%26stats_menuId%3D8212%26stats_areaId%3D8213%26stats_areaType%3D1%26stats_contId%3D2535584%26stats_srcContType%3D3%26stats_srcContId%3D2535575%26wdChannelName%3Dvivo%26wdVersionName%3D2.7.2%26wdClientType%3D1%26wdAppId%3D3%26wdNetType%3D4G%26uuid%3De8fb9e0c-5b59-36f6-80d7-88df323fa750&srcContType=3&appName=CCTV%E6%89%8B%E6%9C%BA%E7%94%B5%E8%A7%86++%EF%BC%88V2%EF%BC%89&netType=4G&areaName=%E6%B5%B7%E6%8A%A5&contName=%E5%88%87%E7%89%B9%E9%87%8C%E6%A2%85%E5%BC%80%E4%BA%8C%E5%BA%A6+%E5%8D%B0%E5%BA%A64-1%E5%A4%A7%E8%83%9C%E6%B3%B0%E5%9B%BD%E5%96%9C%E8%BF%8E%E5%BC%80%E9%97%A8%E7%BA%A2&sessionId=59787199A5F8278836AD26F672743C29&ua=yichengtianxia&en=e_pv&uuid=e8fb9e0c-5b59-36f6-80d7-88df323fa750&clientIp=223.104.105.169&menuName=2019%E5%B9%B4%E9%98%BF%E8%81%94%E9%85%8B%E4%BA%9A%E6%B4%B2%E6%9D%AF&clientType=1
  1. 数据视频审核记录与用户访问记录 进行了实时解析 demo程序)
    改进:硬编码改为软编码 ,解析构建成解析类,代码优化 与逻辑判断加强(多次测试还未出错)
    1.离线数据后续可将转为dataframe存入hive进行仓库存储进行离线分析(spark coresql都可以)=》存入mysql进行datav ,或者后端报表
    2.实时存入mysql或者hbase进行实时展示 (前面几篇已经记载了)
  1. import java.net.URLDecoder
  2. import java.sql.{Connection, DriverManager}
  3.  
  4. import com.spark.common.{EventLogConstants, LoggerUtil, Test, TimeUtil}
  5. import kafka.serializer.StringDecoder
  6. import org.apache.hadoop.hbase.client.{ConnectionFactory, Put}
  7. import org.apache.hadoop.hbase.util.Bytes
  8. import org.apache.hadoop.hbase.{HBaseConfiguration, TableName}
  9. import org.apache.log4j.Logger
  10. import org.apache.spark.streaming.dstream.DStream
  11. import org.apache.spark.streaming.kafka.KafkaUtils
  12. import org.apache.spark.streaming.{Seconds, StreamingContext}
  13. import org.apache.spark.{SparkConf, SparkContext}
  14.  
  15. import scala.collection.immutable.HashMap
  16.  
  17. object SxRlStatDemo extends Serializable {
  18. val logger = Logger.getLogger(classOf[LoggerUtil])
  19. private val serialVersionUID = -4892194648703458595L
  20.  
  21. def main(args: Array[String]): Unit = {
  22. val conf = new SparkConf()
  23. conf.setMaster("local[2]").setAppName("sxdemo")
  24. .set("spark.streaming.kafka.maxRatePerPartition", "100")
  25. .set("spark.streaming.backpressure.enabled", "true")
  26. //开启被压
  27. val sc = SparkContext.getOrCreate(conf)
  28. val ssc = new StreamingContext(sc, Seconds(1))
  29.  
  30. // 二、DStream的构建
  31. // kafka的Simple consumer API的连接参数, 只有两个
  32. // metadata.broker.list: 给定Kafka的服务器路径信息
  33. // auto.offset.reset:给定consumer的偏移量的值,largest表示设置为最大值,smallest表示设置为最小值(最大值&最小值指的是对应的分区中的日志数据的偏移量的值) ==> 每次启动都生效
  34. val kafkaParams = Map[String, String](
  35. "metadata.broker.list" -> "hadoop04:9092,hadoop05:9092,hadoop06:9092",
  36. "auto.offset.reset" -> "largest",
  37. "key.serializer" -> "org.apache.kafka.common.serialization.StringSerializer",
  38. "value.serializer" -> "org.apache.kafka.common.serialization.StringSerializer")
  39. // "spark.serializer"->"org.apache.spark.serializer.KryoSerializer")
  40. // 给定一个由topic名称组成的set集合
  41. val topics = Set("topic_bc")
  42. val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics).map(_._2)
  43. // .mapog => {
  44. //
  45.  
  46. // })
  47. .transform(rdd => {
  48. rdd.map(log => {
  49. var map: Map[String, String] = new HashMap[String, String]
  50. val splits = log.split("\\^A")
  51. if (splits.length==3){
  52. val ip = splits(0).trim
  53. val nginxTime = TimeUtil.parseNginxServerTime2Long(splits(1).trim).toString;
  54. if (nginxTime != "-1") {
  55. nginxTime.toString
  56. }
  57. val requestStr = splits(2)
  58. val index = requestStr.indexOf("?")
  59. if (index > -1) { // 有请求参数的情况下,获取?后面的参数
  60. val requestBody: String = requestStr.substring(index + 1)
  61. var areaInfo = if (ip.nonEmpty) Test.getInfo(ip) else Array("un", "un", "un")
  62. val requestParames = requestBody.split("&")
  63. for (e <- requestParames) {
  64. val index = e.indexOf("=")
  65. if (index < 1) {
  66. logger.debug("次日志无法解析")
  67. }
  68. var key = ""; var value = "";
  69. key = e.substring(0, index)
  70. value = URLDecoder.decode(e.substring(index + 1), EventLogConstants.LOG_PARAM_CHARSET)
  71. map.+=(key -> value)
  72. }
  73. map.+=("ip" -> ip, "s_time" -> nginxTime, "country" -> areaInfo(0), "provence" -> areaInfo(1), "city" -> areaInfo(2))
  74. }else{ logger.debug("次日志无法解析")}
  75. }
  76. map
  77. })
  78.  
  79. })
  80. stream.cache()
  81. ssc.checkpoint("checkpoint")
  82. val bc_personAmt = stream.filter(log => log.contains("en") && log("en") == "e_sx")
  83. // combine_map.get("test_101").getOrElse("不存在") //根据key取value值,如果不存在返回后面的值
  84. // scala> a.get(1)
  85. // res0: Option[Int] = Some(2) get返回的是Option[Int]类型 不可能等于" " ==Some("e_la")
  86. .map(log => (log("bc_person"), 1))
  87. .updateStateByKey[Long]((seq: Seq[Int], state: Option[Long]) => {
  88. //seq:Seq[Long] 当前批次中每个相同key的value组成的Seq
  89. val currentValue = seq.sum
  90. //state:Option[Long] 代表当前批次之前的所有批次的累计的结果,val对于wordcount而言就是先前所有批次中相同单词出现的总次数
  91. val preValue = state.getOrElse(0L)
  92. Some(currentValue + preValue)
  93. })

spark与kafka集成进行实时 nginx代理 这种sdk埋点 原生日志实时解析 处理的更多相关文章

  1. Kafka集成SparkStreaming

    Spark Streaming + Kafka集成指南 Kafka项目在版本0.8和0.10之间引入了一个新的消费者API,因此有两个独立的相应Spark Streaming包可用.请选择正确的包,  ...

  2. spark读取 kafka nginx网站日志消息 并写入HDFS中(转)

    原文链接:spark读取 kafka nginx网站日志消息 并写入HDFS中 spark 版本为1.0 kafka 版本为0.8 首先来看看kafka的架构图 详细了解请参考官方 我这边有三台机器用 ...

  3. Spark Streaming和Kafka集成深入浅出

    写在前面 本文主要介绍Spark Streaming基本概念.kafka集成.Offset管理 本文主要介绍Spark Streaming基本概念.kafka集成.Offset管理 一.概述 Spar ...

  4. Spark Streaming之四:Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年,成为Spark平台上流式处理的解决方案,同时也给大家提供除Storm 以外的另一个选择.这篇内容主要介绍Spark Streaming 数据接收 ...

  5. Spark Streaming与Kafka集成

    Spark Streaming与Kafka集成 1.介绍 kafka是一个发布订阅消息系统,具有分布式.分区化.多副本提交日志特点.kafka项目在0.8和0.10之间引入了一种新型消费者API,注意 ...

  6. Openresty+Lua+Kafka实现日志实时采集

    简介 在很多数据采集场景下,Flume作为一个高性能采集日志的工具,相信大家都知道它.许多人想起Flume这个组件能联想到的大多数都是Flume跟Kafka相结合进行日志的采集,这种方案有很多他的优点 ...

  7. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  8. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  9. Nginx - 代理、缓存

    Nginx 标签 : nginx 代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送 ...

随机推荐

  1. MACD回零轴有三种方式

    MACD回零轴三种方式 MACD上双线回抽或者回档到0轴附近: 第一主动回零轴. 第二被动回零轴. 第三单N回零轴. 随后的走势第二种涨幅最猛.第三种级别最大. 这里要正确理解背离.背离有三种.1,指 ...

  2. windows系统redmine安装总结

    今天在公司服务器上安装了redmine,主要用于项目管理和缺陷跟踪.安装过程比较简单,总结如下: 1.网上下载redmine安装包(bitnami-redmine-3.3.1-0-windows-in ...

  3. AlertWindowManager 弹出提示窗口使用帮助(上)

    LookAndFeel(界面外观): NativeStyle:本地化界面为真实用系统内置外观 SkinName:本地化界面(NativeStyle:)设置为假可使用皮肤外观 OptionAnimate ...

  4. socket 套接字总结

    简单版 服务端 import socket import struct import json import os server_dir = r'E:\Moudule_1\socket练习\serve ...

  5. 007-js中的Array常用方法

    原文:http://www.runoob.com/jsref/jsref-obj-array.html 摘要常用方法 const array=new Array(); // 1 增加元素 // 1.1 ...

  6. 在IIS6中FLV不能播放

    故障:Flv文件在本地能播放,上传到服务器上不能播放. 原因:WIN2003加强了IIS6的MIME验证,一切未注册扩展文件格式统统显示404错误. 解决办法:在IIS服务器上添加对.FLV文件的支持 ...

  7. java 根据word xml模板生成word

    这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说 1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jso ...

  8. MySQL 基础 备份和恢复

    数据库备份 mysqldump [args] > file_name 例如:备份所有数据库 shell> mysqldump --all-databases > dump.sql # ...

  9. np.Linear algebra学习

    转自:https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.linalg.html 1.分解 //其中我觉得可以的就是svd奇异值分解吧 ...

  10. 对k8s service的一些理解

    服务service service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务 举个例子一个a服务运行3个pod,b服务怎么访问a服务的pod, ...