PCon全球产品创新大会9折购票中,立减¥480!查看上线日程 了解详情
写点什么

网易的 Spark 技术实践

2014 年 4 月 11 日

网易的实时计算需求

对于大多数的大数据而言,实时性是其所应具备的重要属性,信息的到达和获取应满足实时性的要求,而信息的价值需在其到达那刻展现才能利益最大化,例如电商网站,网站推荐系统期望能实时根据顾客的点击行为分析其购买意愿,做到精准营销。

实时计算指针对只读(Read Only)数据进行即时数据的获取和计算,也可以成为在线计算,在线计算的实时级别分为三类:Real-Time(msec/sec 级)、Near Real-Time(min/hours) 以及 Batch(days)。 在批处理方面,MapReduce(MR) 已经证明其为最有效的工具,随着 MR 的开源实现 Hadoop 为代表的大数据分析技术的普及,其在大处理方面的能力已经得到认可,但是它更适用于对集群上大数据的批处理,并不适用于实时处理大规模流数据。为了满足实时性的要求,基于数据仓库所构建的流计算和实时性计算框架也不断涌现,相关围绕 MR 的实时性优化技术也蓬勃发展,比较代表性的系统 Google Dremel、Twitter Storm 以及 Yahoo S4 等。

大数据的应用类型主要分为:批处理(Batch Processing)和流处理(Stream Processing)两方面。批处理是先存储后处理(Store-Then-Process), 流处理是直接处理(Straight-Through-Processing), 为提高商业智能的反映时间,目前广泛所采取的大数据处理框架, 例如 MR 和 Dryad 所面向的主要是大规模数据分析,以批处理计算为主,其实时性需求得不到满足。常用的应用有在线推荐、网页点击分析、传感网络、交通分析以及金融中的高频交易,对实时分析处理(Real Time Analytic Processing, RTAP)的需求越来显著,网易公司作为国内最大的门户网站之一,实时性也是公司目前互联网产品所应具备的重要属性。

网易大数据 Spark 技术应用

Spark 技术代表未来数据处理的新方向,Spark 是 UC Berkeley AMP lab 开源的类 Hadoop MapReduce 的通用并行计算框架,Spark 基于 MapReduce 实现分布式计算,拥有 Hadoop MapReduce 具有的优点。不同于 MapReduce 的是,Job 中间输出和结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

在网易大数据平台中,数据存储在 HDFS 之后,提供 Hive 的数据仓库计算和查询,要提高数据处理的性能并达到实时级别,网易公司采用的是 Impala 和 Shark 结合的混合实时技术。Cloudera Impala 是基于 Hadoop 的实时检索引擎开源项目,其效率比 Hive 提高 3-90 倍,其本质是 Google Dremel 的模仿,但在 SQL 功能上青出于蓝胜于蓝。Shark 是基于 Spark 的 SQL 实现,Shark 可以比 Hive 快 40 倍(其论文所描述), 如果执行机器学习程序,可以快 25 倍,并完全和 Hive 兼容。

图 1 和图 2 分别测试的计算能力和实时查询性能经过初步测试,在网易的实时计算平台,在大数据实时查询系统中,Impala 在数据处理方面的速度可以相比 HIVE 达到 3 倍到 30 倍的加速比,Shark 可以相比 HIVE 达到 1.5 到 15 倍的加速比,相比较 Impala 和 Shark 引擎,通常 Impala 会比 Shark 快一倍,这里可能会引出思考,既然 Impala 实时性如此好,为何还需要 Shark 呢?

在设计大数据平台的时候,我们发现 Impala 性能不错,但是其对旧 Hive 的数据不兼容,因为目前的大数据应用中很多都是 Hive 的组织方式,而 Shark 可以完全兼容旧的数据,因此在目前的数据结构中必须采用混合的数据处理模式。Hive 和 Impala 会协同存在一段时间, Hive 主要为 Predefined Queries,并主要处理批处理相关作业,而 Impala 则处理交互的查询(AD-HOC Queries),使得大数据系统既支持 OLTP,也支持 OLAP, 以达到实时分析处理(Real Time Analytic Processing, RTAP)的水平。

图 1 网易大数据平台性能测试 (Count/Sum/Avg 操作)

图 2 网易大数据平台性能测试 (Join/Ad-hoc 查询操作)

总结

如果要评价 2012 到 2013 年度 IT 业界热词,非“大数据”一词莫属。ROI(Return On Investment)投资回报率已经演化为 Return On Information, 信息的回报率成为互联网公司的一个重要指标,如果所掌握的海量数据都是一堆“垃圾”,没有金矿去挖掘,那大数据也无从谈起,而提高 ROI 的一个重要属性就是实时性,提高数据的反应时间需要技术做支撑和保障,网易作为中国顶尖的互联网公司之一,在大数据方面也是最早的先行者,特别实时计算技术方面,公司很早就开始采用最新的技术来提供服务,例如 Impala 和 Shark 等,不难发现,网易的大数据系统可以灵活的选择计算实时引擎,总体上系统在实时处理方面的能力可以提升 2 到 15 倍,这对于提升公司的生产效率有显著成效,在后续的工作中期望可以进一步提升实时级别,目前只能做到秒级,能否达到毫秒级甚至微秒级别是将来的一个研发方向, 总之对于海量数据计算、实时性方面有强烈需求的公司应用落地 Spark 是很好的选择。

参考资料

[1] Storm Distributed and fault-tolerant real time computation

[2] Leonardo Neumeyer, Bruce Robbins, Anish Nair, Anand Kesari. S4: Distributed Stream Computing Platform. 2010 IEEE International Conference on Data Mining Workshops (ICDMW).

[3] Cloudera Impala https://github.com/cloudera/impala

Reynold S. Xin , Josh Rosen , et al. Shark: SQL and rich analytics at scale. SIGMOD Conference 2013 .


感谢包研对本文的策划。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 4 月 11 日 21:1019104

评论

发布
暂无评论
发现更多内容

LeetCode题解:77. 组合,递归回溯,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架构师训练营 - 第 7 周课后作业(1 期)

Pudding

天啦撸!打印日志竟然只晓得 Log4j?

沉默王二

Java 日志 log4j

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——2.基于双缓存更新功能模块

梁龙先森

Java chrome 前端 浏览器 技术方案

如何实现后台管理系统的权限路由和权限菜单

徐小夕

Java 前端 编辑器 H5 数据可视化

浅谈API网关(API Gateway)如何承载API经济生态链

华为云开发者社区

API 网关

谈谈敏捷开发概念和迭代开发方案

Learun

敏捷开发

【涂鸦物联网足迹】涂鸦云平台接口说明

IoT云工坊

人工智能 物联网 API sdk 云平台

【涂鸦物联网足迹】API及SDK介绍

IoT云工坊

软件开发 物联网 API sdk 云平台

重磅解读:K8s Cluster Autoscaler模块及对应华为云插件Deep Dive

华为云开发者社区

容器 k8s 服务

医疗界“最强大脑”落户杭州!阿里巴巴联合浙大一院共同打造

阿里云情报局

互联网

揭秘在召唤师峡谷中移动路径选择逻辑?

华为云开发者社区

算法 地图 最短路径

简析低代码开发与传统开发的区别与优势

Marilyn

敏捷开发 低代码

DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座

华章IT

数据库 postgresql

每周一看:16份文档资料,程序员软硬实力全概览,总有一个适合你

小Q

Java 学习 程序员 架构 面试

Apache DolphinScheduler 是如何走进Apache的

海豚调度

大数据任务调度 数据湖调度 DolphinScheduler Apache DolphinScheduler

架构训练营 - 第7周课后作业 - 学习总结

Pudding

【运维思考】如何做好云上运维服务?

嘉为蓝鲸

云计算 运维 数字化转型 数据中心 云服务

《Python:Python编程简介:计算机编程和机器学习入门指南》

计算机与AI

Python

架构师训练营第一期 - week8

习习

百亿级数据分表后怎么分页查询?

艾小仙

Java MySQL 数据库 编程语言 分库分表

会展云技术解读 | 面对突发事故,APP如何做好崩溃分析与性能监控?

京东科技开发者

云计算 云服务

mongodb 源码实现系列 - 网络传输层模块实现三

杨亚洲(专注mongodb及高性能中间件)

MySQL mongodb 分布式 高性能 分布式数据库mongodb

技术分享:WebAssembly能否重新定义前端开发模式?

Geek_Willie

webassembly

终于啃完了这份Java核心原理+框架“面试圣经”,成功五面上岸美团

Java架构追梦

Java 架构 面试 微服务 框架开发

移动安全加固助力 App 实现全面、有效的安全防护

蚂蚁集团移动开发平台 mPaaS

安全攻防 App风险 mPaaS

帮助企业摆脱困境,名企归乡工程师:能成功全靠有它!

Philips

敏捷开发

架构师训练营第 1 期第 7 周总结

du tiezheng

极客大学架构师训练营

嗯,查询滑动窗口最大值的这4种方法不错...

王磊

Java 数据结构和算法

阿里云官方推出操作系统“等保合规”镜像 -- Alibaba Cloud Linux 等保2.0三级版

阿里云基础软件团队

内核

【云小课】版本管理发展史之Git+——代码托管

华为云开发者社区

git 代码管理 托管

网易的Spark技术实践-InfoQ