2015年,整个IT技术领域发生了许多深刻而又复杂的变化,InfoQ策划了“解读2015”年终技术盘点系列文章,希望能够给读者清晰地梳理出技术领域在这一年的发展变化,回顾过去,继续前行。 本文是大数据解读篇,在这篇文章里我们将回顾2015展望2016,看看过去的一年里广受关注的技术有哪些进展,了解下数据科学家这个职业的火热。 在关键技术进展部分我们在大数据生态圈众多技术中选取了Hadoop、Spark、Elasticsearch和Apache Kylin四个点,分别请了四位专家:Hulu的董西成、明略数据的梁堰波、精硕科技的卢亿雷、eBay的韩卿,来为大家解读2015里的进展。
回顾2015
1,关键技术进展:
Hadoop:
Hadoop作为大数据平台中最基础与重要的系统,在2015年提高稳定性的同时,发布了多个重要功能与特性,这使得Hadoop朝着多类型存储介质和异构集群的方向迈进了一大步。
- HDFS
HDFS 之前是一个以磁盘单存储介质为主的分布式文件系统。但随着近几年新存储介质的兴起,支持多存储介质早就提上了日程。如今,HDFS 已经对多存储介质有了良好的支持,包括 Disk、Memory 和 SSD 等,对异构存储介质的支持,使得 HDFS 朝着异构混合存储方向发展。目前HDFS支持的存储介质如下:
ARCHIVE:高存储密度但耗电较少的存储介质,通常用来存储冷数据。
DISK:磁盘介质,这是HDFS最早支持的存储介质。
SSD:固态硬盘,是一种新型存储介质,目前被不少互联网公司使用。
RAM_DISK :数据被写入内存中,同时会往该存储介质中再(异步)写一份。
- YARN
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版本,不建议在生产环境中使用。
- HBase
在 2015 年,HBase 迎来了一个里程碑——HBase 1.0 release,这也代表着 HBase 走向了稳定。 HBase新增特性包括:更加清晰的接口定义,多 Region 副本以支持高可用读,Family 粒度的 Flush以及RPC 读写队列分离等。
spark:
2015年的Spark发展很快,JIRA数目和PR数目都突破了10000,contributors数目超过了1000,可以说是目前最火的开源大数据项目。这一年Spark发布了多个版本,每个版本都有一些亮点:
- 2014年12月,Spark 1.2发布引入ML pipeline作为机器学习的接口。
- 2015年3月,Spark 1.3发布引入了DataFrame作为Spark的一个核心组件。
- 2015年6月,Spark 1.4发布引入R语言作为Spark的接口。R语言接口在问世一个多月之后的调查中就有18%的用户使用。
- 2015年9月,Spark 1.5发布。Tungsten项目第一阶段的产出合并入DataFrame的执行后端,DataFrame的执行效率得到大幅提升。
- 2016年1月,Spark 1.6发布引入Dataset接口。
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 是一个可伸缩的开源全文搜索和分析引擎。它可以快速地存储、搜索和分析海量数据。Elasticsearch 基于成熟的 Apache Lucene 构建,在设计时就是为大数据而生,能够轻松的进行大规模的横向扩展,以支撑PB级的结构化和非结构化海量数据的处理。Elasticsearch生态圈发展状态良好,整合了众多外围辅助系统,如监控Marvel,分析Logstash,安全Shield等。近年来不断发展受到广泛应用,如Github、StackOverflow、维基百科等,是数据库技术中倍受关注的一匹黑马。
Elasticsearch在今年下半年发布了2.0版本,性能提升不少,主要改变为:
- Pipeline Aggregation
流式聚合,像管道一样,对聚合的结果进行再次聚合。原来client端需要做的计算工作,下推到ES,简化 client代码,更容易构建强大的查询。
- Query/Filter 合并
取消filters,所有的filter语句自动转换为query语句。在上下文语义是query时,进行相关性计算;上下文语 义是filter时,简单排除b不匹配的doc,像现在的filter所做的一样。这个重构以为着所有的query执行会以最 有效的顺序自动优化。例如,子查询和地理查询会首先执行一个快速的模糊步骤,然后用一个稍慢的精确 步骤截断结果。在filter上下文中,cache有意义时,经常使用的语句会被自动缓存。
- 可配置的store compression
存储的field,例如_source字段,可以使用默认的LZ4算法快速压缩,或者使用DEFLATE算法减少index size。对于日志类的应用尤其有用,旧的索引库在优化前可以切换到best_compression。
- Hardening
Elasticsearch运行于 Java Security Manager之下,在安全性上标志着一个巨大的飞跃。Elasticsearch难于探测,黑客在系统上 的影响也被严格限制。在索引方面也有加强: indexing请求ack前,doc会被fsync,默认写持久化 所有的文件都计算checksum,提前检测文件损坏 所有的文件rename操作都是原子的(atomic),避免部分写文件 对于系统管理员来讲,一个需求较多的变化是,可以避免一个未配置的node意外加入Elasticsearch集群网络:默认绑 定localhost only, multicast也被移除,鼓励使用unicast。
- Performance and Resilience
除上所述,Elasticsearch和Lucene还有很多小的变化,使其更加稳定可靠,易于配置,例如:
默认doc value,带来更少的heap usage,filter caching 更多使用 bitsets type mappings 大清理,更安全可靠,无二义性 cluster stat 使用diff进行快速变化传播,带来更稳定的大规模集群
- Core plugins
官方支持的core plugins同时发布,和Elasticsearch核心使用相同的版本号。
- Marvel 2.0.0 free to use in production
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发展的重要的一年:
- 2014年10月1日,Kylin 代码在github.com上正式开源
- 2014年11月25日,正式加入Apache孵化器并正式启用Apache Kylin作为项目名称
- 2015年6月10日,Apache Kylin v0.7.1-incubating发布,这是加入Apache后的第一个版本,依据Apache的规范作了很多修改,特别是依赖包,license等方面,同时简化了安装,设置等,并同时提供二进制安装包
- 2015年9月6日,Apache Kylin v1.0-incubating正式发布,增强了SQL处理,提升了HBase coprocessor 的性能,同时提供了Zeppelin Interpreter等
- 2015年9月16日,Apache Kylin与Spark,Kafka,Storm,H2O,Flink,Elasticsearch,Mesos等一起荣获InfoWorld Bossie Awards 2015:最佳开源大数据工具奖,这是业界对Kylin的认可
- 2015年11月18日,Apache Kylin正式毕业成为Apache顶级项目
- 2015年12月15日,Apache Kylin v1.2正式发布,这是升级为顶级项目后的第一个版本,提供了对Excel,PowerBI,Tableau 9等的支持,对高基维度增强了支持,修复了多个关键Bug等
- 2016年,Apache Kylin将迎来重要的2.x版本,该版本对底层架构和设计作了重大重构,提供可插拔的设计及Lambda架构,同时提供对历史数据查询,Streaming及Realtime查询等,同时在性能,任务管理,UI等各个方面提供增强。
同时,过去一年也是社区发展的重要一年,在过去一年内发展了来自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主要在以下几个方面
- Fast Cubing
在现在的版本中,Cube的计算依赖MapReduce,并且需要多个步骤的MR Job来完成计算,且MR Job的多少和维度相关,越多的维度会带来更多的MR job。而每一次MR job的启停都需要等待集群调度,并且MR job之间的数据需要多次在HDFS落地和传输,从而导致消耗了大量的集群资源。为此我们引入了一种新的算法:Fast Cubing。一个MapReduce即可完成Cub的计算,测试结果表明整个Cubing的时间可以降低30~50%左右,网络传输可以下降5倍,这在超大规模数据集的计算上带来了客观的性能改进。
- Streaming OLAP
Kylin作为一个预计算系统,不可避免的有着数据刷新延迟的限制,这在大部分用户案例中并不是问题,但随着业务和技术的发展,Streaming甚至Realtime的需求越来越高。2015年Kylin的主要发展都在Streaming OLAP上,为了支持低延迟的数据刷新,从整体的架构和设计上都做了相当大的重新设计,目前已经可以支持从Kafka读取数据并进行聚合计算的能力,同时提供SQL接口为前端客户端提供标准的访问接口,数据延迟已经可以做到分钟级别。
- Spark Cubing
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系统。
2,大数据与机器学习
机器学习是数据分析不可缺少的一部分。机器学习被赞誉为大数据分析和商务智能发展的未来,成功的机器学习项目依赖于很多因素,包括选择正确的主题,运行环境,合理的机器学习模型,最重要的是现有的数据,大数据为机器学习提供了很好的用武之地。
机器学习正很快从一个被很少人关注的技术主题转变为被很多人使用的管理工具。优秀的算法,大数据和高性能的计算资源的条件的满足使得机器学习快速发展,机器学习在今年第一次进入Gartner技术成熟曲线的报告中,已直接越过了期望鹏展期的高峰,进入大数据一样的应用期;而机器学习也是报告中第一个出现的技术。2015年是机器学习丰收年,发生了很多令人瞩目的大事。
各大巨头开源:
- 2015年1月,Facebook开源前沿深度学习工具“Torch”。
- 2015年4月,亚马逊启动其机器学习平台Amazon Machine Learning,这是一项全面的托管服务,让开发者能够轻松使用历史数据开发并部署预测模型。
- 2015年11月,谷歌开源其机器学习平台TensorFlow。
- 同一月,IBM开源SystemML并成为Apache官方孵化项目。
- 同时,微软亚洲研究院将分布式机器学习工具DMTK通过Github开源。DMTK由一个服务于分布式机器学习的框架和一组分布式机器学习算法组成,可将机器学习算法应用到大数据中。
- 2015年12月,Facebook开源针对神经网络研究的服务器“Big Sur”,配有高性能图形处理单元(GPUs),转为深度学习方向设计的芯片。
大公司不仅是用开源社区来增强自己的机器学习工具,而且也会以收购来提升自身的机器学习实力。如IBM于今年3月收购了AIchemyAPI,AIchemyAPI能够利用深度学习人工智能,搜集企业、网站发型的图片和文字等来进行文本识别和数据分析。
此外,2015年不仅仅是关于大公司的,利用机器学习的各种创业公司也占了同等地位。比如EverString完成B轮融资,该公司利用企业内部销售数据,和不断主动挖掘分析全球新闻数据,社交媒体等外部数据,通过机器学习自动建立量化客户模型,为企业预测潜在客户。
3,数据科学家的崛起
大数据需要数据分析,数据分析需要人才。数据科学是早就存在的词汇,而数据科学家却是近年来突然出现的新词。在Google、Amazon、Quora、Facebook等大公司的背后,都有一批数据科学专业人才,将大量数据变为可开发有价值的金矿。在大数据时代,数据科学家等分析人才的需求在激增。
据相关报告,国内大数据人才缺口目前已达百万,一名高级数据挖掘工程师月薪高达30K-50K。招聘网站上的每天都会产生大量的大数据相关职位需求。据拉勾网提供的统计来看,从2014年到2015年,IT行业关于大数据的岗位需求增长了2.4倍。人才培养迫在眉睫。复旦大学于今年成立了全国首个大数据学院。阿里云于年底宣布新增30所合作高校,开设云计算大数据专业,计划用3年时间培养5万名数据科学家。各知名大学也将数据科学设为硕士课程。
无论是国内还是国外,数据科学都是目前炙手可热的研究领域,数据科学家、数据分析师都是非常火爆的职位,几乎所有的产业都需要数据科学家来从大量的数据中挖掘有价值的信息。大数据分析领域的专属首席级别头衔也愈发多见。美国政府今年任命了DJ Patil作为政府的首席数据科学家(Chief Data Scientist),这也是美国政府内部首次设立“数据科学家”这个职位。
展望2016:
- Hadoop。对于 HDFS,会朝着异构存储介质方向发展,尤其是对新兴存储介质的支持;对于 YARN,会朝着通用资源管理和调度方向发展,而不仅仅限于大数据处理领域,在加强对 MapReduce、Spark等短类型应用支持的同时,加强对类似Web Service 等长服务的支持;
- 对于Hbase,将会花费更多精力在稳定性和性能方面,正尝试的技术方向包括:对于 HDFS 多存储介质的使用;减少对 ZooKeeper 的使用以及通过使用堆外内存缓解Java GC的影响。
- Spark 2.0预计明年三四月份发布,将会确立以DataFrame和Dataset为核心的体系架构。同时在各方面的性能上会有很大的提升。
- Apache Kylin 2.0即将发布,随着各项改进的不断完善,该版本将在2016年在OLAP on Hadoop上更进一步!
- ElasticSearch开源搜索平台,机器学习,Data graphics,数据可视化在2016年会更加火热。
- 大数据会越来越大,IOT、社交媒体依然是一个主要的推动因素。
- 大数据的安全和隐私会持续受到关注。
专家介绍:
董西成 就职于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生态系统。在大数据,数据仓库,商务智能等方面拥有超过十年的工作经验。