hadoop (mapreduce运行原理)

架构

执行流程分布式并行计算框架

默认情况下,一般情况下是一个map,还有一种情况是这个文件大过map,把文件分成一个一个块计算

map有限定最多启动多少个,系统绝定,但有20个进程,而map最多启16个,只能先执行16个在执行4个

inputsplit(数据源通过分片,有很多预定好的分割方式)-------map(有多少分片启动多少map 进程)---------record(每个map进程完成分片中的记录record)-------有多少条记录map函数就被调用几次

(1)map: 假设做word cound

    我们开发时经常要改变的是分组规则,排序规则和分区规则。

    用job.setxxx设置你实现的比较规则,比如:

(a)、实现分组则job.setgroupClass 

(b)、job.setSortClass

(c)、改变分区就得实现paratition    job.setPartitionerClass

(2)、map完成之后就是shuffle 指的是从map输出开始到reduce输入之间的过程,也就是洗牌的意思 

        map中又分几个部分

        a、map端输出:合并输出,先放在内存达到伐值(告诉它内存最多能存多少数据)溢出到磁盘,之后在合并溢写的小文件为大文件。始终要有网络请求,所以要合并文件。如果有三个小文件需要连网3次,如果合并成一个大文件,只需要边网一次。合并在输出的时候,要进行分组和排序。map输出的文件都是放在本地磁盘上。

        b、reduce端输入:分区分多少个和你的reduce有关,通过httop摘取map端的输出结果,map端输出一结束就开始拉取

 

(3)、reduce  根椐组内数据聚合统计,并输出到hdfs上,输出时默认是按key排序

mapreduce 流程结束,mapReduce运行框架运行搭建和sparrk一样使用yarn.sh,yarn.sh也是分为,主,从来解决并行式计算框架。这里边,马上执行的代码是在driver上执行, 不马上执行的是在worker上执行。对数据操作的方法有行为和变换两种。具有会话能力的是不能广播的比如:spark的sc是不能被广播的,因为sc是原来 driver和worde的连接对象。

窄依赖:不跨区的,不跨prtition (比如map)

宽依赖:是跨区的,(比如reduceByKey,groupByKey)

注意的是:能用窄依赖,尽量不用宽依赖。

有向无环图:把内存中不同的rdd进行优化调整,然后执行


猜你喜欢

转载自blog.csdn.net/baiyan_er/article/details/80055938