第99课:使用Spark Streaming 实战对论坛网站动态行为的多维度分析
/* 王家林老师授课http://weibo.com/ilovepains 每天晚上20:00YY频道现场授课频道68917580*/
/**
* *第99课:使用Spark Streaming 实战对论坛网站动态行为的多维度分析
* 论坛数据自动生成代码,该生成的数据会作为Producer的方式发送给Kafka,然后SparkStreaming程序会从
* Kafka中在线Pull到论坛或者网站的用户在线行为信息,进而进行多维度的在线分析
* 数据格式如下:
* date:日期,格式为yyyy-MM-dd
* timestamp:时间戳
* userID:用户ID
* pageID:页面ID
* chanelID:板块的ID
* action:点击和注册 */
生成的用户点击模拟数据如下:
生成模拟数据关键步骤:
启用一个线程,模拟producer生成 的用户点击行为的数据,发送给kakfa
二:我们计算在线不同模块的PV
三:启动hadoop、spark、zookeeper、kafka集群
1.启动hadoop
2.启动spark 集群
3.启动zookeeper
4.将 SparkStreamingDataManuallyProducerForKafka达成jar包文件,使用winscp从本地传到虚拟机
5.启动kafka集群
6.在linux上运行,运行SparkStreamingDataManuallyProducerForKafka的jar包,将生成的数据加载到kafka集群,测试验证kafka上生产者消费者的情况
第一步:kafka建立 topic
kafka-topics.sh --create --zookeeper master:2181,worker1:2181,worker2:2181 --replication-factor 1 --partitions 1 --topic UserLogs
kafka查看 topic
kafka-topics.sh --describe --zookeeper master:2181,worker1:2181,worker2:2181
第二步:运行SparkStreamingDataManuallyProducerForKafka,java.lang.NoClassDefFoundError的解决办法
在linux上运行,运行SparkStreamingDataManuallyProducerForKafka的jar包
当用java -jar SparkStreamingDataManuallyProducerForKafka.jar来运行一个应用程序时,会找不到第三方的jar包。 当使用-jar参数运行时,JVM会屏蔽所有的外部classpath,而只以内部的class作为类的寻找范围。
解决方法:BootStrap class扩展方案
7.kafka消费 topic
在master生产数据:
[email protected]:/usr/local/IMF_testdata# java -Xbootclasspath/a:/usr/local/kafka_2.10-0.8.2.1/libs/kafka_2.10-0.8.2.1.jar:/usrocal/scala-2.10.4/lib/scala-library.jar:/usr/local/kafka_2.10-0.8.2.1/libs/log4j-1.2.16.jar:/usr/local/kafka_2.10-0.8.2.1/libs/metrics-core-2.2.0.jar:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/spark-streaming_2.10-1.6.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/kafka-clients-0.8.2.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/slf4j-log4j12-1.6.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/slf4j-api-1.7.6.jar
-jar SparkStreamingDataManuallyProducerForKafka.jar
在work1上启动消费
[email protected]:~# kafka-console-consumer.sh --zookeeper master:2181,worker1:2181,worker2:2181 --from-beginning --topic UserLogs
8.将OnlineBBSUserLogs达成jar包文件,使用winscp从本地传到虚拟机
9. 为避免敲入命令写错了,写个脚本来执行数据的产生
[email protected]:/usr/local/IMF_testdata# cat ProducerForKafka.sh
java -Xbootclasspath/a:/usr/local/kafka_2.10-0.8.2.1/libs/kafka_2.10-0.8.2.1.jar:/usr/local/scala-2.10.4/lib/scala-library.jar:/usr/local/kafka_2.10-0.8.2.1/libs/log4j-1.2.16.jar:/usr/local/kafka_2.10-0.8.2.1/libs/metrics-core-2.2.0.jar:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/spark-streaming_2.10-1.6.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/kafka-clients-0.8.2.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/slf4j-log4j12-1.6.1.jar:/usr/local/kafka_2.10-0.8.2.1/libs/slf4j-api-1.7.6.jar
-jar /usr/local/IMF_testdata/SparkStreamingDataManuallyProducerForKafka.jar
[email protected]:/usr/local/IMF_testdata#
10.OnlineBBSUserLogs成功消费数据,并统计出数值,实验成功
附:
OnlineBBSUserLogs的源代码
知识点:
1、创建kafka的createDirectStream,返回JavaPairInputDStream类型的line值
org.apache.spark.streaming.kafka.createDirectStream 源代码
2、读取kafka的数据流的值以后,进行相关mapToPair、reduceByKey的操作
mapToPair-reduceByKey-PairFunction-Function2的源代码
附录生成模拟数据的源代码:
王家林老师 :DT大数据梦工厂创始人和首席专家。
联系邮箱:[email protected] 电话:18610086859 QQ:1740415547
微信号:18610086859 微博:http://weibo.com/ilovepains/
每天晚上20:00YY频道现场授课频道68917580
IMF Spark源代码版本定制班学员 :
上海-段智华 QQ:1036179833 mail:[email protected] 微信 18918561505