将HDFS中不同目录下面的数据合并在一起并放入指定目录中
1、数据
new_staff
1 AAA male
2 BBB male
3 CCC male
4 DDD male
old_staff
1 AAA female
2 CCC female
3 BBB female
6 DDD female
尖叫提示:上边数据的列之间的分隔符应该为\t,行与行之间的分割符为\n,不要复制,在vim编辑器里面手敲
2、创建数据,上传hdfs
[yinggu@hadoop102 sqoop]$ mkdir tdata
[yinggu@hadoop102 sqoop]$ cd tdata/
[yinggu@hadoop102 tdata]$ mkdir newdata
[yinggu@hadoop102 tdata]$ mkdir olddata
[yinggu@hadoop102 tdata]$ vim newdata/new.txt
[yinggu@hadoop102 tdata]$ vim olddata/old.txt
[yinggu@hadoop102 sqoop]$ ../hadoop-2.8.2/bin/hadoop fs -put tdata/ /
3、创建JavaBean
[victor@node1 sqoop-1.4.7]$ bin/sqoop codegen \
--connect jdbc:mysql://node1:3306/company \
--username root \
--password 000000 \
--table staff \
--bindir /opt/module/sqoop/staff \
--class-name Staff \
--fields-terminated-by "\t"
4、开始合并
[victor@node1 sqoop-1.4.7]$ bin/sqoop merge \
--new-data /tdata/newdata/ \
--onto /tdata/olddata/ \
--target-dir /tdata/merged \
--jar-file /opt/module/sqoop/staff/Staff.jar \
--class-name Staff \
--merge-key id
5、结果
1 AAA MALE
2 BBB MALE
3 CCC MALE
4 DDD MALE
6 DDD FEMALE
6、参数
序号 | 参数 | 说明 |
---|---|---|
1 | --new-data <path> | HDFS 待合并的数据目录,合并后在新的数据集中保留 |
2 | --onto <path> | HDFS中合并后的数据存放目录,合并后,重复的部分在新的数据集中被覆盖 |
3 | --merge-key <col> | 合并键,一般是主键ID |
4 | --jar-file <file> | 合并时引入的jar包,该jar包是通过Codegen工具生成的jar包 |
5 | --class-name <class> | 对应的表名或对象名,该class类是包含在jar包中的 |
6 | --target-dir <path> | 合并后的数据在HDFS里存放的目录 |