Hadoop的基于进程运算和Spark的基于线程运算有什么优缺点?
Hadoop和Spark分别是什么?
hadoop是apache基金会专门为处理大数据而开发的一款大数据处理框架,其中包括:HDFS,MapReduce,Yarn.其中HDFS主要负责分布式文件存储,而MapReduce是分布式计算引擎,Yarn是集群资源调度平台
Spark也是apache基金会的一个开源顶级项目,其在传统意义上也是一款分布式计算引擎,个人理解他的出现就是为了解决MapReduce计算缓慢的问题,Spark的计算方式是基于内存的,只有当任务庞大到无法通过内存直接计算完毕的时候才会产生磁盘交互,所以在运行速度上是比MapReduce快了100倍(官方说明)
由于我们的讲的是MapReduce的基于进程运算和Spark的基于线程运算有什么优缺点,那么我们可以从以下几个方面来说
- MapReduce的计算风格
- MapReduce是底层是java,而在任务计算的时候是以进程的方式进行运算,且并不是基于内存运算,所以在计算速度上比较慢(可以说是相当慢),由于采用进程的方式去计算任务,所以各个任务之间是资源是相互独立,不共享的,但是采用这种方式会使得程序的运行效率降低
- Spark的计算风格
- Spark是基于线程的方式去执行任务的,而线程是cpu执行任务的基本单位,所以在运行效率上是要比MapReduce的基于线程方式执行任务要高,但是由于线程之间共享资源,所以就难免会出现资源竞争问题
总结
Hadoop中的MR中每个map/reduce task都是一个java进程方式运行,好处在于进程之间是互相独立的,每个task独享进程资源,没有互相干扰,监控方便,但是问题在于task之间不方便共享数据,执行效率比较低。比如多个map task读取不同数据源文件需要将数据源加载到每个map
task中,造成重复加载和浪费内存。而基于线程的方式计算是为了数据共享和提高执行效率,Spark采用了线程的最小的执行单位,但缺点是线程之间会有资源竞争。