科多大数据培训
全国24小时免费热线
15328019568
联系QQ
3048661160
开班时间
当前位置:首页 > 学习资讯 > 大数据内容 >

围观Spark 与Hadoop的"高手"之争

摘要:最近有涉世未深,又对大数据感兴趣的宝宝告诉我我觉得Spark和Scala学不学无所谓啊!WTF?难道学一点Hadoop就能入驻大数据了吗?让我们来听听大神怎么说! (选自知乎大神)根

    摘要:最近有涉世未深,又对大数据感兴趣的宝宝告诉我"我觉得Spark和Scala学不学无所谓啊!"WTF?难道学一点Hadoop就能入驻大数据了吗?让我们来听听大神怎么说!
    
    (选自知乎大神)根据最近走读spark core/shuffle,core/scheduler and core/rdd 的部分代码来说说自己的感受:
    
    1. spark 是hadoop mapreduce 的不断改进,同时又兼容并包了很多数据库里面的一些基本思想来实现和发展。没有什么怪力乱神,什么内存计算,什么下一代之类的花哨说法的。spark 是站在hadoop and database 这两个巨人肩膀上的。
    
    2.  Spark 版本的PageRank 比Hadoop 快的不是一点点。根本原因就是在每一步迭代的时候,需要做两个big table euqi-join。hadoop mr 的算法是要做data shuffle,同时需要把需要计算的数据从hdfs 多次读出写入。回溯到5年前,最先发现Hadoop 在处理迭代计算,存在i/o 读写浪费的瓶颈的是 vldb10 的 LoopHadoop 的论文,其中的一作是一个中国哥们,现在citation 已经超过400多了。解决的方法就是把多个迭代中不变的数据,cache 下来,下一步计算就不需要从disk 里面读写了,Spark 也是根据类似的idea 可以把需要反复计算的数据, cache 下来。
    
    3. 接着上面的问题,数据cache 下来之后,why spark 在迭代的时候不需要shuffle 了阿? 因为spark 定义了rdd 之间的dependence 关系,这个关系决定了是否需要shuffle. 比如一个spark 有多个partition, 如果一个rdd 到另外一个rdd 是 全依赖关系,就是说一个partition 的数据,始终在local 计算,或者只是需要去取指定的一个partition 的数据的话,那么shuffle 就是不需要了。我们可以看到,所有计算的依赖关系都是在计算之前就定义好了。有了 rdd 之间的依赖关系,就是可以得到计算的 logical plan and physical plan, 然后去执行计算。 这就是典型的数据库的思想。当然rdd 也就是数据库view 的思想的实现,因为rdd 和view 都是需要的时候再计算的模式,这样就可以有了计算的pipeline,也完全是数据库pipeline 的实现的吗。大家如果看到spark rdd code 里面到处的iterator,就更明白了 。
    
    4. 回到page rank 的列子,两个大表(A,B)之间的join, 因为数据已经按照hash patitioner 把数据分块划好了。就是A B 数据的key 在一个范围的已经分入到具体的partition 里面了,那join的时候,就只是需要对应的partition 作对应的join 就可以的。这样就避免了数据的shuffle 了的。
    
    5. 其实spark 是一点点的工程和学术的结合基础上做出来的, 本质就是Hadoop mapreduce 的增强版本。大家可以看到,在理论上都没有太多新的东西。 所以人家马铁大神当年论文也是被拒了好多遍的。但是系统就是这一点点的改进的基础上做出的。马铁的老板之一是Franklin,F的老板是 UCI 的大牛Carey, Carey 的老板大家自己google 吧。UCB的人的确是牛!
    
    6. 最后我觉得比较hadoop vs spark 不是一个很好的比较方式,因为他们都是一个流派的。比较合适的,是比较 MapReduce Vs MPI,因为在MPI 的计算模式和MapReduce 有大的区别。如果在计算传输数据量不大的时候,比如单纯的numerical 计算的时侯,MPI 都要甩 MapReduce 几条街。最简单就是你想想人家超算做了几十年了,在大的计算集群上的计算上则几万核啊,经典的 one to all, all to all, all to one, data grid 都是很妙的方法好吧。但是如果在处理文本啊之类的数据的时候,一个单词可能出现了很多次,需要大量的数据传输,这时候MapReduce shuffle 机制就显示出优势来了。当然MPI 没有考虑 fault tolerance,也是在cloud 环境下,MapReduce 更有效的原因之一。
    
    没错,就是标题党!其实Hadoop与Spark同样重要,也同属一个流派。
    
    知乎大神的观点十分客观,有助于萌芽期的大数据工程师们参考理解!
    
    如果你耐心看到最后,还觉得不学Spark和Scala也无所谓的话,欢迎点击立即咨询,我将与你展开一场持久的辩论战!
    
    对大数据技术感兴趣的宝宝,,会有专业课程老师解答你对科多大数据的课程等的一系列问题~
标签: SparkHadoop
最新资讯更多+
内容推荐更多+
在线课堂
猜你喜欢