2015年,整个IT技术领域发生了许多深刻而又复杂的变化,InfoQ策划了“解读2015”年终技术盘点系列文章,希望能够给读者清晰地梳理出技术领域在这一年的发展变化,回顾过去,继续前行。
本文是大数据解读篇,在这篇文章里我们将回顾2015展望2016,看看过去的一年里广受关注的技术有哪些进展,了解下数据科学家这个职业的火热。 在关键技术进展部分我们在大数据生态圈众多技术中选取了Hadoop、Spark、Elasticsearch和Apache Kylin四个点,分别请了四位专家:Hulu的董西成、明略数据的梁堰波、 精硕科技 的卢亿雷、eBay的韩卿,来为大家解读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的应用场景有很多。在Databricks公司的调查中显示主要应用依次是:商务智能、数据仓库、推荐系统、日志处理、欺诈检测等。
除了互联网公司以外,传统IT企业也把Spark作为其产品的一个重要组成。IBM在今年6月的Spark summit期间宣布重点支持Spark这个开源项目,同时还开源了自己的机器学习系统SystemML并推进其与Spark的更好合作。美国大数据巨头Cloudera,Hortonworks和MapR都表示Spark是其大数据整体解决方案的核心产品。可以预见Spark是未来若干年最火的大数据项目。
在深度学习方面2015年可谓非常热闹,如Google开源其第二代机器学习系统TensorFlow,Facebook开源Torch和人工智能硬件服务器Big Sur等等。Spark社区也不甘落后,在1.5版本中发布了一个神经网络分类器MultiplayerPerceptronClassifier作为其深度学习的雏形。虽然这个模型还有很多地方需要优化,大家不妨尝试下,毕竟它是唯一一个基于通用计算引擎的分布式深度学习系统。
除了现在非常火的深度学习,在传统统计和机器学习领域,Spark这一年也有非常大的变化,包括GLM的全面支持,SparkR GLM的支持,A/B test,以及像WeightesLeastSquares这样的底层优化算法等。
具体内容可以看梁堰波在InfoQ上的年终回顾:《 解读2015之Spark篇:新生态系统的形成 》。
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是一个开源的分布式分析引擎,提供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 Data Scientist),这也是美国政府内部首次设立“数据科学家”这个职位。
董西成就职于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生态系统。在大数据,数据仓库,商务智能等方面拥有超过十年的工作经验。