查看原文
其他

Hadoop老矣,为什么腾讯还要花精力在其开源发布上?

AI前线小组 AI前线 2018-08-21

策划编辑 | Natalie
采访 & 撰稿 | Natalie
受访嘉宾 | 堵俊平
编辑 | Debra
AI 前线导读:前些日子,腾讯主导开源大数据平台 Apache Hadoop 2.8.4 新版本发布的新闻引起了笔者的注意。自 Hadoop 从雅虎诞生之日起,已经走过了 10 来个年头,这期间,尤其是近年来,由华人作为 Release Manager 主导新版本发布已经有过不少先例,不过背后的公司不外乎雅虎、微软、Hortonworks、Cloudera 等美国公司。而这次的新版本是首次由中国公司主导发布,这对于国内的开源社区当然是一个重要的鼓励,说明中国的开发者和开发组织完全有能力突破障碍,来胜任热门开源社区中的更有影响力的角色;另一方面,这也意味着腾讯长期以来支持和拥抱开源以及开源社区的举动有了回报,开始收获开源社区影响力了。

对于笔者来说,更加好奇的却是另外一个问题,在国内外纷纷唱衰 Hadoop 的论调中,为什么腾讯还要花费这么大精力去主导 Hadoop 的开源版本发布?

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

Hadoop 最早诞生于 2006 年,并在 2008 年成为 Apache 顶级项目。虽然在诞生之初,只有国内外几家巨头尝试使用 Hadoop 技术,但没过多久,Hadoop 就成为了互联网行业大数据计算的标准配置,Hadoop 也快速成为 Apache 软件基金会的金牌项目之一。不仅如此,它还孕育了包括 HBase、Hive、ZooKeeper 等一系列知名 Apache 顶级项目,而这些项目一开始都是以 Apache Hadoop 子项目的形式在社区运作并为开发者熟知的。

至今,Hadoop 已经走过了 12 个年头,这对于任何软件来说生命周期都不可谓不长。而从 2016 年开始,国内外就开始出现唱衰 Hadoop 的声音。虽然对于国内外很多企业来说,Hadoop 依然是大数据计算不可缺少的配置,但对于 Hadoop 未来的发展,很多人都并不看好,“谈不上会有好的发展”。Hadoop 背后最大的平台提供商 Hortonworks 也开始往以云计算为中心的世界靠拢。


去年 9 月,Gartner 将 Hadoop 发行版从数据管理的技术成熟度曲线中淘汰出局,原因是由于整个 Hadoop 堆栈的复杂性和可用性问题,许多组织已经开始重新考虑其在信息基础架构中的角色。而今年 KDnuggets 发布的数据科学和机器学习工具调查报告则显示 Hadoop 的使用率也下降了,这让“Hadoop 老矣”的说法又再度流传起来。


2018 年数据科学和机器学习工具调查报告显示 Hadoop 使用率下降 35%

在这个时候,为什么腾讯要花费大力气去主导 Hadoop 开源版本的发布?

负责主导本次开源版本发布的腾讯云专家研究员堵俊平告诉 AI 前线,真正“老矣”的是 Hadoop 商业发行版而非 Hadoop 技术本身, 不论在国内还是国外,Hadoop 技术都保持着大数据平台的核心和事实标准地位。需要变革的是 Hadoop 技术的使用和发行方式, 未来越来越多的用户从使用线下 Hadoop 发行版向云上的数据湖(对象存储 +Hadoop)迁移可能会成为一种趋势。

腾讯选用 Hadoop:兼顾平台稳定性和技术先进性

腾讯的大数据平台有不少为自身特殊场景优化甚至重新自研的产品和组件,但有相当大的一部分是基于开源 Hadoop 生态组件构建的。

目前腾讯的大数据平台用到了非常多的 Hadoop 生态组件。以腾讯云上开放的弹性 MapReduce 服务为例,腾讯提供了 Hadoop、HBase、Spark、Hive、Presto、Storm、Flink、Sqoop 等组件服务。不同组件也发挥了不同的用处:数据存储和计算资源调度由 Hadoop 来实现,数据的导入可以用 Sqoop,HBase 提供了 NoSQL 数据库服务,离线数据处理由 MapReduce、Spark、Hive 等完成,流式数据处理则由 Storm、Spark Streaming 以及 Flink 来提供等等。

堵俊平表示,对于 Hadoop 生态的各类组件的选型,腾讯的总体原则是兼顾平台稳定性和技术先进性。一方面,需要理解每个组件所适用的场景以及它们的能力边界,另一方面,从测试和运维实践来看,要了解每个组件的稳定程度和运维复杂度。以基于 Hadoop 的数仓组件为例,新版的 Hive 增加了 LLAP 组件来提升交互式查询的性能和速度,但从当前运行的实际效果来看并不稳定,所以腾讯暂缓把这个组件引入生产系统,Hive 更多服务于离线计算的场景,而交互式查询由更为稳定的 SparkSQL 和 Presto 来提供。

腾讯并非个例,在国内外很多企业的大数据平台中,Hadoop 生态的各类组件都占了相当大的比重。谁都离不开它,但可能应用太普遍,Hadoop 受到的关注反而变少了。作为 Hadoop 的 PMC,堵俊平表示,Hadoop 作为大数据平台的核心和事实标准地位,在国内外并没有太大的区别。不过在各个行业,Hadoop 应用的成熟度却不尽相同。举例来说,Hadoop 在互联网公司应用的最早也最为成熟;其次是金融行业,Hadoop 大数据平台落地的成功案例很多,也相对比较成熟。当前 Hadoop 大数据平台应用的热点是在政务和安防领域以及 IOT 工业互联网平台,这些新的热点带来新的需求也会促使 Hadoop 技术和生态继续向前进化。

Hadoop 技术未老,但使用和发行方式需要变革

对于 Gartner 将 Hadoop 从技术成熟度曲线中淘汰出局,堵俊平指出,Gartner 的报告是针对 Hadoop 商业发行版而非 Hadoop 技术本身。

报告中所提到的 Hadoop 发行版的问题:比如发行版的复杂度高以及包含很多非必要性组件,从用户的反馈来看,是真实存在的。很多商业发行版,例如 CDH 或者 HDP,都包含了洋洋洒洒十几种甚至几十种组件给用户使用,在提供灵活性的同时,也给用户带来了很多使用和运维上的烦恼。更严重的是,这个问题从近几年的观察来看,不但没有减轻且有愈演愈烈的趋势。所以,Hadoop 技术的使用和发行的方式需要变革,未来越来越多的用户从使用线下的 Hadoop 发行版向云上的数据湖(对象存储 +Hadoop)迁移可能会成为一种趋势。

堵俊平坦言,Hadoop 生态确实存在一些不足。Hadoop 的生态系统非常复杂,每个组件都是独立的模块,由单独的开源社区开发和发布,我们可以称之为松耦合。这种松耦合的开发方式,好处是灵活、适应面广、开发周期可控,缺点是组件之间配合的成熟度低、版本冲突严重、集成测试困难。这也给用户的使用带来了困难,因为一个场景中需要涉及到很多组件的配置工作。

虽然流计算对于大数据处理来说越来越重要,但不支持流计算却不会成为 Hadoop 的致命伤。虽然 Hadoop 自身不提供流计算服务,不过主要的流计算组件,如 Storm、Spark Streaming 以及 Flink 本身就属于 Hadoop 生态系统的一部分,因此并不构成太大的问题。

Hadoop 生态组件竞争激烈,Spark 优势明显,MapReduce 已进入维护模式

曾有开发者向 AI 前线表示,Hadoop 主要是被 MapReduce 拖累了,其实 HDFS 和 YARN 都还不错。堵俊平则认为 MapReduce 拖累 Hadoop 的说法并不准确,首先 MapReduce 还是有应用场景,只是越来越窄,它仍然适合某些超大规模数据处理的批量任务,且任务运行非常稳定;其次,Hadoop 社区对于 MapReduce 的定位就是进入维护模式, 并不追求任何新的功能或性能演进,这样可以让资源投入到更新的计算框架,比如 Spark、Tez,促进其成熟。

HDFS 和 YARN 目前还是大数据领域分布式存储和资源调度系统的事实标准,不过也面临一些挑战。对 HDFS 而言,在公有云领域,越来越多的大数据应用会选择跳过 HDFS 而直接使用云上的对象存储, 这样比较方便实现计算与存储分离,增加了资源弹性。YARN 也面临着来自 Kubernetes 的强大挑战,尤其是原生的 docker 支持,更好的隔离性以及上面生态的完整性。不过 K8S 在大数据领域还是追赶者,在资源调度器以及和对各计算框架支持上还有很大的进步空间。

Spark 在计算框架方面基本上占据了主导地位,MapReduce 主要是一些历史应用,而 Tez 更像是 Hive 的专属执行引擎。流处理方面,早期的流处理引擎 Storm 正在退役,而当前唱主角的则是 Spark Streaming 和 Flink,这两个流处理引擎各有千秋,前者强在生态,后者则在架构方面有优势。一个有意思的情况是,对于 Spark Streaming 和 Flink 的应用在国内外的情况很不一样,国内已经有大量的公司开始使用 Flink 构建自己的流处理平台,但美国市场 Spark Streaming 还是占绝对主流的地位。当然,还有一些新的流处理框架,例如 Kafka Streams 等等,发展得也不错。

在大数据 SQL 引擎方面,四大主流引擎 Hive、SparkSQL、Presto 以及 Impala 仍然各有所长。

Hive 最早由 Facebook 开源贡献也是早年应用最广泛的大数据 SQL 引擎,和 MapReduce 一样,Hive 在业界的标签就是慢而稳定。其无私地提供了很多公共组件为其他引擎所使用,堪称业界良心,比如元数据服务 Hive Metastore、查询优化器 Calcite、列式存储 ORC 等。近年来,Hive 发展很快,例如查询优化方面采用了 CBO,在执行引擎方面用 Tez 来替换 MapReduce,通过 LLAP 来 cache 查询结果做优化,以及 ORC 存储不断演进。不过相比较而言,这些新技术从市场应用来说还不算成熟稳定,Hive 仍然被大量用户定义为可靠的 ETL 工具而非即时查询产品。

SparkSQL 这两年发展迅猛,尤其在 Spark 进入 2.x 时代,发展更是突飞猛进。其优秀的 SQL 兼容性(唯一全部 pass TPC-DS 全部 99 个 query 的开源大数据 SQL),卓越的性能、庞大且活跃的社区、完善的生态(机器学习、图计算、流处理等)都让 SparkSQL 从这几个开源产品中脱颖而出,在国内外市场得到了非常广泛的应用。

Presto 这两年应用也非常广泛,这款内存型 MPP 引擎的特点就是处理小规模数据会非常快,数据量大的时候会比较吃力。Impala 的性能也非常优异,不过其发展路线相对封闭,社区生态进展比较缓慢,SQL 兼容性也比较差,用户群体相对较小。

Hadoop 生态必然会向云发展,IOT 值得长期关注

Hadoop 已经 12 岁了,未来 Hadoop 生态将会如何发展?堵俊平表示,未来 Hadoop 的生态会向云的方向发展,简化运维甚至免运维既是用户的需求也是云厂商的优势所在。越来越多的数据在云中产生、存储和消费,从而形成数据生命周期在云端的闭环——数据湖。所以云上的数据安全和隐私保护技术显得十分重要。

除此之外,Hadoop 在混合云上的部署和应用也会是一个重要的趋势,而这方面的技术和架构还不是非常成熟,需要持续创新和创造。在这样的背景下,传统 Hadoop 发行版厂商的话语权在技术和商业层面会相对减少,而云厂商的话语权则会增大。 另外一个趋势是 Hadoop 生态会不断向数据应用端生长,强调从数据处理到数据治理的转变,更方便的 ETL 工具、元数据管理与数据治理工具会逐渐走向成熟与完善。最后,Hadoop 生态也会从单纯的大数据平台演化到集数据与机器学习平台为一体, 未来可助力很多的 AI 应用场景。

堵俊平告诉 AI 前线,未来大数据领域比较重要的发展方向中,IOT 是一个值得长期关注的领域。在大数据发展历史上,这部分业务发展周期较短,很多技术都不是非常成熟,标准也没有完全统一。除此之外,云上的大数据产品还有技术变革的空间,例如:跨数据中心 / 云的解决方案、自动化关键数据业务迁移、数据隐私保护、自动机器学习等,未来一定会有更加创新的产品来打动和吸引用户上云。

腾讯云会聚焦云端大数据用户的核心痛点,制定相应的技术和产品路线。对于大数据平台的底层平台架构,腾讯云会更加强调 serverless,注重性能与开销的平衡,提高资源利用率会是一个长期的方向。而 Hadoop 生态会继续在其中扮演重要角色,因为市场更为认可开放和开源的产品以及解决方案。腾讯云也会继续贡献和回馈开源社区,和社区一起创造更好更新的技术来满足未来的需要。

结语

Hadoop 花了 12 年从一个新兴开源项目成长为大数据平台标准配置,实属不易。如今 Hadoop 生态内部面临着来自众多年轻开源组件的竞争压力,优胜劣汰也很正常,世上没有十全十美的开源平台,凭借已有的优势,Hadoop 生态的地位依然十分稳固,但未来是否还能焕发出新的活力,抑或在全面云化的进程中逐渐式微,仍是一个未知数。


今日荐文

点击下方图片即可阅读

刚刚,小米在港挂牌上市,市值3714亿港元



课程推荐

【限时优惠】极客时间《快速上手 Kotlin 开发》视频课程上新!

在 2017 年 Google I / O 大会上,Google 宣布将 Kotlin 作为 Android 开发的官方编程语言后,Kotlin 开发者社区一直在快速增长。纵观硅谷,Netflix、Slack、Pinterest 和 Lyft 等知名公司已经在使用 Kotlin。可以说,2018 年,将会迎来 Kotlin 的爆发。

这也意味着,对于 Java 程序员和 Android 应用开发者来说,仅仅掌握 Java 是不够的,你还应该学习 Kotlin,才能追上技术发展趋势,在工作中更加游刃有余。

【限时福利】

福利一:限时优惠价¥68,原价¥129,7 月 21 日恢复原价

福利二:每邀请一位好友购买,你可获得 24 元现金返现,多邀多得,上不封顶,立即提现(提现流程:极客时间 App - 我的 - 分享有赏)

【订阅方式】

扫下图二维码,或点阅读原文,试看或订阅课程。



如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存