sparkStreaming入门
1.环境
jdk : 1.8
scala : 2.11.7
hadoop:2.7
spark : 2.2.0
2. 开发工具
idea 2017.2
3.maven的pom文件
<dependencies>
<!-- https://mvnrepository.com/artifact/com.sun/tools -->
<!-- https://mvnrepository.com/artifact/org.apache.maven/maven-core -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
4.sparkStreaming通过本地的socket端口解析日志
package test02 import org.apache.spark.SparkConf
import org.apache.spark.streaming.Seconds
import org.apache.spark.streaming.StreamingContext object demo5 {
def main (args : Array[String]) {
val conf = new SparkConf().setMaster("local[4]").setAppName("SaprkApp")
val ssc = new StreamingContext(conf, Seconds(10))
val lines = ssc.socketTextStream("localhost", 9999) //测试数据 : 2017-07-18 11:02:52.032 INFO 172.31.20.232:56965 18583551@170718110244697@172.31.33.81 PUBLIC_USER_LOGIN(0202)-0 create session for 18583551/18583551@170718110244697@172.31.33.81
val loginRDD = lines.map(line =>{
val pattern = """^(\S+\s\d+\:\d+\:\d+\.\d{3})\s+\S+\s+(\d+\.\d+.\d+\.\d+):\d+\S+\s+(\d+)@(\S+)@\S+\s+PUBLIC_USER_LOGIN\(0202\)-0\s+create session for.*""".r
var login_time = ""
var ip_address = ""
var passport_id = ""
var session_id = ""
var scene_name = "login"
pattern.findAllIn(line).matchData foreach{m =>{
login_time = m.group(1)
ip_address = m.group(2)
passport_id = m.group(3)
session_id = m.group(4) println(login_time)
println(ip_address)
println(passport_id)
println(session_id) }}
(login_time,ip_address,passport_id,session_id,scene_name)
})
val loginRes = loginRDD.filter(_._1 != "").filter(_._2 != "")
loginRes.print() //测试数据 : 2017-07-18 11:03:44.312 INFO 0.0.0.0:18402 26639185@170718110334147@172.31.32.135 ADMIN_SYSTEM_SUCCESS(00FE)-84581 -> USER_DISCONNECTED Time cost 9.09ms
val logoutRDD = lines.map(line =>{
val pattern = """^(\S+\s\d+\:\d+\:\d+\.\d{3})\s+\S+\s+(\d+\.\d+\.\d+\.\d+):\d+\S+\s+(\d+)@(\S+)@.*(disconnected|DISCONNECTED).*""".r
var login_id = ""
var ip = ""
var passport_id = ""
var str = ""
var scene_name = "logout"
pattern.findAllIn(line).matchData foreach{m =>{
login_id = m.group(1)
ip = m.group(2)
passport_id = m.group(3)
str = m.group(4) println(login_id)
println(ip)
println(passport_id)
println(str) }}
(login_id,ip,passport_id,str)
})
val logoutRes = logoutRDD.filter(_._1 != "").filter(_._2 != "")
logoutRes.print()
logoutRes.saveAsTextFiles("/Users/huiliyang/streaming/aa") //测试数据 : 2017-08-27 06:04:38.420 [info] <0.3471.83> 172.31.2.201:59154 70281275 PUBLIC_SERVER_CLIENT_LOG(258)-0 LovelyStreet:1228
val eventRDD = lines.map(line =>{
val pattern = """^(\S+\s\d+\:\d+\:\d+\.\d{3})\s+\[info\]\s<[\d\.]*>\s?(\d+\.\d+\.\d+.\d+):\d+\S+\s+\S?([1-9]\d{7})(@\d+@\d+\.\d+\.\d+\.\d+)?\S?\s+PUBLIC_(SERVER|SYSTEM)_CLIENT\S+\s(\S+):(\d+)""".r
var login_time = ""
var ip_address = ""
var passport_id = ""
var session_id = ""
var str1 = ""
var str2 = ""
var str3 = ""
pattern.findAllIn(line).matchData foreach{m =>{
login_time = m.group(1)
ip_address = m.group(2)
passport_id = m.group(3)
session_id = m.group(4)
str1 = m.group(5)
str2 = m.group(6)
str3 = m.group(7) println(login_time)
println(ip_address)
println(passport_id)
println(session_id)
println(str1)
println(str2)
println(str3) }}
(login_time,ip_address,passport_id,session_id,str1,str2,str3)
})
val eventRes = eventRDD.filter(_._1 != "").filter(_._2 != "")
eventRes.print() ssc.start()
ssc.awaitTermination() }
}
sparkStreaming入门的更多相关文章
- 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)
1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...
- SparkStreaming入门及例子
看书大概了解了下Streaming的原理,但是木有动过手啊...万事开头难啊,一个wordcount 2小时怎么都运行不出结果.是我太蠢了,好了言归正传. SparkStreaming是一个批处理的流 ...
- SparkStreaming个人记录
一.SparkStreaming概述 SparkStreaming是一种构建在Spark基础上的实时计算框架,它扩展了Spark处理大规模流式数据的能力,以吞吐量高和容错能力强著称. SparkStr ...
- Spark Streaming——Spark第一代实时计算引擎
虽然SparkStreaming已经停止更新,Spark的重点也放到了 Structured Streaming ,但由于Spark版本过低或者其他技术选型问题,可能还是会选择SparkStreami ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
- 大数据入门第二十四天——SparkStreaming(一)入门与示例
一.概述 1.什么是spark streaming Spark Streaming is an extension of the core Spark API that enables scalabl ...
- 使用scala开发spark入门总结
使用scala开发spark入门总结 一.spark简单介绍 关于spark的介绍网上有很多,可以自行百度和google,这里只做简单介绍.推荐简单介绍连接:http://blog.jobbole.c ...
- Spark入门实战系列--1.Spark及其生态圈简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...
- Spark入门实战系列--6.SparkSQL(下)--Spark实战应用
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .运行环境说明 1.1 硬软件环境 线程,主频2.2G,10G内存 l 虚拟软件:VMwa ...
随机推荐
- php面向对象深入理解(一)
面向对象(Object Oriented Programming,OOP)的基础知识: 第一个例子: 类Test.class.php <?php class Test{ public $a= ...
- Delphi Xml
用递归方法,使用 xml 文档生成 Treeview 树形视图.由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,从而实现了 xml 对 Treeview 的动态配置, ...
- Java-Class-I:java.util.List
ylbtech-Java-Class-I:java.util.List 1.返回顶部 1.1.import java.util.ArrayList;import java.util.List; 1.2 ...
- python包下载路径
python所有包.模块镜像站 https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 使用idea从svn检出项目
1.创建空的工程 2. 3. 编辑项目进行提交svn服务器进行自动整合
- 关于SQL server2017无法连接远程服务器的问题
安装了SQL server2017,能连接上本地数据库,但是连接远程数据库则老报错,什么实例错误之类的,百度找了也是什么打开sql server 服务,什么修改端口1433,什么TCP协议之类的,全部 ...
- bc 进制间转换
我们通过bc的ibase和obase方法来进行进制转换 ibase是输入数字的进制,而obase就是输出数字的进制 两种方式进行转化 交互式的 ==注意:需要先设置obase== [root@dev ...
- leetcode-973-最接近原点的K个点
题目描述: 可参考:题215 方法一:排序 class Solution: def kClosest(self, points: List[List[int]], K: int) -> List ...
- mysql 数据库 内容的增删改查
/*所有字段插入值*//*注意插入值数目要与字段值一致*/INSERT INTO student VALUES(1,'熊大','123','2019-10-18',1200);INSERT INTO ...
- 巧用CSS3的calc()宽度计算做响应模式布局
今天浏览这个http://www.sitepoint.com站时,因为好奇看了下人家写的代码,结果发现了这行代码, 于是就研究了一下,calc()从字面我们可以把他理解为一个函数function.其实 ...