SPARK STREAMING之1:编程指南(翻译v1.4.1)

@(SPARK)[spark, 大数据]

  • SPARK STREAMING之1编程指南翻译v141

    • 概述
    • 快速入门例子
    • 基本概念
      • Linking

概述

Spark Streaming是Spark核心API的一个扩展,它使得spark可扩展、高吞吐、可容错的对实时数据流进行处理。可以通过集成外部系统获取数据来源,如 Kafka, Flume, Twitter, ZeroMQ, Kinesis, 或者 TCP sockets,还可以使用高度抽象的复杂算法,如map、reduce、join、window等。最后,处理完的数据可以直接发送到文件系统、数据库或者一些仪表盘。事实上,你还可以spark的机器学习和图处理算法直接运用于数据流中。

它的内部实现原理如下图: Spark Streaming收到实时输入数据,然后将它切分为多个批次,这些批次被spark引擎处理后同样以批次的形式输出最终的数据流。(注:也就是说Spark Streaming不是真正的实时系统,而是一个准实时系统,它会等待收集到一定量的数据后汇总成一个批次,然后再统一处理)

Spark Streaming有一个高度抽象概念叫做discretized stream or DStream(分离式流),它表示一个持续的数据流。DStream可以通过集成外部系统来获取(如kafka,flume等),或者通过对其它DStream操作后生成新的Dstream。在spark内部,DStream以一系列的RDD表示。

本文介绍了如何编写Spark Streaming的程序。你可以使用scala、java、python(1.2版本后)编写程序,这些内容都将在本文中介绍。在本文中,你可以通过点击标签选择查看不同语言所实现的代码。

注意:Spark Streaming的python API在1.2版本后引入的,它包括了scala/java所有的DStream transformation操作,以及大部分的输出操作。但是,只它支持基本的数据源(如文本文件,socket的文本数据等),集成kafka,flume的API将在以后的版本中实现。

快速入门例子

在详细介绍如何编写Spark Streaming程序前,我们先看一个简单的例子,在这个例子中,我们对从TCP scoket中收到的文本数据进行单词统计。步骤如下:

首先,我们导入Spark Streaming的相关类,以及StreamingContext(1.3版本后不再需要)。StreamingContext是所有streaming功能的进入点。在这个例子中,我们创建了一个local StreamingContext,它有2个执行线程,每1秒形成一个批次。

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._ // not necessary since Spark 1.3// Create a local StreamingContext with two working thread and batch interval of 1 second.
// The master requires 2 cores to prevent from a starvation scenario.val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))

使用这个context,我们创建一个从TCP socket获取数据的Dstream,它指定了主机名(localhost)以及端口号(9999)。

// Create a DStream that will connect to hostname:port, like localhost:9999
val lines = ssc.socketTextStream("localhost", 9999)

变量lines表示从数据服务器收到的数据流,DStream中的每一个数据记录表示一行。然后,我们将这些行以空格切分成单词。(注:事实上,lines代表的是每秒钟收到的数据,而在map操作中以行作为单位进行输入)

// Split each line into words
val words = lines.flatMap(_.split(" "))

flatMap是一个一对多的DStream操作,它从源DStream中读取一个记录,然后生成多个记录并发送到新的DStream中。在这个例子中,每一行内容都将切分为多个单词,这个单词流以words这个DStream表示。接下来,我们统计这些单词。

import org.apache.spark.streaming.StreamingContext._ // not necessary since Spark 1.3
// Count each word in each batch
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)// Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.print()

words这个DStream经过map操作后转换为一个(word,1)对的新DStream,然后统计每个单词的出现频率。最后,wordCouns.print()会每秒钟输出一些统计结果。

记住到这里为止,Spark Streaming只是定义了它会进行什么处理,但这些处理还没启动。你可以通过以下代码启动真正的处理进程:

ssc.start()             // Start the computation
ssc.awaitTermination()  // Wait for the computation to terminate

完整代码请见 Spark Streaming example NetworkWordCount.

如果你已经下载了spark,你可以按照下面的步骤运行。首先你需要运行netcat(一个在大多数类unix系统中都能找到的小工具)作为一个数据服务器:

$ nc -lk 9999

然后,在另一个终端中,你可以这样启动上面的例子:

$ ./bin/run-example streaming.NetworkWordCount localhost 9999

此时,你在nc终端中输入的每一行文本都将被统计并输出结果。如下:

# TERMINAL 1:
# Running Netcat
$ nc -lk 9999
hello world# TERMINAL 2: RUNNING NetworkWordCount$ ./bin/run-example streaming.NetworkWordCount localhost 9999
...
-------------------------------------------
Time: 1357008430000 ms
-------------------------------------------
(hello,1)
(world,1)
...

基本概念

下面,我们开始详细描述Spark Streaming的基本概念。

Linking

与spark 类似,spark streaming可以通过maven的中央仓库获取。开发Spark Streaming程序前,你需要将以下依赖关系放到你的maven或者sbt项目中。

 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.10</artifactId><version>1.4.1</version></dependency>

如果需要集成kafka, flume,kinesis等未在Spark Streaming 核心API中包含的数据源,你需要在依赖中添加类似 spark-streaming-xyz_2.10的依赖。一引起常用的如下:

Source  Artifact
Kafka   spark-streaming-kafka_2.10
Flume   spark-streaming-flume_2.10
Kinesis
spark-streaming-kinesis-asl_2.10 [Amazon Software License]
Twitter spark-streaming-twitter_2.10
ZeroMQ  spark-streaming-zeromq_2.10
MQTT    spark-streaming-mqtt_2.10

请参考maven的中央仓库以获得最新最全的依赖关系。

SPARK STREAMING之1:编程指南(翻译v1.4.1)相关推荐

  1. Apache Spark 3.0 DStreams-Streaming编程指南

    目录 总览 一个简单的例子 基本概念 连结中 初始化StreamingContext 离散流(DStreams) 输入DStreams和接收器 基本资料 进阶资源 自订来源 接收器可靠性 DStrea ...

  2. spark之4:编程指南

    spark之4:编程指南 @(SPARK)[spark, 大数据] (一)快速入门:基本步骤 1.创建一个maven项目 2.增加pom.xml中的依赖 <dependency><g ...

  3. Spark Streaming和Flume集成指南V1.4.1

    Apache Flume是一个用来有效地收集,聚集和移动大量日志数据的分布式的,有效的服务.这里我们解释一下怎样配置Flume和Spark Streaming来从Flume获取数据.这里有两个方法. ...

  4. Apache Spark 3.0 GraphX编程指南

    学习地址:https://spark.apache.org/docs/latest/graphx-programming-guide.html 目录 总览 入门 属性图 属性图示例 图运算符 运营商摘 ...

  5. Vulkan编程指南翻译 第七章 图形管线 第2节 Renderpasses(未完成)

    7.2  renderpass Vulkan图形管线和计算管线的区别之一是,你使用图形管线来渲染出像素,组成图像以供处理或显示给用户.在复杂的图形应用程序中,图片经过很多遍构建,每一遍都生成场景的一部 ...

  6. pythonspark实践_基于Python的Spark Streaming Kafka编程实践

    版权声明:本文为CSDN博主原创文章,未经博主允许不得转载. 说明 Spark Streaming的原理说明的文章很多,这里不做介绍.本文主要介绍使用Kafka作为数据源的编程模型,编码实践,以及一些 ...

  7. sparkstreaming监听hdfs目录如何终止_四十六、Spark Streaming简介及入门

    1.什么是Spark Streaming Spark Streaming是基于Spark Core之间的实时计算框架,可以从很多数据源消费数据并对数据进行处理.它是Spark核心API的一个扩展与封装 ...

  8. Spark编程指南V1.4.0(翻译)

    Spark编程指南V1.4.0 ·        简介 ·        接入Spark ·        Spark初始化 ·        使用Shell ·        在集群上部署代码 ·  ...

  9. Spark Streaming 编程指南[中英对照]

    2019独角兽企业重金招聘Python工程师标准>>> 基于Spark 2.0 Preview的材料翻译,原[英]文地址: http://spark.apache.org/docs/ ...

最新文章

  1. 爱情,真的那么奢侈吗?
  2. 宿主机丢失vmnet0和vmnet8网卡
  3. python三十八:re模块
  4. ToolStripStatusLabel设置时间自动更新
  5. 20220202--CTF刷题MISC方向--第5题--反编译
  6. PIE SDK主成分变换
  7. Python基础-变量作用域
  8. 小白也能看懂的缓存雪崩、穿透、击穿
  9. [INS-20802] Oracle Net Configuration Assistant failed
  10. 计算机应用基础2016高起专,2016年秋季《计算机应用基础(高起专)》期末考核
  11. 分享两个完整javaweb项目源码
  12. 多个excel文件合并到一个文件中的多个sheet表中
  13. unity打箱子小游戏demo
  14. Springboot项目启动异常 org.springframework.beans.factory.UnsatisfiedDependencyException
  15. PHP框架设计之 ThinkPHP5 源码解析
  16. POJ 3349.Snowflake Snow Snowflakes
  17. A001 - 基础 - 交换机原理简述
  18. python通讯录管理系统姓名年龄号码_基于互联网的移动通讯录管理系统的制作方法...
  19. 矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)
  20. 华为正式加入互联网路由安全规范 MANRS

热门文章

  1. 题意解读+详细题解-Leecode 319. 灯泡开关——Leecode每日一题系列
  2. Leecode06. Z 字形变换——Leecode大厂热题100道系列
  3. 红色警报 (25 分)【测试点分析】【两种解法】
  4. 1094 谷歌的招聘 (20分)_25行代码AC
  5. 23行代码_动图展示——快排详解(排序最快的经典算法)
  6. Python绘制三维散点图
  7. java jpanel 间距_Java的 . 调整JPanel上的问题大小
  8. Linux安装及管理程序——RPM和yum学会装软件超简单
  9. docker 分布式 lnmp 镜像制作
  10. clickhouse原理解析与应用实践_Hybrid App (混合应用) 技术全解析 方案原理篇