编者按
2015 年,整个 IT 技术领域发生了许多深刻而又复杂的变化,InfoQ 策划了“解读 2015”年终技术盘点系列文章,希望能够给读者清晰地梳理出技术领域在这一年的发展变化,回顾过去,继续前行。
本文是大数据解读篇,在这篇文章里我们将回顾 2015 展望 2016,看看过去的一年里广受关注的技术有哪些进展,了解下数据科学家这个职业的火热。 在关键技术进展部分我们在大数据生态圈众多技术中选取了 Hadoop、Spark、Elasticsearch 和 Apache Kylin 四个点,分别请了四位专家:Hulu 的董西成、明略数据的梁堰波、精硕科技的卢亿雷、eBay 的韩卿,来为大家解读 2015 里的进展。
回顾 2015 年的关键技术进展:
Hadoop 作为大数据平台中最基础与重要的系统,在 2015 年提高稳定性的同时,发布了多个重要功能与特性,这使得 Hadoop 朝着多类型存储介质和异构集群的方向迈进了一大步。
HDFS 之前是一个以磁盘单存储介质为主的分布式文件系统。但随着近几年新存储介质的兴起,支持多存储介质早就提上了日程。如今,HDFS 已经对多存储介质有了良好的支持,包括 Disk、Memory 和 SSD 等,对异构存储介质的支持,使得 HDFS 朝着异构混合存储方向发展。目前 HDFS 支持的存储介质如下:
ARCHIVE:高存储密度但耗电较少的存储介质,通常用来存储冷数据。
DISK:磁盘介质,这是 HDFS 最早支持的存储介质。
SSD:固态硬盘,是一种新型存储介质,目前被不少互联网公司使用。
RAM_DISK :数据被写入内存中,同时会往该存储介质中再(异步)写一份。
YARN 作为一个分布式数据操作系统,主要作用是资源管理和资源调度。在过去一年,YARN 新增了包括基于标签的调度、对长服务的支持、对 Docker 的支持等多项重大功能。
基于标签的调度,使得 YARN 能够更好地支持异构集群调度。它的基本思想是,通过打标签的方式为不同的节点赋予不同的属性,这样,一个大的 Hadoop 集群按照节点类型被分成了若干个逻辑上相互独立(可能交叉)的集群。这种集群跟物理上独立的集群很不一样,用户可以很容易地通过动态调整 label,实现不同类型节点数目的增减,这具有很好的灵活性。
对长服务的支持,使得 YARN 逐渐变为一个通用资源管理和调度系统。目前,YARN 既支持像类似 MapReduce,Spark 的短作业,也支持类似 Web Service,MySQL 这样的长服务。 支持长服务是非常难的一件事情,YARN 需要解决以下问题:服务注册、日志滚动、ResourceManager HA、NodeManager HA(NM 重启过程中,不影响 Container)和 ApplicationMaster 永不停止,重启后接管之前的 Container。截止 2.7.0 版本,以上问题都已经得到了比较完整的解决。
对 Docker 的支持,使得 YARN 能够为上层应用提供更好的打包、隔离和运行方式。YARN 通过引入一种新的 ContainerExecutor,即 DockerContainerExecutor,实现了对 Docker 的支持,但目前仍然是 alpha 版本,不建议在生产环境中使用。
在 2015 年,HBase 迎来了一个里程碑——HBase 1.0 release,这也代表着 HBase 走向了稳定。 HBase 新增特性包括:更加清晰的接口定义,多 Region 副本以支持高可用读,Family 粒度的 Flush 以及 RPC 读写队列分离等。
2015 年的 Spark 发展很快,JIRA 数目和 PR 数目都突破了 10000,contributors 数目超过了 1000,可以说是目前最火的开源大数据项目。这一年 Spark 发布了多个版本,每个版本都有一些亮点:
Spark 目前支持四种语言的接口,除了上面提到的 R 语言的使用率以外,Python 的使用率也有很大提升,从 2014 年的 38% 提升到 2015 年的 58%;而 Scala 接口的使用率有所下降,从 84% 下降到 71%。同时 Spark 的部署环境也有所变化,51% 的部署在公有云上,48% 使用 standalone 方式部署,而在 YARN 上的只有 40% 了。可见 Spark 已经超越 Hadoop,形成了自己的生态系统。而在形成 Spark 生态系统中起到关键作用的一个 feature 就是外部数据源支持,Spark 可以接入各种数据源的数据,然后把数据导入 Spark 中进行计算、分析、挖掘和机器学习,然后可以把结果在写出到各种各样的数据源。到目前为止 Spark 已经支持非常多的外部数据源,像 Parquet/JSON/CSV/JDBC/ORC/HBase/Cassandra/Mongodb 等等。
上面这些调查数据来自美国,中国的情况有所区别,但是还是有一定的借鉴意义的。国内的 Spark 应用也越来越多:腾讯的 Spark 规模到了 8000+ 节点,日处理数据 1PB+。阿里巴巴运行着目前最长时间的 Spark Job:1PB+ 数据规模的 Spark Job 长达 1 周的时间。百度的硅谷研究院也在探索 Spark+Tachyon 的应用场景。
Spark MLlib 的 ALS 算法已经在很多互联网公司用于其推荐系统中。基本上主流的互联网公司都已经部署了 Spark 平台并运行了自己的业务。上面说的更多的互联网的应用,实际上 Spark 的应用场景有很多。在 target="_blank"> 解读2015 之Spark 篇:新生态系统的形成 》。
Elasticsearch:
Elasticsearch 是一个可伸缩的开源全文搜索和分析引擎。它可以快速地存储、搜索和分析海量数据。Elasticsearch 基于成熟的 Apache Lucene 构建,在设计时就是为大数据而生,能够轻松的进行大规模的横向扩展,以支撑 PB 级的结构化和非结构化海量数据的处理。Elasticsearch 生态圈发展状态良好,整合了众多外围辅助系统,如监控 Marvel,分析 Logstash,安全 Shield 等。近年来不断发展受到广泛应用,如 Github、StackOverflow、维基百科等,是数据库技术中倍受关注的一匹黑马。
Elasticsearch 在今年下半年发布了 2.0 版本,性能提升不少,主要改变为:
流式聚合,像管道一样,对聚合的结果进行再次聚合。原来 client 端需要做的计算工作,下推到 ES,简化 client 代码,更容易构建强大的查询。
取消 filters,所有的 filter 语句自动转换为 query 语句。在上下文语义是 query 时,进行相关性计算;上下文语 义是 filter 时,简单排除 b 不匹配的 doc,像现在的 filter 所做的一样。这个重构以为着所有的 query 执行会以最 有效的顺序自动优化。例如,子查询和地理查询会首先执行一个快速的模糊步骤,然后用一个稍慢的精确 步骤截断结果。在 filter 上下文中,cache 有意义时,经常使用的语句会被自动缓存。
存储的 field,例如 _source 字段,可以使用默认的 LZ4 算法快速压缩,或者使用 DEFLATE 算法减少 index size。对于日志类的应用尤其有用,旧的索引库在优化前可以切换到 best_compression。
Elasticsearch 运行于 Java Security Manager 之下,在安全性上标志着一个巨大的飞跃。Elasticsearch 难于探测,黑客在系统上 的影响也被严格限制。在索引方面也有加强: indexing 请求 ack 前,doc 会被 fsync,默认写持久化 所有的文件都计算 checksum,提前检测文件损坏 所有的文件 rename 操作都是原子的(atomic),避免部分写文件 对于系统管理员来讲,一个需求较多的变化是,可以避免一个未配置的 node 意外加入 Elasticsearch 集群网络:默认绑 定 localhost only, multicast 也被移除,鼓励使用 unicast。
除上所述,Elasticsearch 和 Lucene 还有很多小的变化,使其更加稳定可靠,易于配置,例如:
默认 doc value,带来更少的 heap usage,filter caching 更多使用 bitsets type mappings 大清理,更安全可靠,无二义性 cluster stat 使用 diff 进行快速变化传播,带来更稳定的大规模集群
官方支持的 core plugins 同时发布,和 Elasticsearch 核心使用相同的版本号。
Marvel 免费。
Apache Kylin:
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc. 开发并贡献至开源社区。最初于 2014 年 10 月 1 日开源,并于同年 11 月加入 Aapche 孵化器项目,并在一年后的 2015 年 11 月顺利毕业成为 Apache 顶级项目,是 eBay 全球贡献至 Apache 软件基金会(ASF)的第一个项目,也是全部由在中国的华人团队整体贡献至 Apache 的第一个项目。
在 eBay,已经上线两个生产环境平台,有着诸多的应用,包括用户行为分析、点击分析、商户分析、交易分析等应用,最新的 Streaming 分析项目也已经上线。目前在 eBay 平台上最大的单个 cube 包含了超过 1000 亿的数据,90% 查询响应时间小于 1.5 秒,95% 的查询响应时间小于 5 秒。同时 Apache Kylin 在 eBay 外部也有很多的用户,包括京东、美团、百度地图、网易、唯品会、Expedia、Expotional 等很多国内外公司也已经在实际环境中使用起来,把 Apache Kylin 作为他们大数据分析的基础之一。
过去的一年多是 Apache Kylin 发展的重要的一年:
同时,过去一年也是社区发展的重要一年,在过去一年内发展了来自 eBay,美团,京东,明略数据,网易等众多 committer,社区每天的讨论也是非常热闹。社区提交了很多新特性和 Bug 修复,包括来自美团的不同 HBase 写入,来自京东的明细数据查询,来自网易的多 Hive 源等多个重大特性为 Apache Kylin 带来了巨大的增强。
社区合作
在开源后的一年时间内,Apache Kylin 也和其他社区建立了良好的合作关系,Apache Calcite 作为 Kylin 的 SQL 引擎被深入的整合进来,我们也向 Calcite 提交了很多改进和修复,Calcite 的作者,Julian Hyde 也是 Kylin 的 mentor。HBase 是 Kylin 的存储层,在实际运维中,我们碰到过无数问题,从可靠性到性能到其他各个方面,Kylin 社区和 HBase 社区积极合作解决了绝大部分关键问题。另外,现在越来越多的用户考虑使用 Apache Zeppelin 作为前端查询和展现的工具,为此我们开发了 Kylin Interperter 并贡献给了 Zeppelin,目前可以直接从最新版的 Zeppelin 代码库中看到这块。同样,我们也和其他各个社区积极合作,包括 Spark,Kafka 等,为构建和谐的社区氛围和形成良好合作打下了坚实的基础。
技术发展
技术上,这一年来 Apache Kylin 主要在以下几个方面
在现在的版本中,Cube 的计算依赖 MapReduce,并且需要多个步骤的 MR Job 来完成计算,且 MR Job 的多少和维度相关,越多的维度会带来更多的 MR job。而每一次 MR job 的启停都需要等待集群调度,并且 MR job 之间的数据需要多次在 HDFS 落地和传输,从而导致消耗了大量的集群资源。为此我们引入了一种新的算法:Fast Cubing。一个 MapReduce 即可完成 Cub 的计算,测试结果表明整个 Cubing 的时间可以降低 30~50% 左右,网络传输可以下降 5 倍,这在超大规模数据集的计算上带来了客观的性能改进。
Kylin 作为一个预计算系统,不可避免的有着数据刷新延迟的限制,这在大部分用户案例中并不是问题,但随着业务和技术的发展,Streaming 甚至 Realtime 的需求越来越高。2015 年 Kylin 的主要发展都在 Streaming OLAP 上,为了支持低延迟的数据刷新,从整体的架构和设计上都做了相当大的重新设计,目前已经可以支持从 Kafka 读取数据并进行聚合计算的能力,同时提供 SQL 接口为前端客户端提供标准的访问接口,数据延迟已经可以做到分钟级别。
Spark 作为 MapReduce 的一种替代方案一直在社区中被问及 Kylin 是否可以支持直接使用 Spark 来作为计算。为此我们在 2015 年下半年实现了同样算法的 Spark Cubing 引擎,目前还在测试中。
为了更广泛的可扩展性,并支持如上各种新特性,Kylin 在 2.x 的代码中引入了可插拔架构和设计,从而解决了对特定技术的依赖问题。在新的设计中,数据源可以从 Hive,SparkSQL 等各种 SQL on Hadoop 技术读取,并支持 Kafka;在计算引擎方面,除了 MapReduce 方面的 Fast Cubing 外,实现了 Spark Cubing,Streaming Cubing 等多种计算框架,并为将来其他计算框架留下了扩展接口;在存储上,HBase 目前依然是唯一的存储层,但在上层设计中已经很好的进行了抽象,很容易可以扩展到其他 Key-Value 系统。
大数据与机器学习
机器学习是数据分析不可缺少的一部分。机器学习被赞誉为大数据分析和商务智能发展的未来,成功的机器学习项目依赖于很多因素,包括选择正确的主题,运行环境,合理的机器学习模型,最重要的是现有的数据,大数据为机器学习提供了很好的用武之地。
机器学习正很快从一个被很少人关注的技术主题转变为被很多人使用的管理工具。优秀的算法,大数据和高性能的计算资源的条件的满足使得机器学习快速发展,机器学习在今年第一次进入 Gartner 技术成熟曲线的报告中,并且进入大数据一样的应用期;而机器学习也是报告中第一个出现的技术。2015 年是机器学习丰收年,发生了很多令人瞩目的大事。
各大巨头开源:
大公司不仅是用开源社区来增强自己的机器学习工具,而且也会以收购来提升自身的机器学习实力。如 IBM 于今年 3 月收购了 AIchemyAPI,AIchemyAPI 能够利用深度学习人工智能,搜集企业、网站发行的图片和文字等来进行文本识别和数据分析。
此外,2015 年不仅仅是关于大公司的,利用机器学习的各种创业公司也占了同等地位。比如 EverString 完成 B 轮融资,该公司利用企业内部销售数据,和不断主动挖掘分析全球新闻数据,社交媒体等外部数据,通过机器学习自动建立量化客户模型,为企业预测潜在客户。
数据科学家的崛起
大数据需要数据分析,数据分析需要人才。数据科学是早就存在的词汇,而数据科学家却是近年来突然出现的新词。在 Google、Amazon、Quora、Facebook 等大公司的背后,都有一批数据科学专业人才,将大量数据变为可开发有价值的金矿。在大数据时代,数据科学家等分析人才的需求在激增。
据相关报告,国内大数据人才缺口目前已达百万,一名高级数据挖掘工程师月薪高达 30K-50K。招聘网站上的每天都会产生大量的大数据相关职位需求。据拉勾网提供的统计来看,从 2014 年到 2015 年,IT 行业关于大数据的岗位需求增长了 2.4 倍。人才培养迫在眉睫。复旦大学于今年成立了全国首个大数据学院。阿里云于年底宣布新增 30 所合作高校,开设云计算大数据专业, 计划用 3 年时间培养 5 万名数据科学家。各知名大学也将数据科学设为硕士课程。
无论是国内还是国外,数据科学都是目前炙手可热的研究领域,数据科学家、数据分析师都是非常火爆的职位,几乎所有的产业都需要数据科学家来从大量的数据中挖掘有价值的信息。大数据分析领域的专属首席级别头衔也愈发多见。美国政府今年任命了 DJ Patil 作为政府的首席数据科学家(Chief>展望 2016:
专家介绍:
董西成 就职于 Hulu,专注于分布式计算和资源管理系统等相关技术。《Hadoop 技术内幕:深入解析 MapReduce 架构设计与实现原理》和《Hadoop 技术内幕:深入解 析 YARN 架构设计与实现原理》作者,dongxicheng.org 博主。
梁堰波 明略数据技术合伙人,开源爱好者,Apache Spark 项目核心贡献者。北京航空航天大学计算机硕士,曾就职于 Yahoo!、美团网、法国电信从事机器学习和推荐系统相关的工作,在大数据、机器学习和分布式系统领域具备丰富的项目经验。
卢亿雷 精硕科技 (AdMaster) 技术副总裁兼总架构师,大数据资深专家,CCF(中国计算学会)大数据专委委员,北航特聘教授。主要负责数据的采集、清洗、存储、挖掘等整个数据流过程,确保提供高可靠、高可用、高扩展、高性能系统服务,提供 Hadoop/HBase/Storm/Spark/ElasticSearch 等离线、流式及实时分布式计算服务。对分布式存储和分布式计算、超大集群、大数据分析等有深刻理解及实践经验。有超过 10 年云计算、云存储、大数据经验。曾在联想、百度、Carbonite 工作,并拥有多篇大数据相关的专利和论文。
韩卿 (Luke Han) eBay 全球分析基础架构部 (ADI) 大数据平台产品负责人,Apache Kylin 副总裁,联合创始人,管理和驱动着 Apache Kylin 的愿景,路线图,特性及计划等,在全球各地不同部门中发展客户,开拓内外部合作伙伴及管理开源社区等,建立与大数据厂商,集成商及最终用户的联系已构建健壮的 Apache Kylin 生态系统。在大数据,数据仓库,商务智能等方面拥有超过十年的工作经验。