第98课: 使用Spark Streaming实战对论坛网站动态行为的多维度分析(上)
来源:互联网 发布:西安行知教育好不好 编辑:程序博客网 时间:2024/06/05 04:26
第98课: 使用Spark Streaming实战对论坛网站动态行为的多维度分析(上)
三件事情:
1、明天开始100天,超越美国开发团队
2、2016年,投资1亿美金,投资100家spark创业服务公司,技术支撑
3、100天地狱式、死亡式训练
================================================================================
场景: 电商 库存,物流,采购
这节课程的内容
1、kafka的producer,模拟用户的点击行为,通过代码的方式操作kafka
2、pv或uv
SparkSQLDataManually.java的代码复制过来SparkStreamingDataMannuallyProducerForKafka
生成的数据作为Producer的方式发送给Kafka,然后SparkSTreaming程序在Kafka中在线pull到论坛或网站的用
户在线行为信息,进行多维度的分析
给kafka写数据,要弄一个线程,不断的写数据,那我们构建一个线程;或者继承线程也可以,简化一点。
public class SparkStreamingDataMannuallyProducerForKafka extends Thread
写一个构造器,指定topic:
private String topic ;//发送给Kafka的数据的类别
private Producer <Integer,String> producerForKafka;
private static Sting dateToday;
private static Random random;
public SparkStreamingDataMannuallyProducerForKafka(String topic){
dateToday = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
this.topic = topic ;
//连上kafka
Properties conf = new Properties();
conf.put("metadata.broker.list","master:9092,worker1:9092,worker2:9092");
conf.put("serializer.class","kafka.serializer.StringEncoder");
//构造器的核心是要生成数据
//先要导入kafka的jar包 import kafka。producer
producerForKafka= new Producer <Integer,String> (new ProducerConfig(conf));
}
//作为线程而言,要复写run方法,先写业务逻辑,再写控制
public void run() {
int cunter =0 ;//搞500条
while(true){ //模拟实际情况,不断循环,异步过程,不可能是同步
counter ++;
String userLog = userLogs();
System.out.println("product:"+userLog );
//send是核心代码
producerForKafka.send(new KeyedMessage<Integer, String>(topic, userLog ));
if( 0 == counter%500) {
counter = 0;
try {
Thread.sleep(1000);}catch (....)
}
}
userLogs()方法中 修改代码
userLogBuffer.append(dateToday)
======================================
main中很简单了
public static void main (String[] args){
new SparkStreamingDataMannuallyProducerForKafka("userlogs").start();
}
============================
数据生成好了,下面写一下uv pv
===========================
OnlineBBSUserLogs.java
val sparkConf = new SparkConf().setAppName("OnlineBBSUserLogs ")
.setMaster("local[2]")
val ssc = new StreamingContext(sparkConf, Seconds(15))
Map<String,String> kafkaParameters =new HashMap<String,String>();
kafkaParameters .put("metadata.broker.list","master:9092,worker1:9092,worker2:9092");
Set topics = new HashSet<String>();
topics.add("UserLogs");
//StringDecoder.class要导入kafka的包
JavaPairInputDStream<String,String> lines = KafkaUtils.createDirectStream
(jsc,String.class,String.class,
StringDecoder.class,StringDecoder.class,kafkaParametes,topics);
看源代码,createDirectStream返回的类型看一下,继承InputDStream。
业务代码找pv,有两种view register,那么写一个filter代码
JavaPairDStream<String,String> logsDStream= lines.filter(new
Funtion<Tuple2<String,Sting>,Boolean(){
@Override
public Boolean call(Tuple2<String,Sting>, v1) throws Exception {
String[] logs = v1._2.split("\t");
String action = logs[5];
if ("view".equals(action)) {
return true;
} else {
return false; }
}
});
JavaPairDStream<String,String> pairs= logsDStream.mapToPair(new
PairFuntion<Tuple2<String,Sting>,Long,Long (){
@Override
public Tuple2<Long,Long> call(Tuple2<String,Sting>, t) throws Exception {
String[] logs = t._2.split("\t");
Long pageId=Long.valudeOf(logs[3]);
retun new Tuple2<Long,Long>(pageId=Long.valudeOf,1L);
}
});
//过滤出了目标数据,下一步reducebykey
JavaPairDStream<Long, Long> wordsCount = pairs.reduceByKey(new Function2<Long,
Long, Long>() { //对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)
@Override
public Long call(Long v1, Long v2) throws Exception {
return v1 + v2;
}
});
//打印出来,在企业生产环境中,一般会把计算的数据保存到Redis或者DB中,采用J2EE等技术进行趋势绘制,
领导爱看这个,就像动态更新的股票交易一样,实现在线的监控
wordsCount.print();
jsc.start();
jsc.awaitTermination();
- 第98课: 使用Spark Streaming实战对论坛网站动态行为的多维度分析(上)
- 第98讲 使用Spark Streaming实战对论坛网站动态行为的多维度分析(上)
- 大数据IMF传奇行动绝密课程第98-99课:使用Spark Streaming实战对论坛网站动态行为的多维度分析
- 第99课:使用Spark Streaming+Kafka实战对论坛网站动态行为的多维度分析及java.lang.NoClassDefFoundError问题解决完整内幕版本解密
- 使用Spark Streaming实战对网站动态行为的多维度分析
- Spark Streaming实战对论坛网站动态行为pv,uv,注册人数,跳出率的多维度分析
- 第99讲:使用sparkStreaming实战对论坛网站动态行为的多维度分析下
- 实战7.Spark Streaming(上)--Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- 在Spark Streaming上使用Spark Mllib的思路实现
- 实战7.Spark Streaming(下)--Spark Streaming实战
- 第97课: 使用Spark Streaming+Spark SQL实现在线动态计算出特定时间窗口下的不同种类商品中的热门商品排名
- Spark定制班第31课:集群运行模式下的Spark Streaming调试和难点解决实战经验分享
- 一致性哈希(1)
- HDOJ1198 Farm Irrigation(DFS)
- hdoj2037详解(附带浅谈冒泡排序)
- Monkey and Banana(DP)
- iOS应用数据存储的常用方式
- 第98课: 使用Spark Streaming实战对论坛网站动态行为的多维度分析(上)
- STL中map、set的数据结构及底层实现
- linux readhat DNS设置方法
- 【HUSTOJ】1057: 数字走向II
- boost静态链接库和c++/clr不兼容问题:未能加载文件或程序集,不是有效的Win32应用程序。
- 基于web storage的客户端留言板
- 公司同事发生的真事
- JavaScript相等和全等
- Mac环境中Jenkins的停止和启动命令