与 hadoop 对比,如何看待 spark 技术?

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 我先说我个人的结论。我的结论必须基于2017年9月初这个时间节点。因为未来,是存在一切可能的变数的。1.Hive 在短期2-3年内,仍然无法被取代。大部分中大型互联网公司的sql类大数据分析job,70%以上都仍旧会跑在hive上。2.presto / impala / sparksql / hive on tez . 我认为presto目前是最有可能胜出的一个。3.spark 的地位有些尴尬。在大热之后,我不太看好他的未来。我当然会慢慢来说我为什么会下这些结论。首先,我在说几个我在工作当中看到的事实:1.spark在小数据集的优势明显。 spark更容易编写类

我先说我个人的结论。

我的结论必须基于2017年9月初这个时间节点。因为未来,是存在一切可能的变数的。

1.Hive 在短期2-3年内,仍然无法被取代。大部分中大型互联网公司的sql类大数据分析job,70%以上都仍旧会跑在hive上。

2.presto / impala / sparksql / hive on tez . 我认为presto目前是最有可能胜出的一个。

3.spark 的地位有些尴尬。在大热之后,我不太看好他的未来。

我当然会慢慢来说我为什么会下这些结论。

首先,我在说几个我在工作当中看到的事实:

1.spark在小数据集的优势明显。 spark更容易编写类mr家族的job,引擎也更容易的帮助开发者构造了合理的dag执行步骤。 但是,在大规模数据集工作的时候,尤其是reduce的key很多的时候,spark的默认hash shuffle就完蛋了(具体请自己看spark的hash-based-shuffle原理)。所以高版本的spark也回到了mr赖以生存的sort-based-shuffle。既然在大规模数据集上工作,那么内存显然也装不下(几~几十tb)大的表数据,所以spark在大数据上,几乎没发代替hive。hive是稳如狗,spark经常有莫名其妙的问题。

2.小数据集上spark 和 presto/impala类的对比。首先,我做个假设,即大部分公司85%+的数据分析工作,仍然是sql based的。那么在这个前提下,我来谈一谈spark和 presto/impala的不同。 既然是在小数据集,那么我们假设worker节点有足够的内存,能容纳整个sql查询背后的数据表。那么查询的[速度/稳定性](这玩意类似篮球届的 [ 助攻/失误] 比), 就成为了最关键的指标。 spark的硬伤,就在于在spark官方推荐的几种部署方式中,仍然需要每次动态的启动spark-submit制定数量&内存大小的executor。 而presto/impala是使用常驻进程的方式。在期望值为秒级别返回的小数据集查询中,这是spark的硬伤。

3.兼容hive,是另一个最重要的点。兼容hive的好处,我就不做过多的解释了。网上经常有很多公司发的《sparksql兼容hive在xx公司的各种挑战》,一堆一堆的技术blog,我想说这些是你们该干的事情么? 你们的兼容率,在spark1.8上,从50%做到了70%,在spark2.1呢? 你们有能力把你们做的这些事情推进到spark社区,并merge进去么? 你们投入在这上面的人月,用presto是不是直接就work了? 大多数人在搞这个的人,我想心中都有自己的小算盘把。 那么diss完了spark-sql,回到presto/impala。

presto: 目前没有明显的硬伤,算是中规中矩的产品,兼容hive最好,速度不慢,多租户,资源控制做的相对很好。没有不支持的主流存储类型。 我认为这背后的一切,都是因为facebook是游戏账号转让平台幕后的推手。facebook是一家自己有大数据的公司。自己家用的产品,自己先production-ready,才好意思拿出来。那么系统的设计者,就不是赵高在做纸上谈兵,而是实实际际的考虑到了 sql on hadoop的实际痛点。

impala: 最大的优势就是超级快。缓存metastore的数据,缓存hdfs block位置的数据,缓存一切能缓存的东西。 这很好,但是,这些信息的变更也是很频繁的。采用太多缓存的结果是很多查询因为缓存信息的失效而直接fail了。 而且impala是大数据发行商cloudera推出的sql on hadoop,他为了支持自家的parquet存储结构,官方竟然选择不支持orcfile这种在hive里很常用的存储结构 [我们组的兄弟自己写了一个支持orcfile的patch,马上推给impala社区,司。 马昭之心,马上便知]。这就是cloudera的短视,和不接地气。在sql on hadoop的市场格局还没有彻底形成之前,在cloudera manager本身都没有上市,没有占据大多数大型公司的hadoop部署管理工具的前提下,居然就开始想护犊子,开始搞保护主义了, 真的是格局太小了。 同理hive on tez是hortonworks维护的sql on hadoop产品, 就你那点可怜的文档,你是想搞开源呢?还是遮遮掩掩怕大家看到你没有实力的代码?

所以,我个人比较看好presto. 希望presto可以吸收impala上一些设计好的点。 在2-3年内统一这个sql on hadoop的市场。 未来待内存的价格进一步走低后,我们的“小数据集”,就可以变的越来越大了,那时候,hive的sql,也才更有可能会越来越多的跑在sql on hadoop上了。

-------------------------------------------

spark的部分,我忘记提编程范式。在shuffle的处理啊,内存管理啊,我认为在当下21世纪的今天,不会存在多大的技术gap,即一个公司一拨人的实现,可以2x 3x的秒杀另一个公司的产品。因为技术的理论基础是差不多的。 那么其不同,更多的表现在其他的架构点上。

presto&impala是纯sql-based的,而spark最开始是rdd based,是要用scala编程的,要写lambda表达式。我是个程序员,我很尊重lambda表达式,我尊重函数式编程。但我认为工程上,函数式编程是会阻碍这项技术的发展的。 lambda不好打断点debug,也比过程式更难以理解一些。 一个公司真正创造价值的那几十个,几百个大数据job,是要更容易debug,更容易做长期维护来的好呢,还是在写的时候为了快一些编程更好呢? 而且,写起来最快的,最容易不出逻辑错误,最容易懂的数据分析ddl语言,是sql啊。 所以到了今年,spark社区全面转向了dateframe ,dateset, sparksql. 这玩意很类似 javaEE时代的hibernate,是一个大数据时代的orm框架.这可以看出spark社区在为了code based big-data job在努力。 但正如前面所说,我不知道spark社区为何不在兼容hive这条路,把hivesql兼容性支持的更好些,反而是去把重心放在dateframe ,dataset 上。 这就好比hibernate 不去做好怎么兼容mysql的sql,而是把重心放在hibernate自己的hql和creteria的api设计上。 这真有点kind of funny,想一统天下做sql层的入口,想革了hive 的命,最后捡了芝麻,丢了西瓜。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
132 6
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
62 2
|
9天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
44 2
|
9天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
42 1
|
27天前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
49 1
|
1月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
72 5
|
1月前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
34 4
|
1月前
|
大数据 网络安全 数据安全/隐私保护
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
105 5
|
1月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
141 5

相关实验场景

更多
下一篇
无影云桌面