大数据IMF传奇行动绝密课程第100-101课:使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例
来源:互联网 发布:java约瑟夫问题 链表 编辑:程序博客网 时间:2024/04/30 22:38
使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例
1、项目分析流程图
2、项目代码实战
Flume sink到Kafka需要一个jar包支持
https://github.com/beyondj2ee/flumeng-kafka-plugin/tree/master/flumeng-kafka-plugin
编辑flume-conf.properties
#配置sinkagent1.sinks.sink1.type=org.apache.flume.plugins.KafkaSinkagent1.sinks.sink1.metadata.broker.list=Master:9092,Worker1:9092,Worker2.9092agent1.sinks.sink1.partition.key=0agent1.sinks.sink1.partitioner.class=org.apache.flume.plugins.SinglePartitionagent1.sinks.sink1.serializer.class=kafka.serializer.StringEncoderagent1.sinks.sink1.request.requiredacks=0agent1.sinks.sink1.max.message.size=1000000agent1.sinks.sink1.producer.type=syncagent1.sinks.sink1.custom.encoding=UTF-8agent1.sinks.sink1.custom.topic.name=HelloKafkaagent1.sinks.sink1.channel= channel1
Kafka也可以监控文件夹,但为什么要用Flume?Kafka只能接收json格式的文件
数据来源?
互联网:电商、社交网络等的网站和App程序
传统行业:金融、电信、医疗、农业、生产制造行业;
例如说:在京东上进行广告的推送,当我们点击广告的时候,此时肯定有日志记录Log发送回到Server中,或者说我们使用Android,iOS等中的App,都会设置有数据记录的关键点(埋点)
如果是网站,经典的方式是通过JS透过Ajax把日志穿回到服务器上,如果是移动App等一般是通过Socket,其他的传感器或者工业设备可以通过自己的通信协议把数据传回到服务器端
为了应对高并发访问,一般采用Nginx等作为Server前段,Server的分布式集群来做负载均衡
Tomcat、Apache、WebLogic作为Server后端
Server中接收到请求路由后一般都会对每个请求在文件中写一条Log
Logs Cluster可以专门设置日志服务器集群,所有的Server和J2EE类型的业务逻辑在执行过程中产生的日志信息都可以在后台同步到日志服务器集群中
Server中接收到请求路由后一般都会对每个请求在文件中写一条Log,可以自动配置Server写日志
企业中一般都会有Crontab等定时工具来通过日志整理工具来把当天的日志采集、合并和初步的处理形成一份日志文件,然后发送到Flume监控目录中
当Flume发现有新的日志文件进来的时候会按照配置把数据通过Channel来Sink到目的地,这里是Sink到Kafka集群中
HDFS:
1、使用MapReduce作业对数据进行出不清洗,并写入新的HDFS文件中。
2、清洗后的数据一般导入到Hive数据仓库中,可以采用分区表
3、通过Hive中的SQL,在数据仓库的基础上,进行ETL,此时的ETL会把原始的数据生成很多张目标的table
企业生产环境下,Spark数据都是来自Hive
一个小例子
package com.tom.spark.sparkstreamingimport org.apache.commons.codec.StringDecoderimport org.apache.spark.SparkConfimport org.apache.spark.sql.hive.HiveContextimport org.apache.spark.streaming.kafka.KafkaUtilsimport org.apache.spark.streaming.{Durations, Seconds, StreamingContext}/** * 使用Scala开发集群运行的Spark来实现在线热搜词 */case class MessageItem(name: String, age: Int)object SparkStreamingFromKafkaFlume2Hive { def main(args: Array[String]): Unit = { if(args.length < 2) { System.err.println("Please input your kafka broker list and topics to consume") System.exit(1) } val conf = new SparkConf().setAppName("SparkStreamingFromKafkaFlume2Hive").setMaster("local[2]") val ssc = new StreamingContext(conf, Durations.seconds(5)) val Array(brokers, topics) = args val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers) val topicsParams = topics.split(",").toSet KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsParams) .map(_._2.split(",")).foreachRDD(rdd => { val hiveContext = new HiveContext(rdd.sparkContext) import hiveContext.implicits._ rdd.map(record => MessageItem(record(0).trim,record(1).trim.toInt)).toDF().registerTempTable("temp") hiveContext.sql("SELECT count(*) FROM temp").show() }) // Flume会作为Kafka的Producer把数据写入到Kafka供本程序消费 ssc.start() ssc.awaitTermination() }}
- 大数据IMF传奇行动绝密课程第100-101课:使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例
- 大数据IMF传奇行动绝密课程第67课:spark SQL案例综合实战
- 大数据IMF传奇行动绝密课程第104-114课:Spark Streaming电商广告点击综合案例
- 大数据IMF传奇行动绝密课程第75-79课:Spark SQL基于网站Log的综合案例实战
- 大数据IMF传奇行动绝密课程第80课:Spark SQL网站搜索综合案例实战
- 大数据IMF传奇行动绝密课程第65课:Spark SQL下Parquet深入进阶
- 大数据IMF传奇行动绝密课程第68课:Spark SQL通过JDBC操作MySQL
- 大数据IMF传奇行动绝密课程第69课:Spark SQL通过Hive数据源实战
- 大数据IMF传奇行动绝密课程第73课:Spark SQL Thrift Server实战
- 大数据IMF传奇行动绝密课程第117课:Spark Streaming性能优化:如何最大程度的确保Spark Cluster和Kafka连接的稳定性
- 大数据IMF传奇行动绝密课程第87课:Flume推送数据到Spark Streaming案例实战和内幕源码解密
- 大数据IMF传奇行动绝密课程第82课:Spark Streaming案例动手实战并在电光石火间理解其工作原理
- 大数据IMF传奇行动绝密课程第74课:Hive on Spark大揭秘
- 大数据IMF传奇行动绝密课程第48课:Spark性能优化第四季
- 大数据IMF传奇行动绝密课程第83课:透彻讲解使用Scala和Java两种方式实战Spark Streaming开发
- 大数据IMF传奇行动绝密课程第98-99课:使用Spark Streaming实战对论坛网站动态行为的多维度分析
- 大数据IMF传奇行动绝密课程第118课:Spark Streaming性能优化:如何获得和持续使用足够的集群计算资源
- 大数据IMF传奇行动绝密课程第61课:Spark SQL数据加载和保存内幕深度解密实战
- ACM递归递推练习 Problem I
- 前端笔试题总结(一)
- ECMAScript6学习笔记——块级作用域
- 可视化 —— 二维平面上的散列点在坐标轴方向上的移动
- 欧拉函数
- 大数据IMF传奇行动绝密课程第100-101课:使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例
- stein算法求gcd
- 小z的袜子(莫队算法)
- synchronizied 静态方法和非静态方法
- [机房练习赛4.3]drive
- android studio基础知识2 -- 设置代理,轻松下载sdk
- 响应式布局开发 -6
- 练习
- CSUOJ 1861 Unscrambling Images 直接模拟,题面有点难看