1、50:50,host:xyz,error:404,.body:ts:49:23,host:def,error:019,.body:22,host: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 Spark+MongoDB Spark工作方式 ParellelizeParelle
2、lizeParellelizeParellelizeTransformTransformTransformTransformActionActionActionActionmapfilterunionintersectResultResult Result Result EXECUTOR WORKER Spark Master Driver EXECUTOR WORKER EXECUTOR WORKER EXECUTOR WORKER STORAGE PROCESSING Spark MongoDB 架构 任务调度 原始数据 计算结果 连接器 EXECUTOR WORKER Spark Mas
3、ter Driver EXECUTOR WORKER EXECUTOR WORKER EXECUTOR WORKER STORAGE PROCESSING Spark MongoDB HDFS混合架构 任务调度 原始数据 计算结果 连接器 Mongo Spark Connector 连接器 双向支持:读出与写入 条件下推 本地数据访问 https:/ Spark+MongoDB 成功案例 客戶 客戶 案例案例 实现价值实现价值 乘客行为大数据分析,客戶360度视图 改善的客户体验,降低客户流失 实时监控分析跨国银行所有客户交易行为 降低客户资金风险,提高合规性 运价计算集群及缓存,降低机票查询
4、响应时间 改善用户使用体验,提高直销率 东方航空的挑战 260,000?50%?130,000 每天需支持运价 查询数量,基于12000:1查定比 16 亿 思路:空间换时间 目前运价实现为实时计算,可以支持每天1000多万QPS 空间换时间 实时 运算?MongoDB?LAXNYCStayDurationDateLAXBOSStayDurationDateNYCLAXStayDurationDateBOSLAXStayDurationDateBOSNYCStayDurationDatePVGSZX26 仓位 Date365 x1000+DISMISSED!365 天 x 1000 航班 x
5、26 仓位 x 100 渠道 x N 类型=数十亿运价 Spark+MongoDB 方案 TEXT B2TIB2CB2MCallCenterMobileB2CSpark Master Spark Master.Spark Submit DRVInvAPIFareAPIFareInvImplDRV批处理计算 运价查询 Seat Inventory Fare Cache DRVInvAPIFareAPIFareInvImplDRVSubmit Batch Job END Load Reference Data Collect Results Broadcast Variables Parallel
6、 Compute Master START Parallel Compute Collect Results Split Jobs 准备任务到MongoDB 读出计算任务 Spark 并发计算 结果存入MongoDB Input job Input job output output vars vars 批处理计算流程 Vars:FlightscheduleBasepricePriceRules/initializationdependenciesincludingbaseprices,pricingrulesandsomereferencedataMapdependencies=MyDepe
7、ndencyManager.loadDependencies();/broadcastingdependenciesjavaSparkContext.broadcast(dependencies);/createjobrddcabinsRDD=MongoSpark.load(javaSparkContext).withPipeline(pipeline)/foreachcabin,date,airportpair,calculatethepricecabinsRDD.map(functioncalc_price);/collecttheresult,whichwillcausethedatat
8、obestoredintoMongoDBcabinsRDD.collect()cabinsRDD.saveToMongo()Spark 任务入口程序?0500100015002000250030003500Legacy Spark+Mongo Throughput0 50 100 150 200 250 300 350 Legacy Spark+Mongo Latency 处理能力和响应时间比较 Spark MongoDB 演示 安装Spark#curl-OLhttp:/ MongoSpark.load(sc).map(doc=(doc.getString(flight),doc.getLon
9、g(seats).reduceByKey(x,y)=(x+y).take(10).foreach(println)数据:365天,所有航班库存信息,500万文档 任务:按航班统计一年内所有余票量 简单分组统计加条件过滤 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)数据:按航班统计一年内所有库存,但是只处理昆明出发的航班 结语 性能优化事项?CPU?Spark Total data size/chunksize=chunks=RDD partitions=spark tasks?1-2?core?spark+mongo?IO?chunksize(MB)+?Spark 个性化,产品推荐 机器学习 流处理能力?Hadoop?MongoDB 需要支持数据随机更新操作 分析结果需用于交互型APP 对数据使用有灵活查询需求 Questions?更快!更敏捷!Questions?
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1