amazon kinesis 和spark 流式处理kinesis+... · aws中国(北京)区域由光环新网运营...

40
AWS中国(北京)区域由光环新网运营 Amazon Kinesis Spark 流式处理 邓明轩,AWS解决方案架构师 Damon Deng, Solution Architect, Amazon Web Services 2017829August 29, 2017

Upload: others

Post on 30-Oct-2019

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis 和 Spark 流式处理

邓明轩,AWS解决方案架构师Damon Deng, Solution Architect, Amazon Web Services

2017年8月29日August 29, 2017

Page 2: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

议题

Amazon Kinesis基本介绍

Spark基本介绍

Spark 流式处理方式

在Spark中处理Amazon Kinesis数据

总结

Page 3: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis 基本介绍

Page 4: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis Streams

易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你的数据吞吐量。

构建实时应用程序: 使用 Kinesis Client Library (KCL), Apache Spark/Storm,

AWS Lambda, .... 等构建数据使用者应用程序。

费用低廉: 任何规模的工作负载都具有成本效益。

Page 5: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Data

Sources

App.4

[Machine

Learning]

AW

S E

nd

po

int

App.1

[Aggregate &

De-Duplicate]

Data

Sources

Data

Sources

Data

Sources

App.2

[Metric

Extraction]

App.3[Sliding

Window

Analysis]

Data

Sources

Availability

Zone

Shard 1

Shard 2

Shard N

Availability

ZoneAvailability

Zone

Amazon Kinesis 流处理基本架构

Page 6: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

• 流(Stream): 用于收集和存储数据。

• 分片(Shards): 流中数据记录的唯一标示组。

一个或多个分片组成一个流。

• 每个的分片容量单位:

• Put - 1MB/sec 或者1000 TPS

• Get - 2 MB/sec 或者 5 TPS

• 所有数据默认存储24小时; 最长可达7天。

• 使用 Resharding 扩展 Kinesis Stream,

以适应实际数据吞吐量的变化。

• 重播24小时内的数据。

Amazon Kinesis Streams 主要概念

Page 7: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

分片和数据记录

Stream

分片 1

分片 2

#1

Axyzz

#2

Abcd

#3

Bghiq

#4

Bjklm

数据记录

序列号

分区键

数据 Blob

Reads: 5 TPS; total 2 MB / second

Writes: 1000 records per second;

total 1 MB / second

Reads: 5 TPS; total 2 MB / second

Writes: 1000 records per second;

total 1 MB / second

Page 8: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis Stream: 数据输入

简单的 PUT API 存储数据 流名称

数据(payload)

分区键

根据分区键跨Shard分配数据

PUT 返回唯一的顺序号

Page 9: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Kinesis Client Library (KCL)

分布到多个 shards

容错

根据shard数量自动扩展

帮助实现分布式计算

Amazon Kinesis Stream: 数据读取

Page 10: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis Firehose

Data sources

AW

S en

dp

oin

t

Data sources

Data sources

Data sources

Data sources

No Partition Keys

No Provisioning

End-to-End Elastic

Amazon S3

Amazon Redshift

Amazon

Elasticsearch

Service

Page 11: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Amazon Kinesis Analytics

Connect to Kinesis streams,

Firehose delivery streamsRun standard SQL queries

against data streams

Kinesis Analytics can send processed data

to analytics tools so you can create alerts

and respond in real time

在流上应用SQL:轻松链接 Kinesis Stream 或 Firehose,执行SQL查询。

构建实时应用程序:对流数据执行一次性或者持续查询。

完全托管:自动化弹性扩展,弹性缩放以匹配数据吞吐量。

Page 12: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark基本介绍

Page 13: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark的发源

加州大学伯克利分校AMP实验室发表的论文:

• Resilient Distributed Datasets:

A Fault-Tolerant Abstraction

for In-Memory Cluster

Computing

一个开源的群集计算框架

希望代替“低效的”MapReduce计算框架

Page 14: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

MapReduce处理模型 vs Spark基于RDD图计算的处理模型

MapReduce• 定义mapper, reducer

• 数据来自HDFS,完成mapper和reducer计算后保存回HDFS

• 很多机器学习计算需要多次mapper, reducer的迭代

Spark• 定义RDD

• 定义RDD之间的关系• 完成所有RDD计算后保存回HDFS

Page 15: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Hadoop 应用堆栈

在Hadoop应用堆栈中MapReduce的地位和角色

HDFS

Yarn

MapReduce

Applications: Hive, Pig …

Page 16: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark 应用堆栈

Spark可以部署在Yarn和Mesos,也可以单独部署

Page 17: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark应用的工作方式

Spark on Yarn

Page 18: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark支持的编程语言

Scala

Java

Python

Page 19: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark应用样例

大数据领域的HelloWorld: WordCount

Page 20: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark流式处理方式

Page 21: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

什么是Spark流式处理(Spark Streaming)?

以一系列微型批处理构建的流式处理计算方式

Discretized Stream (DStream)• 代表一个数据流• 以一系列RDD的形式存在

DStreams 可以通过以下两种方式创建:• 通过流式输入源(streaming input)• 通过其它Dstream转换形成

Page 22: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

有向无环图(DAG)和RDD(Resilient Distributed Datasets)

一组分区(partition)

它所依赖的上一级RDD

从上一级RDD计算得出当前RDD的方法

(可选) 分区方法

(可选) 每个分区的期望的位置

Page 23: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

DAG中的RDD

RDD

Transformation

Action

Page 24: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

RDD 的操作

转换(Transformation)

• 通过一个现有的数据集生成一个新的数据集

• map, filter, distinct, union, sample, groupByKey, join, …

操作(Action)

• 通过计算返回一个/多个值

• collect, count, first, takeSample, foreach, …

转换和操作的详细列表:http://spark.apache.org/docs/latest/scala-programming-guide.html#rdd-operations

Page 25: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Twitter样例

Page 26: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

在Spark中处理Kinesis数据

Page 27: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark流式处理和Kinesis的集成架构

在Spark上下文环境中启动“Worker”,由“Worker”启动“Processor”线程对Kinesis Shard进行访问。

Page 28: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

KCL应用(Kinesis DStream)通过Dynamo

Db进行协同

Dstream通过KCL应用名称确定协同关系

一个Dstream可以对应多个Processor

一个Processor对应一个Kinesis Shard

Dstream 数量 (m)大于Shard数量(n)会产

生资源浪费

Kinesis DStream的协作

Kinesis Stream

Shard 1

Shard 2

Shard 3

Shard n

Kinesis DStream1

Record Processor 1

Record Processor 2

Kinesis Dstream 2

Record Processor 3

Kinesis Dstream m

Record Processor n

……

Page 29: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

创建Kinesis DStream

通过KinesisUtils创建Kinesis DStream

Kinesis Stream

Shard 1

Shard 2

Shard n

Kinesis DStream1

Record Processor 1

Kinesis Dstream 2

Record Processor 2

Kinesis Dstream n

Record Processor n

……

Page 30: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Spark Streaming上下文的创建

需要通过SparkConf()创建Spark配置对象• local[4] 表示本地4个core参与计算

• setAppName()用于设置Spark Streaming应用名

根据Spark配置对象生成Spark Streaming上下文• batchInterval是微型批处理的间隔时间

Page 31: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

KinesisClient的创建

通过AWS Credentials Chain获得证书

创建AmazonKinesisClient对象

设置KinesisClient的Endpoint

Page 32: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Kinesis Shard信息的获取

获得Shard数量,根据Shard数量确定Dstream数量

为每一个Shard调用一次KinesisUtils.createStream()

Page 33: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

KinesisUtils.createStream()的参数

[streamingContext]: • Spark Streaming上下文

[Kinesis app name]:• KCL名字,一个区域内唯一

[Kinesis stream name]: • Kinesis 流的名字

[endpoint URL]: • Kinesis流所在区域对应的

endpoint URL

[region name]: • 区域名称

[checkpoint interval]: • 保存checkpoint的时间间隔

[initial position]: • 起始位置

• InitialPositionInStream.TRIM_HORIZON

• InitialPositionInStream.LATEST

Page 34: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

DStream的合并

通过StreamingContext的union()方法合并多个DStream

Kinesis Stream

Shard 1

Shard 2

Shard n

Kinesis DStream1

Record Processor 1

Kinesis Dstream 2

Record Processor 2

Kinesis Dstream n

Record Processor n

……

unionStreams

partion 1

partion 2

partion n

Page 35: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

根据业务需求对Dstream进行转换

可以对Dstream执行map, flatMap, reduceByKey等转换操作

转换操作描述了Dstream之间的关系,不过并不触发计算

Page 36: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

通过Action触发计算

通过print这Action触发整个计算图的计算过程

Spark Streaming的上下文通过start方法正式启动

调用Spark Streaming上下文的awaitTermination()方法等待结束

Page 37: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

在Spark Streaming中向DynamoDB写入结果

创建AmazonDynamoDBClient,然后通过AmazonDynamoDBClient创建dynamoDB对象,接着获得table,再通过putIterm命令写入数据。

Page 38: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

整体架构

Page 39: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

议题

Amazon Kinesis基本介绍

Spark基本介绍

Spark 流式处理方式

在Spark中处理Kinesis数据

总结

Page 40: Amazon Kinesis 和Spark 流式处理Kinesis+... · AWS中国(北京)区域由光环新网运营 Amazon Kinesis Streams 易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你

AWS中国(北京)区域由光环新网运营

Thank You!