java程序员的大数据之路(11):MapReduce的连接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/K_Ohaha/article/details/78644093

Map端连接

在两个大规模输入数据集之间的map端连接会在数据到达map函数之前就执行连接操作。各个输入数据集必须被划分成相同数量的分区,并且均按相同的键排序。同一键的所有记录均会放在同一分区之中。

Reduce端连接

reduce端连接比map端连接更为常用,因为reduce端连接并不要求输入数据集符合特定结构。但是由于两个数据集均需经过MapReduce的shuffle过程,所以reduce端连接的效率要低一些。

边数据分布

“边数据”是作业所需的额外的只读数据,以辅助处理主数据集。为了使所有的map或reduce任务方便而高效的使用边数据,除了分布机制,还可以以静态字段的方式将边数据缓存在内存中。

分布式缓存

分布式缓拷贝机制能够在任务运行过程中及时的将文件和存档复制到任务节点以供使用。

工作机制

当用户启动一个作业,Hadoop将由-files和-archieves选项所指定的文件复制到jobtracker的文件系统。在运行任务前,tasktracker将文件从jobtracker的文件系统复制到本地磁盘,使任务能够访问文件。
tasktracker为缓存中的文件各维护一个计数器,用来统计文件被使用情况。任务即将运行时,被使用的文件的计数器加1,任务结束时,所有计数器减1.当计数器为0时,该文件可以从缓存中移出。缓存大小默认为10GB,可以通过local.cache.size属性设置,单位是字节。文件存放在tasktracker的${mapred.local.dir}/tackTracker/archive目录下。

猜你喜欢

转载自blog.csdn.net/K_Ohaha/article/details/78644093