Day46[20180726]_Spark Streaming(一)

目录

Apache Spark核心编程模块

安装nc工具

SparkStreaming 处理数据的流程

技术框架

 SparkStreaming原理

Apache Spark核心编程模块

集批处理(离线处理)、交互式处理和流式处理 为一体的一栈式大数据解决方案
    - Core
        最核心,Spark 其他所有模块都是以此为基础进行展开
        数据结构:分布式集合RDD
        SparkContext:sc
        批处理(batch processing),处理数据N+1
        注意:
            每次处理的数据都是一个固定的数据集,不是变化的
    - SQL
        DataFrame/Dataset = RDD + schema(字段名称和字段类型)
        SparkSession:spark
            SQLContext/HiveContext
        交互式处理(iteractive processing)
                注意:
            每次处理的数据都是一个固定的数据集,不是变化的
    - Streaming
        流式数据处理框架(Streaming Processing)
            要处理的数据就像流水一样,源源不断的产生数据,需要实时进行数据处理
        数据结构:
            DStream = List<RDD> 集合:集合中数据元素为RDD
                离散的流、分离的流
        对SparkCore的高级API的封装,将流式的数据切分为小的批次batch(按照时间间隔划分)
        的数据,然后使用SparkCore对每批次的数据进行处理
        如何读取流式数据的?
        StreamingContext:上下对象从实时流式数据源接收数据
        SparkContext

在大数据技术框架中,对于流式数据实时分析处理方案;
    -1. 一条一条的处理
        来一条数据就处理一条数据
        典型框架:Storm
        特点:
            实时很高 ,亚秒级别,延迟性很低
        阿里巴巴
            Storm -> JStorm
            2017年双十一,实时销售额统计:
                Flink -> Blink
    -2. 一批次一批次数据的处理
        按照时间间隔将数据划分,时间间隔比较短,比如1s
        框架: SparkStreaming
            近实时流式数据处理框架,延迟性很低,2.2.0以后开始,1ms以内

安装nc工具

官方文档:
http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html
A Quick Example:
http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html#a-
quick-example

数据源: 

 TCP Sockect监控某台机器某个端口,读取数据

  使用Linux系统自带nc工具

安装nc工具:
使用Linux系统自带nc工具
     $ chmod u+x nc-1.84-22.el6.x86_64.rpm
     $ sudo rpm -ivh nc-1.84-22.el6.x86_64.rpm
测试是否安装成功 

数据展示:

            将数据处理以后的结果打印到控制台

                println

  演示:

 开启第一个终端:

  $ nc -lk 9999
  hadoop spark spark spark hadoop hive

 开启第二个终端:

bin/run-example --master local[3] streaming.NetworkWordCount 
bigdata-training01.erongda.com 9999

 继续不断向第一个终端添加数据:

SparkStreaming 处理数据的流程

-1. 数据源 
        从哪里接收读取数据,进行数据的处理
        Kafka(最多)/Flume(少数)/TCP Sockect(开发测试)
            DStream:分离的流
    -2. 数据处理
        DStream#transformation
            调用转换函数,将DStream转换为另外一个DStream
        针对不同的业务需求使用不同的函数
        企业中最多两种统计类型业务:
            - 实时累加统计
                比如双十一 销售额统计,订单数统计
                DStream#updateStateByKey
            - 实时统计最近某段时间数据
                比如:趋势统计分析
                  20:00 - 20:20 二十分钟内,外面订单未送达的量
                  20:10 - 20:30 ...........................
                  20:15 - 20:35 ...........................
                DStream#xxWinos()
    -3. 存储数据(DStream#output)
        其实就是调用RDD中API将数据存储,每批次数据处理完成以后,就进行一次保存输出
        而已,微批处理(Core)。
        - Console
            开发测试的时候,将实时分析每批次结果RDD数据打印在控制台
        - Redis
            基于内存的分布式Key/Value数据库
        - HBase 
            存储到HBase表中,此时实时应用通常是ETL工具
        - RDBMS
            关系型数据库中,通过JDBC/MyBatis
企业中对于流式典型的数据实时处理的技术框架:
Flume/SDK -> Kafka -> sparkStreaming/Storm/Flink -> Redis/HBase
SparkStreamin中DStream Output输出函数:
    -1. def foreachRDD(foreachFunc: RDD[T] => Unit): Unit
        一个参数,仅仅针对每批次处理结果RDD
    -2. def foreachRDD(foreachFunc: (RDD[T], Time) => Unit): Unit
        两个参数,每批次处理结果RDD和每批次处理时间
SparkStreaming中DStream中transform函数很重要:
   >>其实就是将RDD转换为另一种RDD其他都是不变的
    DStream(List<RDD>).transform = DStream(List<RDD>)
    DStream#transform
        将一个DStream应用的一个转换函数上转换为另外一个DStream
        针对DStream中每批次RDD进行操作的,转换为另外一个RDD
    - 一个参数RDD:
        def transform[U: ClassTag](transformFunc:
        RDD[T] => RDD[U]): DStream[U] 
    - 两个参数,每批次处理结果RDD和每批次处理时间
        def transform[U: ClassTag](transformFunc: 
        (RDD[T], Time) => RDD[U]): DStream[U] 

技术框架

企业中做大户数据分析平台,技术架构:
    符合 Lambda Architecture架构
    - Batch Layer 
        批数据处理层 -> 离线数据分析
    - Speed Layer 
        快速数据处理层  -> 实时数据分析
    - ServerLayer
        提供数据展示层  -> WEB 展示离线或实时分析结果数据

 SparkStreaming原理

SparkStreaming:
    - batchInterval
        批处理时间间隔
        通过创阿金StreamingContext实例对象进行设置
        表明每次处理的数据时间间隔,RDD 
    - blockInteval
        每次block划分的时间间隔
        启动一个Streaming应用的时候,将会启动Receiver用于接收数据,按照blockInterval将
    Streaming数据划分为block,默认情况下blockInterval为200ms
    计算:
        batchInterval = 1s = 5 * batchInterval
            1 RDD = 1 block

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值