完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 ›...

31
完整的大数据解決方案

Transcript of 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 ›...

Page 1: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

完整的大数据解決方案

Page 2: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

ABOUT ME

唐建法 / TJ

MongoDB 高级方案架构师

MongoDB 中文社区联合发起人

AGENDA

Spark 介绍

Spark 和 MongoDB

案例

演示

Page 3: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark 介绍

Page 4: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

什么是Spark ?

通用,快速,大规模数据处理引擎

Spark SQL

Streaming

Machine Learning

Java, Python, Scala, R

内部循环数据流程

全内存计算

可比Map Reduce 快100倍

横向扩展,集团作战

HDFS原生支持

Page 5: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

我能用它做什么?

个性化 产品推荐 流处理 商业智能

Page 6: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark 生态系统

Hive

Pig

SparkSQL

Dataframe

SparkStreaming

SparkHadoopMapReduce

Mesos

SparkStandAlone

YARN

Mesos

SparkStandAlone

HDFSHDFS

数据存儲

资源管理

计算引擎

程序接口

Page 7: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

HDFS vs. MongoDB

HDFS MongoDB

共同点

横向扩展,支持TB-PB级数据量低成本, x86

数据自动多份复制

支持非结构化数据

差异点

粗颗粒度存储

细颗粒度,结构化存储

无索引 二级索引

一次写入,多次读 读写混合

非交互式,离线分钟级SLA

交互式,实时在线毫秒级SLA

Page 8: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

一个日志的例子

2016-07-31.log

2016-07-30.log

2016-07-01.log

{ts:2016-07-3123:50:50,host:xyz,error:404,.body:{}…}

{ts:2016-07-3123:49:23,host:def,error:019,.body:{}…}

{ts:2016-07-3123:49:22,host:xyz,error:null,body:{}…}

...

{ts:2016-07-0102:04:12,host:abc,error:500,body:{}…}

... 使用场景 HDFS MongoDB

7月1日到31日所有页面的点击量统计 OK OK

每日HTTP 404错误日志数量统计 低效:需要扫描所有文件行

可利用索引 秒级响应

对日志行增加自定义字段 保存分析结果

不支持 OK

索引 { error: 1 }

Page 9: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark + MongoDB

Page 10: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark工作方式

Parellelize

Parellelize

Parellelize

Parellelize

Transform

Transform

Transform

Transform

Action

Action

Action

Action

mapfilterunion

intersect

Result

Result

Result

Result

Page 11: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

EXECUTOR

WORKER

Spark Master

Driver

EXECUTOR

WORKER

EXECUTOR

WORKER

EXECUTOR

WORKER

STORA

GE

PROCE

SSIN

G

Spark MongoDB 架构

任务调度 原始数据 计算结果

连接器

Page 12: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

EXECUTOR

WORKER

Spark Master

Driver

EXECUTOR

WORKER

EXECUTOR

WORKER

EXECUTOR

WORKER

STORA

GE

PROCE

SSIN

G

Spark MongoDB HDFS混合架构

任务调度 原始数据 计算结果

连接器

Page 13: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Mongo Spark Connector 连接器

双向支持:读出与写入 条件下推 本地数据访问

https://github.com/mongodb/mongo-spark

Page 14: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

案例分享

Page 15: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark + MongoDB 成功案例

客戶 案例 实现价值

乘客行为大数据分析, 客戶360度视图

改善的客户体验, 降低客户流失

实时监控分析跨国银行所有客户交易行为

降低客户资金风险, 提高合规性

运价计算集群及缓存, 降低机票查询响应时间

改善用户使用体验, 提高直销率

Page 16: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

东方航空的挑战

260,000

50%

130,000

每天需支持运价 查询数量,基于12000:1查定比

16 亿

Page 17: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

思路:空间换时间

目前运价实现为实时计算, 可以支持每天1000多万QPS

空间换时间

实时 运算

MongoDB MongoDB

LAXNYC

StayDuration

Date

LAXBOS

StayDuration

Date

NYCLAX

StayDuration

Date

BOSLAX

StayDuration

Date

BOSNYC

StayDuration

Date

PVGSZX

26 仓位

Date

365

x1000+

DISMISSED!

365 天 x 1000 航班 x 26 仓位 x 100 渠道 x N 类型 =

数十亿运价

Page 18: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark + MongoDB 方案

TEXT

B2T

IB2C

B2M

CallCenter

Mobile

B2C

Spark Master

Spark Master

..

.

Spark Submit

DRV

InvAPI

FareAPI

FareInvImpl

DRV

批处理计算

运价查询

Seat Inventory

Fare Cache

DRV

InvAPI

FareAPI

FareInvImpl

DRV

Page 19: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Submit Batch Job

END

Load Reference Data

Collect Results

Broadcast Variables

Parallel Compute

Master

START

Parallel Compute

Collect Results

Split Jobs

准备任务到MongoDB 读出计算任务 Spark 并发计算 结果存入MongoDB

Input job Input job

output output

vars vars

批处理计算流程

Vars:FlightscheduleBasepricePriceRules

Page 20: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

//initializationdependenciesincludingbaseprices,pricingrulesandsomereferencedata

Mapdependencies=MyDependencyManager.loadDependencies();//broadcastingdependenciesjavaSparkContext.broadcast(dependencies);//createjobrdd

cabinsRDD=MongoSpark.load(javaSparkContext).withPipeline(pipeline)//foreachcabin,date,airportpair,calculatethepricecabinsRDD.map(functioncalc_price);//collecttheresult,whichwillcausethedatatobestoredintoMongoDBcabinsRDD.collect()

cabinsRDD.saveToMongo()

Spark 任务入口程序

Page 21: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

0

500

1000

1500

2000

2500

3000

3500

Legacy Spark+Mongo

Throughput

0

50

100

150

200

250

300

350

Legacy Spark+Mongo

Latency

处理能力和响应时间比较

Page 22: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Spark + MongoDB 演示

Page 23: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

安装Spark

#curl-OLhttp://d3kbcqa49mib13.cloudfront.net/spark-1.6.0-bin-hadoop2.6.tgz#mkdir-p~/spark#tar-xvfspark-1.6.0-bin-hadoop2.6.tgz-C~/spark--strip-components=1

Page 24: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

测试连接器

#cd spark#./bin/spark-shell\--conf"spark.mongodb.input.uri=mongodb://127.0.0.1/flights.av"\--conf"spark.mongodb.output.uri=mongodb://127.0.0.1/flights.output"\--packagesorg.mongodb.spark:mongo-spark-connector_2.10:1.0.0importcom.mongodb.spark._importorg.bson.DocumentMongoSpark.load(sc).take(10).foreach(println)

Page 25: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

简单分组统计

MongoSpark.load(sc).map(doc=>(doc.getString("flight"),doc.getLong("seats"))).reduceByKey((x,y)=>(x+y))

.take(10).foreach(println)

数据: 365天,所有航班库存信息,500万文档 任务: 按航班统计一年内所有余票量

Page 26: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

简单分组统计加条件过滤

importorg.bson.DocumentMongoSpark.load(sc)

.withPipeline(Seq(Document.parse("{$match:{orig:'KMG'}}"))).map(doc=>(doc.getString("flight"),doc.getLong("seats"))).reduceByKey((x,y)=>(x+y)).take(10).foreach(println)

数据: 365天,所有航班库存信息,500万文档 任务: 按航班统计一年内所有库存,但是只处理昆明出发的航班

Page 27: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

结语

Page 28: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

性能优化事项

CPU Spark

Total data size / chunksize = chunks = RDD partitions = spark tasks

1-2 core

spark+mongo IO

chunksize (MB)

Page 29: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

+

MongoDB Spark

个性化,产品推荐 机器学习 流处理能力

Spark Hadoop MongoDB

需要支持数据随机更新操作 分析结果需用于交互型APP 对数据使用有灵活查询需求

Page 30: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Questions?

更快! 更敏捷!

Page 31: 完整的大数据解決方案 - mongoing.com › ... › uploads › 2016 › 08 › MDBSH2016 › TJ_M… · Spark + MongoDB 成功案例 客戶 案例 实现价值 乘客行为大数据分析,

Questions?