hadoop map join 思路 待补充
.map端join
适用场景:小表可以全部读取放到内存中。两个在内存中装不下的大表,不适合map端join。
联想于:炊事班先做好饭放路边,急行军到了边拿馒头边吃 map端的小表就是馒头, map过来的每条记录就是急行军的每个人来拿馒头,这样就把业务做完了此时reduce端就没用作用了。
在一个TaskTracker中可以运行多个map任务。每个map任务是一个java进程,如果每个map从HDFS中读取相同的小表内容,就有些浪费了。
使用DistributedCache,小表内容可以加载在TaskTracker的linux磁盘上。每个map运行时只需要从linux磁盘加载数据就行了,不必每次从HDFS加载。
问:如何使用DistributedCache哪?
答:1.把文件上传到HDFS中
2.在job.waitForCompletion(...)代码之前写DistributedCache.addCacheFile(hdfs路径, conf);
3.在MyMapper类的setup(...)方法中使用DistributedCache.getLocalCacheFiles()获得文件的路径,读取文件内容