Sparkstreaming之实时数据流计算实例(Scala)
来源:互联网 发布:建筑设计mars软件简介 编辑:程序博客网 时间:2024/05/29 18:49
本文的列子来自http://blog.csdn.net/zfszhangyuan/article/details/52522974,部分内容做了相应的修改和添加
首先我们要做一个日志生产器,方便本地模拟线上环境:
直接上代码吧(原理是根据一个原始日志log,然后随机的从中挑选行添加到新生产的日志中,并且生产的数据量呈不断的增长态势)
[hadoop@h71 hui]$ vi FileGenerater.scala
import java.io._ import java.text.SimpleDateFormat import org.apache.spark.{SparkConf, SparkContext} import java.util.Date import java.io.{PrintWriter} import scala.io.Source import scala.util.matching.Regex object FileGenerater { def main(args: Array[String]) { var i=0 while (i<100 ) { val filename = args(0) val lines = Source.fromFile(filename).getLines.toList val filerow = lines.length val writer = new PrintWriter(new File("/home/hadoop/a/sparkstreamingtest"+i+".txt" )) i=i+1 var j=0 while(j<i) { writer.write(lines(index(filerow))) println(lines(index(filerow))) j=j+1 } writer.close() Thread sleep 5000 log(getNowTime(),"/home/hadoop/a/sparkstreamingtest"+i+".txt generated") } } def log(date: String, message: String) = { println(date + "----" + message) } /** * 从每行日志解析出imei和logid * **/ def index(length: Int) = { import java.util.Random val rdm = new Random rdm.nextInt(length) } def getNowTime():String={ val now:Date = new Date() val datetimeFormat:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") val ntime = datetimeFormat.format( now ) ntime } /** * 根据时间字符串获取时间,单位(秒) * **/ def getTimeByString(timeString: String): Long = { val sf: SimpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss") sf.parse(timeString).getTime / 1000 } }
zhangfusheng.txt内容如下:
安徽 宿州市 汽车宿州分公司 王红岩 18955079 20538
浙江 嘉兴市 汽车海宁分公司 金韩伟 15305793 15703
安徽 滁州市 汽车滁州分公司 严敏 15385906 14403
湖北 武汉市 汽车湖北汽车服务分公司 张晴 18902923 10870
安徽 淮北市 汽车淮北分公司 李亚 15305501 10484
安徽 滁州市 汽车滁州分公司 王旭东 153055412 10174
安徽 淮南市 汽车淮南分公司 尹芳 181096430 10085
湖北 省直辖行政单位 汽车仙桃分公司 汤黎 189170533 9638
湖北 null 汽车潜江分公司 朱疆振 18996689 9479
安徽 宣城 汽车宣城分公司 李倩 18098229 9381
江苏 徐州 丰县分公司 李萍 18914805005 9340 归属地
安徽 滁州市 汽车滁州分公司 阚家萍 15304795 9180
广东 中山 汽车服务中心 农小萍 18070101 9095 归属地
湖北 孝感 汽车孝感分公司 黄燕平 189957628 8595 归属地
安徽 芜湖 null 邹恒清 18055349069 8537 归属地
江西 null 汽车江西分公司产品事业部(汽车服务分公司、互联网安全管理中心) 张凯 17118 8089
安徽 淮南市 汽车淮南分公司 李磊 18957707 8039
湖北 省直辖行政单位 汽车仙桃分公司 朱艳 189770380 8025
浙江 温州 汽车温州分公司(本部) 吴玉春 153050010 7729 归属地
安徽 淮北市 汽车淮北分公司 魏薇 15305232 7533
湖北 省直辖行政单位 汽车仙桃分公司 王雪纯 18972060 7405
湖北 宜昌市 汽车宜昌分公司 刘丽娟 189086005 7269
湖北 武汉市 汽车湖北汽车服务分公司 陶劲松 189182796 7209
安徽 淮北 汽车合肥分公司 刘洁 181561187 7108 归属地
湖北 null 宜昌电信公司 鲜艳 18908606 7000
安徽 淮北市 汽车淮北分公司 钱玉 105612841 6837
湖北 武汉市 汽车湖北汽车服务分公司 谢真华 187181833 6757
安徽 null 马鞍山公司 张颖 153096590 6710
安徽 芜湖市 汽车芜湖分公司 许丽丽 155535300 6694
安徽 合肥市 汽车合肥分公司 杨华丽 15305168 6666
安徽 铜陵市 汽车铜陵分公司 黄琳 153629216 6665
安徽 马鞍山 汽车马鞍山分公司 林花 13395726 6487
贵州 null 汽车贵州分公司10000号运营中心 陈宣宏 189101372 6421
安徽 合肥市 汽车合肥分公司 黄乐 153005266 6271
安徽 淮南市 汽车淮南分公司 赵乃艳 153058367 6263
湖北 武汉市 汽车湖北汽车服务分公司 蔡蕾 189076931 6218
湖北 null 汽车潜江分公司 陈晓辉 18996898 6176
安徽 马鞍山市 汽车马鞍山分公司 陈凤 15305365 6116
安徽 合肥市 汽车合肥分公司 李大燕 18096819 6036
注:原文章中的分隔符是\t,但是在Linux的vim中复制数据时就会把\t变成了空格,很蛋疼的,我这里索性就都改成了空格,省的到时候出错
运行上面的代码:
[hadoop@h71 hui]$ scala FileGenerater /home/hadoop/b/zhangfusheng.txt
湖北 武汉市 汽车湖北汽车服务分公司 谢真华 187181833 67572017-03-18 06:25:06----/home/hadoop/a/sparkstreamingtest1.txt generated安徽 滁州市 汽车滁州分公司 严敏 15385906 14403湖北 孝感 汽车孝感分公司 黄燕平 189957628 8595 归属地2017-03-18 06:25:11----/home/hadoop/a/sparkstreamingtest2.txt generated安徽 宿州市 汽车宿州分公司 王红岩 18955079 20538安徽 淮北市 汽车淮北分公司 钱玉 105612841 6837浙江 温州 汽车温州分公司(本部) 吴玉春 153050010 7729 归属地2017-03-18 06:25:16----/home/hadoop/a/sparkstreamingtest3.txt generated安徽 铜陵市 汽车铜陵分公司 黄琳 153629216 6665湖北 null 宜昌电信公司 鲜艳 18908606 7000安徽 null 马鞍山公司 张颖 153096590 6710安徽 淮南市 汽车淮南分公司 赵乃艳 153058367 62632017-03-18 06:25:21----/home/hadoop/a/sparkstreamingtest4.txt generated安徽 淮北市 汽车淮北分公司 李亚 15305501 10484湖北 宜昌市 汽车宜昌分公司 刘丽娟 189086005 7269安徽 淮南市 汽车淮南分公司 尹芳 181096430 10085安徽 芜湖市 汽车芜湖分公司 许丽丽 155535300 6694湖北 武汉市 汽车湖北汽车服务分公司 谢真华 187181833 67572017-03-18 06:25:26----/home/hadoop/a/sparkstreamingtest5.txt generated湖北 武汉市 汽车湖北汽车服务分公司 陶劲松 189182796 7209湖北 武汉市 汽车湖北汽车服务分公司 蔡蕾 189076931 6218湖北 null 汽车潜江分公司 朱疆振 18996689 9479安徽 淮北市 汽车淮北分公司 李亚 15305501 10484安徽 合肥市 汽车合肥分公司 杨华丽 15305168 6666湖北 省直辖行政单位 汽车仙桃分公司 王雪纯 18972060 7405
注意:还得在.bash_profile中的export CLASSPATH添加:/home/hadoop/spark-1.6.3-bin-hadoop2.6/lib/*,否则会报这个错:
[hadoop@h71 ~]$ scalac FileGenerater.scala
FileGenerater.scala:3: error: object spark is not a member of package org.apacheimport org.apache.spark.{SparkConf, SparkContext} ^one error found
编写sparkstreaming代码:
import org.apache.spark.SparkConf import org.apache.spark.streaming._; object SparkStreaming { def main(args: Array[String]) { //开本地线程两个处理,local[4]:意思本地起4个进程运行,setAppName("SparkStreaming"):设置运行处理类 val conf = new SparkConf().setMaster("local[4]").setAppName("SparkStreaming") //每隔5秒计算一批数据 val ssc = new StreamingContext(conf, Seconds(5)) // 指定监控的目录 val lines = ssc.textFileStream("file:///home/hadoop/a") //按\t 切分输入数据 val words = lines.flatMap(_.split(" ")) //计算wordcount val pairs = words.map(word => (word, 1)) //word ++ val wordCounts = pairs.reduceByKey(_ + _) //排序结果集打印,先转成rdd,然后排序true升序,false降序,可以指定key和value排序_._1是key,_._2是value val sortResult = wordCounts.transform(rdd => rdd.sortBy(_._2, false)) sortResult.print() ssc.start() // 开启计算 ssc.awaitTermination() // 阻塞等待计算 }}
将代码打成haha.jar并上传到Linux的/home/hadoop/spark-1.6.3-bin-hadoop2.6目录下,在运行FileGenerater.scala的同时运行SparkStreaming.scala
[hadoop@h71 spark-1.6.3-bin-hadoop2.6]$ bin/spark-submit --class SparkStreaming haha.jar
-------------------------------------------Time: 1489789730000 ms-------------------------------------------(null,9)(武汉市,7)(汽车湖北汽车服务分公司,7)(省直辖行政单位,5)(汽车仙桃分公司,5)(汽车合肥分公司,4)(合肥市,4)(汽车马鞍山分公司,4)(汽车淮北分公司,3)(汽车滁州分公司,3)...
阅读全文
0 0
- Sparkstreaming之实时数据流计算实例(Scala)
- sparkstreaming之实时数据流计算实例
- 浅谈实时数据流计算
- SparkStreaming之scala开发方式f-2
- sparkStreaming带状态更新(scala)
- 实时计算框架之二:Storm之入门实例
- scala sparkstreaming wordcount
- storm实时计算实例(socket实时接入)
- 实时计算之storm
- 实时计算之storm
- SparkSQL结合SparkStreaming,使用SQL完成实时计算中的数据统计
- SparkStreaming的worldCount实例
- Spark+kafka+SparkStreaming实例
- Java流编程实例之六--数据流
- 大数据流式计算:关键技术及系统实例
- 实时数据流处理简介
- SparkStreaming计算WordCount简单示例
- SparkStreaming计算WordCount简单示例
- Qt实现计算器
- jquery 实现 table 和 标题 的联动显示
- JS——简单的登录框提示
- 安卓listview item内部控件操作方法
- 使用自动装配注入合作者Bean
- Sparkstreaming之实时数据流计算实例(Scala)
- thymleaf基础入门(一)ajax,判断
- Qt 布局
- laplace mesh deformation
- PowerDesigner16.5破解工具
- 代理模式
- 对tcp/ip协议的理解
- SQL语句集合
- Codeforces Round #406 (Div. 1) B. Legacy 线段树建图跑最短路