Mapreduce

 

inputformat的两种功能:数据切分功能(data splits)、记录读取器(record reader),理论上来讲,一个split和一个block的大小是一致的。java

map是一个进程,把split中的数据读到内存,达到百分之80的时候,开始往磁盘上写数据(小数据,命名为spill.n),在读数据的同时,还会作一次sort,把相同key的数据排到一个区间,最后把不少个小份数据“归并排序”成一个大份数据。多线程

paritition(shuffling):每个map处理后产生的不一样key和value,把key作hash给reduce这个过程叫作parttition。 并发

两个进程:jobtracker tasktracker线程

 

 

 

这个图是有6个map,2个reduce,8个进程。为何mapreduce采用多进程的并发方式,而不是多线程的并发方式?首先这个多进程并发方式的模型, 每个进程,每个任务去占用资源去进行控制,由于这个进程空间是独享的,有什么优点呢?方便对每一个任务进行资源的控制和调配,那选择进程,缺点是,进程相比线程来讲,它会消耗更多的启动时间,也就是说进程的一个启动时间要比线程的时间慢好多, 由于这个因素,直接致使mapreduce不适合运行一些低延时类型的做业,因此以前说mapreduce有一个很大的缺点,就是时效性不高,因此mapreduce只适合作一些批量操做,适合一些高吞吐,离线的状况下。orm

 

hdfs:数据源存在这,数据源都是以file的方式表示的,当你提交了一个文件,这个文件会被切分红一些小的文件,hdfs是一个文件系统,那么就会有一个数据单位,这个数据单位就是block,默认是64M,默认备份3个,存在不一样的机器上。    经过非java方式开发的代码,读取的数据都是fextfile明文类型的,这个类型的优势是可读性好,缺点是这种类型数据不压缩,浪费空间,会致使磁盘开销比较大。blog

 

 shuffle:包含不少环节,partion,sort,spill,meger,combiner,copy,memery,disk。  排序

相关文章
相关标签/搜索