The Data Scientist #7: Hadoop

2021/06/14 16:34

Cloudera 这个月宣布了他们即将退市的消息,作为 Hadoop 技术的 OG,这一举被很多媒体视为 Hadoop 落幕的象征,类似说法已经不是第一次听到了,早在 2019 年 Cloudera 合并 Hortonworks 时,就有很多人唱衰 Hadoop。

Hadoop 是由雅虎 Doug Cutting 开发的一种基于文件的分布式架构,作为昂贵数据仓库方案 MPP 的替代品,Hadoop 从 2012 年开源后就获得了空前的关注。

虽然在大厂中,Hadoop 为大规模批处理查询提供了出色的性能和灵活性,但 Hadoop 最终还是在更大的市场中败给了 MPP,不仅仅是查询速度,还有易用性。而在云计算时代来临时, Hadoop 和传统 MPP 都输了,因为更先进的商业模式出现了,云计算语境诞生了新的定价方法:pay as you go。

但 Hadoop 从来没有真正意义上消亡过,就算今天你的公司里已经没有人在使用 Hadoop 了 ,但公司里那群做大数据的人依旧被称作「 Hadoop 团队」,因为 Hadoop 早已经成为了一个生态系统的名字。

以下是本周的推荐。

1. PingCAP: 云原生数据库设计新思路

首先我们来看一下 PingCAP 的 CTO 黄东旭对于云上数据库未来的看法。

本文首先回顾了历史上两种数据库的设计流派,分别是以 Spanner 为代表的 Shared Nothing,和以 Aurora 为代表的 Shared Everything ——「两个都是顶级的互联网公司在面临到这种问题时做出的一个选择」。

Shared Nothing 系统是纯分布式数据库,在实现业务层无限水平扩展方面有侵入性小的优点。Shared Everything 系统的核心要点是计算与存储彻底分离,Aurora 甚至不是纯粹的分布式架构,「相当于把一个 MySQL 跑在云盘上」,作者还提到,虽然这个流派的很多产品都自称是云原生数据库,但其实都和 Cloud-Native 没有必然关系

随后,他以三个 100% 建立在云上的系统——Snowflake、Bigquery 和 Rocket 为蓝图,勾勒了云上数据库设计未来的走向,他有一个比较有意思的观点:决定云上数据库设计的关键问题是如何充分放大 Cloud-Native 的核心体验?

更进一步,作为一个存储数据的产品如何把 AWS 的拳头产品 S3 的价值放大?一旦回答了这个问题相当于回答了 why now。否则,如果只是把单机数据库分布式化这点,很多云时代以前的数据库也做到了。

所以刚才看了这三个系统,我觉得有几个特点,一个是首先都是天然分布式的,第二个是构建在云的标准服务上面的,尤其是 S3 和 EBS,第三是 pay as you go,在架构里面充分利用了云的弹性能力。我觉得这三点最重要的一点是存储,存储系统决定了云上数据库的设计方向。

EBS 其实我们也有研究过,TiDB 第一阶段其实已经正在跟 EBS 块存储做融合,但从更长远的角度来看,我觉得更有意思的方向是在 S3 这边。首先第一点 S3 非常划算,价格远低于 EBS,第二 S3 提供了 9 个 9 很高的可靠性,第三是具备线性扩展的吞吐能力,第四是天然跨云,每一个云上都有 S3 API 的对象存储服务。但是 S3 的问题就是随机写入的延迟非常高,但是吞吐性能不错,所以我们要去利用这个吞吐性能不错的这个特点,规避延迟高的风险。

那么,什么数据库产品因为价格高昂拦住了一批用户?什么数据服务一开始用量很少,但会越用越多?而哪种类型的数据库,客户经常用的数据可能分布在不同云中?什么样场景刚好可以利用 S3 延迟高但吞吐量大的特点?答案已经呼之欲出了。

上述例子有一些共同点都是数据仓库,不知道大家有没有发现,为什么都是数据仓库?数据仓库对于吞吐的要求其实是更高的,对于延迟并不是那么在意,一个 query 可能跑五秒出结果就行了,不用要求五毫秒之内给出结果。

2. The #1 Reason Snowflake Is Different

本文分析了 Snowflake 如何从 Redshift 受众夺走了 10 亿美元的销售额,作者是 Doug Foo。

他提到促成了数据仓库「云」化的两条关键线索。一条线索是 Jeff Dean 在谷歌提出的 MapReduce,Hadoop 由此演变而来,它令我们可以在没有中央数据库的情况下处理大规模数据。另一条线索是由 Andrew Jassey 在亚马逊创建的 AWS,它让计算和存储变得容易获得。

AWS 在云计算的基础上将 PostgresSQL MPP 化,做成了 Redshift,但 Snowflake 完全不一样,它的计算和存储是分开扩展的。Redshift 和 Azure 虽然也支持动调存储大小,但调节需要时间来完成,原因是数据和存储是紧耦合的——每个计算节点都对应着一个传统的 Postgresql 数据库实例:

The biggest thing you hear about Snowflake over Redshift was the ability to scale compute w/o storage — which Redshift and Azure Warehouse quickly “fixed” right away. But did they really fix it? I took a deeper look at this and figured out the real issue. While Redshift and Azure enabled elastic storage, data is still coupled to each compute node. This is because the core engine in each compute node is still just a Postgresql or SqlServer DB that mostly runs like a traditional DB — ie, has its own set of data/files, cache, and locking. Thus to elastically scale up or down, you wind up needing to re-shard and migrate data to different compute nodes.

「存算分离」 是 Snowflake 和其他 Share Nothing 的 MPP 云数据仓产品最大的不同点。作者认为这点上 Snowflake 其实更像 Hadoop/Spark。这个说法不完全正确,Hadoop 早期的版本肯定不是计算存储分离架构,但 Hadoop 的继承者 Spark 倒是在一开始就采取了这种设计。JuiceFS 的创始人 Davies 在 2018 年也说过计算与存储的架构才是未来

3. Snowflake VS. Hadoop

看完和 MPP 的比较,再来看看 Snowflake 和 Hadoop 的区别,这篇文章的作者是 Snowflake 的架构师 John Ryan。他用几张图解释了 Snowflake 和 Hadoop 在处理并发上的区别。

首先,和所有 MPP 数据库一样,Hadoop 在增加存储资源的同时也增加了计算资源,而 S3 才数据湖的标准答案,Snowflake 很好地利用了这点,之前已经说过了:

[...]it does have the same drawbacks of MPP solutions, in potentially over-provisioning compute resources as each node adds both compute and storage capacity. It’s arguable, a cloud-based object data store (eg. Microsoft Blob Store or Amazon S3) is a better basis for a data lake, making use of the separation of compute and storage to avoid over-provisioning.

其次,Snowflake 的这种设计可以在 Virtual Data Warehouse 和服务层之间建立缓存,这样 Snowflake 不仅适用于批处理的场景,仪表盘的性能也不错,这点一直是 Hadoop 的软肋。因此我们可以看到,一些厂商在提供数仓解决方案时,通常在 ETL 和交互式查询会提供两套独立的产品。除此之外,他还提到了 Snowflake 在易用性上的优势:数据摄取时很简单,不需要引入额外的组件。

Snowflake Architecture

4. Hadoop is Dead. Long live Hadoop.

本文来自 Arun Murthy,作为 Hadoop 的早期共贡献者,他曾经合伙创办了 Hortonworks(Hadoop 的另一位 OG),在 Hortonworks 被 Cloudera 收购后成为了 Cloudera CPO。

如果把 Hadoop 仅仅定义为 MapReduce,那么他显然在衰退,就连 Cloudera 自家的数据平台 CDP 也没有全部在使用,但 Hadoop 早已成为现代人们管理和分析数据方式的代名词,他认为就像 UNIX 一样,Hadoop 逐渐成为了一种哲学,Eric Raymond 的《UNIX 编程哲学》中的 17 条规则 Hadoop 都可以对号入座,这里我列出其中两条:

Rule of Separation: Separate policy from mechanism; separate interfaces from engines.

HDFS 不仅定义了文件系统的实现,也定义了接口(Hadoop FileSystem API),这样计算引擎 Spark 就可以访问 HDFS,同样 S3 也可以通过兼容 Hadoop 协议来支持 Spark,实现计算与存储的分离。

Rule of Diversity: Distrust all claims for “one true way”.

在 Hadoop 生态中,ETL 的选择有 Spark 和 Hive,SQL 的选择有 Hive/Tez 、 Impala 和 SparkSQL。为什么 UNIX 主张一个工具只做一件事然后再把这些工具串起来?我认为不仅仅是出于专注,从外部性的视角来看,产品功能单一也意味把更多选择给到了用户手中。在工具消费化的今天,这条规则变得越来越有价值。

正是这些哲学,Hadoop 生态系统能够方便地与云原生的各种硬件和软件栈融合:

Furthermore, the entire Hadoop ecosystem has always been built to "shape-shift" and absorb new influences

Hadoop 和采用它的 OG 正在退出舞台,但 Hadoop 推动了一个不断发展的使用开源技术和开放数据标准的生态系统,因为早期设计者的远见卓识,这个生态越来越多样,随着 Spark 和 Flink 这样的项目兴起,Hadoop 哲学永续。Murthy 说:

As long as there is data, there will be “Hadoop”.

Tweet of the Week

本周推荐的 Tweet 比较多。

这条 Thread 对 $CLDR 发展的关键节点进行了梳理,也提到了这次私有化的目——熬过漫长的转型期:

9/ “The excitement around the original promise of the Hadoop market has contracted significantly. It’s incredibly expensive and complex to get it working effectively in an enterprise context,” Casey Aylward, an investor at Costanoa Ventures via TechCrunch

11/ So what are the benefits of going private?

Time to focus on its Cloudera Data Platform (released Sept 2019), which pivots the company from on-prem towards cloud

Public investors rarely have the patience to tolerate increase investment with minimal/volatile sales results

Hadoop 源于谷歌这样的大厂解决问题的方法,它始终属于少数人,下面这两条反思让我联想到早期的 PC 同样也是少数黑客们 DIY 的玩具,随着数据用例的普及,大众市场需要更加简单和易用的方式?

@rahulj51

The best part about using a vertical data-warehouse like Bigquery/snowflake is the hundreds of hour per year you save on developer productivity. Even if you have deep pockets to afford a large data eng. team, do you really want them to be forever toiling with low level tasks?

@Di_Ku 回复说:

Interesting user take on no-ceremony DWs vs hand-crafted data pipelines.
Hadoop/Spark started the DIY business but turns out that plumbing is not the best use of dev time in most customer orgs.


以上是本期的推荐,希望对你有用。

端午假期除了看欧洲杯,还去买了新的沙发,在挑选沙发过程中产生的一个感悟是,人虽然有 1/3 的时间在床上度过,但有一半以上清醒时间发生在椅子上,如果算坐在沙发、地铁、汽车上的时间,可能就更多了。从这个角度,选择一把舒适的椅子可能和选择一张好的床垫同等重要,甚至更重要,而我在写这份 Newsletter 的过程中就一直坐在家里百元级别的人体工学椅上,想到这里,我决定除了沙发,再去买一把好点的椅子。

下周见!
Dreamsome

❤️ 想支持《数据科学人》?把它推荐给 3 个朋友吧!
🚀 欢迎用电邮订阅《数据科学人》,我将以周报的形式发布内容