实验目的
1.准确理解MapReduce单表连接的设计原理
2.熟练掌握MapReduce单表连接程序的编写
3.了解单表连接的运用场景
4.学会编写MapReduce单表连接程序代码解决问题
实验原理
以本实验的buyer1(buyer_id,friends_id)表为例来阐述单表连接的实验原理。单表连接,连接的是左表的buyer_id列和右表的friends_id列,且左表和右表是同一个表。因此,在map阶段将读入数据分割成buyer_id和friends_id之后,会将buyer_id设置成key,friends_id设置成value,直接输出并将其作为左表;再将同一对buyer_id和friends_id中的friends_id设置成key,buyer_id设置成value进行输出,作为右表。为了区分输出中的左右表,需要在输出的value中再加上左右表的信息,比如在value的String最开始处加上字符1表示左表,加上字符2表示右表。这样在map的结果中就形成了左表和右表,然后在shuffle过程中完成连接。reduce接收到连接的结果,其中每个key的value-list就包含了"buyer_idfriends_id–friends_idbuyer_id"关系。取出每个key的value-list进行解析,将左表中的buyer_id放入一个数组,右表中的friends_id放入一个数组,然后对两个数组求笛卡尔积就是最后的结果了。
实验环境
Linux Ubuntu 14.04
jdk-7u75-linux-x64
hadoop-2.6.0-cdh5.4.5
hadoop-2.6.0-eclipse-cdh5.4.5.jar
eclipse-java-juno-SR2-linux-gtk-x86_64
实验内容
现有某电商的用户好友数据文件,名为 buyer1,buyer1中包含(buyer_id,friends_id)两个字段,内容是以"\t"分隔,编写MapReduce进行单表连接,查询出用户的间接好友关系。例如:10001的好友是10002,而10002的好友是10005,那么10001和10005就是间接好友关系。
buyer1(buyer_id,friends_id)
view plain "copy
10001 10002
10002 10005
10003 10002
10004 10006
10005 10007
10006 10022
10007 10032
10009 10006
10010 10005
10011 10013
统计结果数据如下:
view plain "copy
好友id 用户id
10005 10001
10005 10003
10007 10010
10007 10002
10022 10004
10022 10009
10032 10005
实验步骤
1.切换到/apps/hadoop/sbin目录下,开启hadoop。
view plain "copy
cd /apps/hadoop/sbin
./start-all.sh
2.在Linux本地新建/data/mapreduce7目录。
view plain "copy
mkdir -p /data/mapreduce7
3.在Linux中切换到/data/mapreduce7目录下,用wget命令从http://10.51.46.