reduce端join map端讀取兩個(gè)表,為兩個(gè)表的數(shù)據(jù)分別打上標(biāo)簽tag,發(fā)送數(shù)據(jù) reduce端根據(jù)分區(qū)分組規(guī)則拿到的數(shù)據(jù)時(shí)key相同的數(shù)據(jù),再根據(jù)標(biāo)簽tag進(jìn)行相同key的不同value的join操作,完成實(shí)際的連接。
map端join將小表復(fù)制多份存放在每個(gè)map task的內(nèi)存中,然后只掃描大表,對(duì)大表中key在小表中存在時(shí),進(jìn)行一個(gè)join拼接操作。
將小表復(fù)制的對(duì)象方法為DistributedCache.addCacheFile,要使用時(shí)再使用相應(yīng)的提取文件目錄的方法,并用標(biāo)準(zhǔn)IO獲取到數(shù)據(jù)。
semi join先將參與join的表1的key復(fù)制到一個(gè)新的表3中,然后把新表復(fù)制多份到各個(gè)map task中,最后將不在新表3的表2的數(shù)據(jù)過(guò)濾掉,再進(jìn)行reduce。