大数据IMF传奇行动绝密课程第100-101课:使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例

来源:互联网 发布:java约瑟夫问题 链表 编辑:程序博客网 时间:2024/04/30 22:38

使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例

1、项目分析流程图
2、项目代码实战

图100-1 SparkStreaming案例分析架构图

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()  }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办 哺乳期乳房一个大一个小怎么办 我喝酒后喂奶了怎么办 磁盘目录不具有读写权限怎么办 玻纤网格布扎手怎么办 模拟城市5细菌太多怎么办 空气风犁叶子卷怎么办 晚上腿比早上粗怎么办 新疆公安边防改革新兵怎么办 专升本没有考上怎么办 摩托车漏检了2年怎么办 19年北京外地车怎么办 汽车遥控钥匙按键坏了怎么办 长安逸动噪音大怎么办 微信设置密码参数错误怎么办 太阳能电加热不加热怎么办 没报到换了工作怎么办 大学最后一年入伍入伍毕业证怎么办 当官不为民做主怎么办 去青海高反了怎么办 地暖地板低于客厅地面怎么办 9万月3分利息怎么办 免维护电瓶亏电怎么办 自煮小火锅吃完怎么办 孕囊形状是扁的怎么办 老公去世房产转到老婆手续怎么办 宝宝一周岁隔奶不喝牛奶怎么办 高中生偷买手机家长怎么办 丈夫迷上打麻将妻子该怎么办 三星pin码忘记了怎么办