目前我在使用hadoop emapreduce这个产品,我该怎么选择到底是用mapreduce还是用spark呢?
Hadoop主要由HDFS + YARN + MapReduce三个核心组件组成,HDFS是一个文件系统,负责分布式存储;YARN是Hadoop自带的一个通用的资源管理框架,用来对跑在集群上的Application进行资源分配及管理;MapReduce是一个分布式计算框架,跑在YARN上,配合HDFS用来做分布式数据计算。
Spark是一个分布式计算框架,相当于MapReduce的改进版,支持基于内存的迭代计算,大多数情况下Spark要搭配Hadoop来处理HDFS上的数据。
如果仅仅用来做海量数据存储,无疑只能选Hadoop了,Hadoop的HDFS可以看作是业内的分布式存储标准了,而Spark只能用来跑计算无法取代Hadoop。如果涉及到HDFS上的数据处理,那么Hadoop + Spark是最佳选择。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
hadoop在mapreduce的过程中,会与硬盘有多次IO交互,运行时间慢。
spark使用RDD,相比hadoop将多次IO转化为内存中RDD的转换,运行速度提升了不止一倍。
所以对于MR任务,建议使用性能更好地spark。
Hadoop MapReduce是一整套生态, 就算使用Spark也离不开HBase,Hive,Pig,Impala 或其他 Hadoop 项目。建议两者共同使用
spark是基于DAG,有cache的管理,原生就长在内存计算上的,其上支持 内存计算、流式计算、
图计算、SQL等功能,这些又是在一套core上,互相之间可以交叉使用。
还包含了丰富的API,RDD api、dataframe、dataset等。支持java、scala、python、R语言。
是数据分析处理的一大利器。
hadoop mr是基于map-reduce的,相对spark开发较早,稳定性较好,做数据清洗时能获取比较大的吞吐量。
hadoop tez是基于DAG的,比spark应该晚点,以后作为hadoop hive的可选引擎之一。
所以:
ETL:hadoop mr/tez
机器学习:spark mllib
流式计算(s以上):spark streaming
流式计算(s以下):storm
图分析:spark graphx
需要cache数据的,使用spark
使用hive:则hadoop/tez
使用SQL,可以尝试用spark sql,使用hive相对稳定一些
更加宏观的可以参考文章:https://yq.aliyun.com/articles/15306?spm=0.0.0.0.v2fm6G
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。