amazon kinesis 和spark 流式处理kinesis+... · aws中国(北京)区域由光环新网运营...
TRANSCRIPT
AWS中国(北京)区域由光环新网运营
Amazon Kinesis 和 Spark 流式处理
邓明轩,AWS解决方案架构师Damon Deng, Solution Architect, Amazon Web Services
2017年8月29日August 29, 2017
AWS中国(北京)区域由光环新网运营
议题
Amazon Kinesis基本介绍
Spark基本介绍
Spark 流式处理方式
在Spark中处理Amazon Kinesis数据
总结
AWS中国(北京)区域由光环新网运营
Amazon Kinesis 基本介绍
AWS中国(北京)区域由光环新网运营
Amazon Kinesis Streams
易于管理: 创建流、设置初始分片数量,之后动态扩展或缩减分片数量以匹配你的数据吞吐量。
构建实时应用程序: 使用 Kinesis Client Library (KCL), Apache Spark/Storm,
AWS Lambda, .... 等构建数据使用者应用程序。
费用低廉: 任何规模的工作负载都具有成本效益。
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 流处理基本架构
AWS中国(北京)区域由光环新网运营
• 流(Stream): 用于收集和存储数据。
• 分片(Shards): 流中数据记录的唯一标示组。
一个或多个分片组成一个流。
• 每个的分片容量单位:
• Put - 1MB/sec 或者1000 TPS
• Get - 2 MB/sec 或者 5 TPS
• 所有数据默认存储24小时; 最长可达7天。
• 使用 Resharding 扩展 Kinesis Stream,
以适应实际数据吞吐量的变化。
• 重播24小时内的数据。
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
AWS中国(北京)区域由光环新网运营
Amazon Kinesis Stream: 数据输入
简单的 PUT API 存储数据 流名称
数据(payload)
分区键
根据分区键跨Shard分配数据
PUT 返回唯一的顺序号
AWS中国(北京)区域由光环新网运营
Kinesis Client Library (KCL)
分布到多个 shards
容错
根据shard数量自动扩展
帮助实现分布式计算
Amazon Kinesis Stream: 数据读取
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
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查询。
构建实时应用程序:对流数据执行一次性或者持续查询。
完全托管:自动化弹性扩展,弹性缩放以匹配数据吞吐量。
AWS中国(北京)区域由光环新网运营
Spark基本介绍
AWS中国(北京)区域由光环新网运营
Spark的发源
加州大学伯克利分校AMP实验室发表的论文:
• Resilient Distributed Datasets:
A Fault-Tolerant Abstraction
for In-Memory Cluster
Computing
一个开源的群集计算框架
希望代替“低效的”MapReduce计算框架
AWS中国(北京)区域由光环新网运营
MapReduce处理模型 vs Spark基于RDD图计算的处理模型
MapReduce• 定义mapper, reducer
• 数据来自HDFS,完成mapper和reducer计算后保存回HDFS
• 很多机器学习计算需要多次mapper, reducer的迭代
Spark• 定义RDD
• 定义RDD之间的关系• 完成所有RDD计算后保存回HDFS
AWS中国(北京)区域由光环新网运营
Hadoop 应用堆栈
在Hadoop应用堆栈中MapReduce的地位和角色
HDFS
Yarn
MapReduce
Applications: Hive, Pig …
AWS中国(北京)区域由光环新网运营
Spark 应用堆栈
Spark可以部署在Yarn和Mesos,也可以单独部署
AWS中国(北京)区域由光环新网运营
Spark应用的工作方式
Spark on Yarn
AWS中国(北京)区域由光环新网运营
Spark支持的编程语言
Scala
Java
Python
AWS中国(北京)区域由光环新网运营
Spark应用样例
大数据领域的HelloWorld: WordCount
AWS中国(北京)区域由光环新网运营
Spark流式处理方式
AWS中国(北京)区域由光环新网运营
什么是Spark流式处理(Spark Streaming)?
以一系列微型批处理构建的流式处理计算方式
Discretized Stream (DStream)• 代表一个数据流• 以一系列RDD的形式存在
DStreams 可以通过以下两种方式创建:• 通过流式输入源(streaming input)• 通过其它Dstream转换形成
AWS中国(北京)区域由光环新网运营
有向无环图(DAG)和RDD(Resilient Distributed Datasets)
一组分区(partition)
它所依赖的上一级RDD
从上一级RDD计算得出当前RDD的方法
(可选) 分区方法
(可选) 每个分区的期望的位置
AWS中国(北京)区域由光环新网运营
DAG中的RDD
RDD
Transformation
Action
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
AWS中国(北京)区域由光环新网运营
Twitter样例
AWS中国(北京)区域由光环新网运营
在Spark中处理Kinesis数据
AWS中国(北京)区域由光环新网运营
Spark流式处理和Kinesis的集成架构
在Spark上下文环境中启动“Worker”,由“Worker”启动“Processor”线程对Kinesis Shard进行访问。
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
……
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
……
AWS中国(北京)区域由光环新网运营
Spark Streaming上下文的创建
需要通过SparkConf()创建Spark配置对象• local[4] 表示本地4个core参与计算
• setAppName()用于设置Spark Streaming应用名
根据Spark配置对象生成Spark Streaming上下文• batchInterval是微型批处理的间隔时间
AWS中国(北京)区域由光环新网运营
KinesisClient的创建
通过AWS Credentials Chain获得证书
创建AmazonKinesisClient对象
设置KinesisClient的Endpoint
AWS中国(北京)区域由光环新网运营
Kinesis Shard信息的获取
获得Shard数量,根据Shard数量确定Dstream数量
为每一个Shard调用一次KinesisUtils.createStream()
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
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
…
AWS中国(北京)区域由光环新网运营
根据业务需求对Dstream进行转换
可以对Dstream执行map, flatMap, reduceByKey等转换操作
转换操作描述了Dstream之间的关系,不过并不触发计算
AWS中国(北京)区域由光环新网运营
通过Action触发计算
通过print这Action触发整个计算图的计算过程
Spark Streaming的上下文通过start方法正式启动
调用Spark Streaming上下文的awaitTermination()方法等待结束
AWS中国(北京)区域由光环新网运营
在Spark Streaming中向DynamoDB写入结果
创建AmazonDynamoDBClient,然后通过AmazonDynamoDBClient创建dynamoDB对象,接着获得table,再通过putIterm命令写入数据。
AWS中国(北京)区域由光环新网运营
整体架构
AWS中国(北京)区域由光环新网运营
议题
Amazon Kinesis基本介绍
Spark基本介绍
Spark 流式处理方式
在Spark中处理Kinesis数据
总结
AWS中国(北京)区域由光环新网运营
Thank You!