架构
执行流程分布式并行计算框架
默认情况下,一般情况下是一个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进行优化调整,然后执行