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