[转]Hadoop 生态组件
虽然流计算对于大数据处理来说越来越重要,但不支持流计算却不会成为 Hadoop 的致命伤。虽然 Hadoop 自身不提供流计算服务,不过主要的流计算组件,如 Storm、Spark Streaming 以及 Flink 本身就属于 Hadoop 生态系统的一部分,因此并不构成太大的问题。
曾有开发者向 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 兼容性也比较差,用户群体相对较小。
未来大数据领域比较重要的发展方向中,IOT 是一个值得长期关注的领域。在大数据发展历史上,这部分业务发展周期较短,很多技术都不是非常成熟,标准也没有完全统一。除此之外,云上的大数据产品还有技术变革的空间,例如:跨数据中心 / 云的解决方案、自动化关键数据业务迁移、数据隐私保护、自动机器学习等,未来一定会有更加创新的产品来打动和吸引用户上云。
[resource]Hadoop老矣,为什么腾讯还要花精力在其开源发布上?