基于Kafka+Spark Streaming+HBase实时点击流案例
背景
Kafka实时记录从数据采集工具Flume或业务系统实时接口收集数据,并作为消息缓冲组件为上游实时计算框架提供可靠数据支撑,Spark 1.3版本后支持两种整合Kafka机制(Receiver-based Approach 和 Direct Approach),具体细节请参考文章最后官方文档链接,数据存储使用HBase
实现思路
- 实现Kafka消息生产者模拟器
- Spark Streaming采用Direct Approach方式实时获取Kafka中数据
- Spark Streaming对数据进行业务计算后存储到HBase
组件版本
Spark 2.1.0 Kafka0.9.0.1 HBase1.2.0
代码实现
Kafka消息模拟器
object KafkaMessageGenerator {
private val random = new Random()
private var pointer = -
private val os_type = Array(
"Android", "IPhone OS",
"None", "Windows Phone"
)
def click(): Double = {
random.nextInt()
}
def getOsType(): String = {
pointer = pointer +
if (pointer >= os_type.length) {
pointer =
os_type(pointer)
} else {
os_type(pointer)
}
}
def main(args: Array[String]): Unit = {
val topic = "user_events"
val props = new Properties()
props.put("bootstrap.servers", "10.3.71.154:9092")
props.put("key.serializer", "org.apache.kafka.common.serialization.IntegerSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
val producer = new KafkaProducer[String, String](props)
while (true) {
val event: JSONObject = new JSONObject()
event.put("uid", UUID.randomUUID()) //随机生成用户id
event.put("event_time", System.currentTimeMillis.toString) //记录事件发生时间
event.put("os_type", getOsType) //设备类型
event.put("click_count", click) //点击次数
val record = new ProducerRecord[String, String](topic, event.toString)
producer.send(record)
println("Message sent: " + event)
Thread.sleep()
}
}
}
Spark Streaming主类
object PageViewStream {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("PageViewStream").setMaster("local[*]")
//创建StreamingContext 批处理间隔5s
val ssc = new StreamingContext(conf, Seconds())
// kafka配置
val kafkaParams = Map[String, String](
"metadata.broker.list" -> "10.3.71.154:9092",
"serializer.class" -> "kafka.serializer.StringEncoder"
)
//创建一个direct stream
val kafkaStream: InputDStream[(String, String)] = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, Set("user_events"))
val events: DStream[JSONObject] = kafkaStream.flatMap(line => {
val data: JSONObject = JSON.parseObject(line._2)
Some(data)
})
// 计算用户点击次数
val userClicks: DStream[(String, Integer)] = events.map(x => (x.getString("uid"), x.getInteger("click_count"))).reduceByKey(_ + _)
userClicks.foreachRDD(rdd => {
rdd.foreachPartition(partitionOfRecords => {
//Hbase配置
val tableName = "PageViewStream2"
val hbaseConf = HBaseConfiguration.create()
hbaseConf.set("hbase.zookeeper.quorum", "master66")
hbaseConf.set("hbase.zookeeper.property.clientPort", "")
val conn = ConnectionFactory.createConnection(hbaseConf)
val StatTable = conn.getTable(TableName.valueOf(tableName))
partitionOfRecords.foreach(pair => {
//用户ID
val uid = pair._1
//点击次数
val click = pair._2
//组装数据 创建put对象 rowkey
val put = new Put(Bytes.toBytes(uid))
put.addColumn("Stat2".getBytes, "ClickStat".getBytes, Bytes.toBytes("TESTS============"))
StatTable.put(put)
})
})
})
ssc.start()
ssc.awaitTermination()
}
}
基于Kafka+Spark Streaming+HBase实时点击流案例的更多相关文章
- 日志=>flume=>kafka=>spark streaming=>hbase
日志=>flume=>kafka=>spark streaming=>hbase 日志部分 #coding=UTF-8 import random import time ur ...
- demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...
- 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...
- Apache Kafka + Spark Streaming Integration
1.目标 为了构建实时应用程序,Apache Kafka - Spark Streaming Integration是最佳组合.因此,在本文中,我们将详细了解Kafka中Spark Streamin ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)
异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...
随机推荐
- can not connect to MySQL server on "10.30.48.153"(13)
国庆节前好好的程序,完了回来愣是不能跑了! 真是纳闷了,而且邮件别人都发出去了,等于这跟别人一边使用一遍救火一样子了. 查了一下午,一直以为是机器mysql服务的问题,或者是我代码的问题.该找 ...
- Razor------引入css文件的方法
MVC3.0之前版本: <link href=@Url.Content("~/Content/Styles.css") rel="stylesheet" ...
- WebSphere和IHS的安装
环境:CentOS6.5, IP :192.168.0.91 hostname: IHS 1.下载Installation Manage安装包 URL:http://www.ibm.com/devel ...
- 改变PS1的颜色
我们能够通过配置PS1变量使提示符成为彩色.在PS1中配置字符序列颜色的格式为: \[\e[F;Bm\] 基本上是夹在 "\e["(转义开方括号)和 &qu ...
- unable to execute dex:GC overhead limit exceeded unable to execute dex:java heap space 解决方案
最近做厂商适配,厂商提供了一部分Framework的jar包,把jar包通过Add Jar放到Build Path中, 在生成APK过程中,Eclipse长时间停留在100%那个进度. 最后Eclip ...
- 一次Win10安装体验
我下载的是win10 Build 14279版本.http://www.iwin10.com/xiazai/1071.html 下载之后就直接拷到U盘安装了. 安装完之后发现(因为我是分区成了两个)我 ...
- golang 小知识-持续更新中
Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...
- Activity 设置切换动画
extends://blog.csdn.net/luohaowang320/article/details/42124225 | http://blog.csdn.net/xuewater/artic ...
- postgresql架构基础(转)-(1)
PostgreSQL使用一种客户端/服务器的模型.一次PostgreSQL会话由下列相关的进程(程序)组成: 一个服务器进程,它管理数据库文件.接受来自客户端应用与数据库的联接并且代表客户端在数据库上 ...
- postgresql----字符串函数与操作符
函数 返回值类型 描述 示例 结果 string||string text 字符串连接 select 'Post'||'gresql'||' good!'; Postgresql good! stri ...