Spark Streaming

一、Apache Spark核心编程模块(基础编程)

集批处理(离线处理)、交互式处理和流式处理为一体的一栈式大数据解决框架

1、Core

  • 最核心,Spark其他所有模块的基础
    • 数据结构:弹性分布式数据集RDD
      SparkContext: sc
      • 批处理(batch processing),处理数据 N + 1
      • 注意:
        每次处理的数据都是一个固定的数据集,不是变化的

2、SQL

  • DataFrame/Dataset = RDD + Scheme(字段名称和字段类型)
    • SparkSession:spark
      • SQLContext/HiveContext
      • 交互式处理(iteractive processing)
      • 注意:
        每次处理的数据都是一个固定的数据集,不是变化的

3、Streaming

  • 流式数据处理框架(Streaming Processing)
    • 要处理的数据就像流水一样,源源不断的产生数据,需要实时进行数据处理
    • 数据结构:
      • DStream = List 集合:集合中的数据类型为RDD
        • 离散的、分离流
  • 对SparkCore的高级API的封装,将流式的数据切分为小的批次batch(按照时间间隔划分)的数据,然后使用SparkCore对每批次的数据进行处理。
    • 如何读取流式数据的??
      • StreamingContext:上下文对象从实时流式数据源接收数据
        • SparkContext实例对象

二、在大数据技术框架中,对于流式数据实时分析处理方案

  1. 一条一条的处理

    • 来一条数据就处理一条数据
      • 典型框架:Storm
      • 特点:
        • 实时性很高,亚秒级别延迟,延迟性很低,事务性很好
      • 阿里巴巴:
        • Storm -> JStorm
        • 2017年双十一 ,实时销售额统计:
          • Flink -> Blink
  2. 一批次一批次数据的处理

    • 按照时间间隔将数据划分,时间间隔比较短,比如1s
      • 框架:SparkStreaming
        • 近实时流式数据处理框架,延迟性很低,2.2.0以后,1ms以内

官方案例

http://spark.apache.org/docs/2.2.0/streaming-programming-guide.html#a-quick-example

  • 案例说明
    • 实时词频统计:对每批次的数据进行词频统计
  • 数据源:
    TCP Socket监控某台机器某个端口,读取数据
    使用Linux系统自带nc工具
    $ 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 处理数据的流程

  • 数据源
    • 从哪里接收读取数据,进行实时数据的处理分析
      • Kafka(最多)/Flume(少数)/Tcp Sockect(开发测试)
        DStream: 离散的流、分离的流
  • 数据处理
    • DStream#transformation
      • 调用转换函数,将DStream转换为另外一个DStream
    • 针对不同的业务需求使用不同的函数
    • 企业中最多两种统计类型的业务:
      • 实时累加统计
        • 比如双十一 销售额统计,订单数目统计
          DStream#updateStateByKey
          DStream#mapWithState - 性能很好
      • 实时统计最近某段时间数据
        • 比如:趋势统计分析
          • 10:30 - 13:30 时间
            每次统计二十分钟内未送达的订单
          • 11:00 ->
            10:40 - 11:00 此段时间内未送达订单量
          • 11:05 ->
            10:45 - 11:05 …
        • 窗口数据统计分析
          DStream#window
          DStream#xxWindow
  • 存储数据(DStream#output)
    其实就是调用RDD中API将数据存储,每批次数据处理完成以后,就进行一次保存输出,微处理
    • Console
      开始测试的时候,将实时分析的每批次结果RDD数据打印到控制台
    • Redis
      基于内存分布式Key/Value数据库
    • HBase
      存储到HBase表中,此时实时应用通常ETL工具
    • RDBMS
      关系型数据库中,通过JDBC/MyBatis

四、企业中对于流式典型的数据实时处理的技术框架

Flume/SDK -> Kafka -> SparkStreaming/Storm/Flink -> Redis/HBase

五、SparkStreaming中DStream Output输出函数

  • def foreachRDD(foreachFunc: RDD[T] => Unit): Unit
    • 一个参数,仅仅针对每批次处理结果RDD
  • def foreachRDD(foreachFunc: (RDD[T], Time) => Unit): Unit
    • 两个参数,每批次处理结果RDD和每批次处理的时间

六、SparkStreaming中DStream的transform转换函数(重要)

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
    快速数据处理层 -> 实时数据分析
  • Server Layer
    提供数据展示层 -> WEB 展示离线或实时分析结果数据

针对SparkStraming运行在本地模式的时候

bin/spark-shell --master local[3]

  • 当从Tcp Sockect接收数据
    需要启动一个Receiver(Task方式运行)接收数据
  • 为了并行计算数据
    需要2个Thread运行2个Task

注意

  • 从TCP Socket接收数据,Receiver按照时间间隔将数据流划分为block
    blockInterval = 200ms(默认值)(可以减小值,来增加partition)
  • SparkStreaming处理数据批时间间隔
    batchInterval = 1s = 1000ms(假设设置为1s)

八、消息系统Kafka

  • 分布式消息队列(Message Queue)系统
    集群:存储消息(数据)
    • Topic(主题/类型)
      将同一个类型的数据放在一起,类似数据库中表
    • 分区存储(Partition)
      一个Topic中的数据分为很多分区
    • 副本数(Partition)
      每个分区的数据有不同的副本,存储在不同机器上
    • 服务名称Broker
      依赖于Zookeeper协作服务(类似HBase)
    • 以提交日志方式存储数据
      Commit Log
  • 发布订阅功能
    类比:微信公众号

1、Kafka 下载

http://kafka.apache.org/downloads
http://archive.apache.org/dist/kafka/
针对Scala 2.11编译包,Kafka 0.8.2.1
http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz

  • 快速安装部署:
    http://kafka.apache.org/documentation/
    http://kafka.apache.org/082/documentation.html
    http://kafka.apache.org/082/documentation.html#quickstart

2、安装Kafka伪分布式集群环境

类似Zookeeper框架分布式安装部署

  • 单机部署:standalone
    在一台机器上启动一个JVM进程服务
  • 伪分布式模式
    在一台机器上,启动多个JVM进程服务

配置

拷贝{KAFKA_HOME}/config/server.properties 文件三份,修改如下:

  • 配置唯一标识符
    20行
    broker.id=9092
  • 配置Broker端口号
    25行
    port=9092
  • 配置Broker运行的主机名称
    28行
    host.name=bigdata-training01.erongda.com
  • 配置日志文件存储目录
    58行
    log.dirs=/opt/cdh-5.7.6/kafka_2.11-0.8.2.1/kafkaLogs/logs9092
  • 配置ZK地址及存储ZNODE根目录
    zookeeper.connect=bigdata-training01.erongda.com:2181/kafka

启动服务

$ bin/kafka-server-start.sh -daemon config/server9092.properties 
$ bin/kafka-server-start.sh -daemon config/server9093.properties
$ bin/kafka-server-start.sh -daemon config/server9094.properties
  • Create a topic
    • Topic的分区副本数 大于等于 Brokers的数量
      bin/kafka-topics.sh --create --zookeeper bigdata-training01.erongda.com:2181/kafka --replication-factor 2 --partitions 3 --topic testTopic
  • List topic
    bin/kafka-topics.sh --list --zookeeper bigdata-training01.erongda.com:2181/kafka
  • Send some messages
    bin/kafka-console-producer.sh --broker-list
    bigdata-training01.erongda.com:9092,bigdata-training01.erongda.com:9093,bigdata-training01.erongda.com:9094 --topic testTopic
  • Start a consumer
    bin/kafka-console-consumer.sh --zookeeper bigdata-training01.erongda.com:2181/kafka --topic testTopic --from-beginning

Kafka的安装部署

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值