理想情况下,当我们在不使用merge-key的情况下运行增量文件时,它将创建带有附加数据集的新文件,但是如果我们使用merge-key,则它将创建新的整个数据集,包括仅在一个文件中的先前数据集.但是当我在sqoop工作中使用增量追加时,我没有得到一个零件文件.以下是我的步骤:
1)初始数据:
mysql> select * from departments_per;
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 2 | Fitness |
| 3 | Footwear |
| 4 | Apparel |
| 5 | Golf |
| 6 | Outdoors |
| 7 | Fan Shop |
+---------------+-----------------+
2)sqoop命令最初将数据导入hdfs:
sqoop import \n--connect jdbc:mysql://localhost/practice \n--username root \n--password cloudera \n--table departments_per \n--target-dir /departments \n-m 1
现在,当我看到hdfs下的目录部门时,我可以看到一个部分文件,这很好.
3)现在我在mysql中更新我的初始数据:
mysql> select * from departments_demo;
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 2 | Fitness |
| 3 | Footwear |
| 4 | Apparel |
| 5 | Golf |
| 6 | Outdoors |
| 7 | Fan |
| 8 | Tushar MC |
+---------------+-----------------+
4)现在,我创建增量追加作业并执行它:
sqoop job --create appendJobs12 \n-- import \n--connect jdbc:mysql://localhost/practice \n--username root \n--password cloudera \n--table departments_demo \n-m 1 \n--target-dir /departments \n--incremental append \n--merge-key department_id \n--check-column department_id \n--last-value 0
sqoop job --exec appendJobs12
5)即使我使用了合并键概念,我也可以在hdfs目录中看到两个部分文件.
[cloudera@quickstart ~]$hadoop fs -ls /departments
Found 3 items
-rw-r--r-- 1 cloudera supergroup 0 2018-10-04 00:31 /departments/_SUCCESS
-rw-r--r-- 1 cloudera supergroup 60 2018-10-04 00:31 /departments/part-m-00000
-rw-r--r-- 1 cloudera cloudera 67 2018-10-04 00:37 /departments/part-m-00001
当我显示数据时,如下所示:
[cloudera@quickstart ~]$hadoop fs -cat /departments/part-m-00000
2,Fitness
3,Footwear
4,Apparel
5,Golf
6,Outdoors
7,Fan Shop
[cloudera@quickstart ~]$hadoop fs -cat /departments/part-m-00001
2,Fitness
3,Footwear
4,Apparel
5,Golf
6,Outdoors
7,Fan
8, Tushar MC
其中一个零件文件包含初始数据,第二个零件文件包含更新的数据.谁能告诉我我要去哪里错了,因为我无法使用更新的数据集获得一个零件文件.提前致谢