我正在尝试将更新的记录导入 HDFS 中。早些时候,我在 HDFS 中有三个部分的文件。当我运行下面的工具时,它给出了需要合并密钥的错误。
sqoop import --table employee --username training --password training --connect jdbc:mysql://localhost/loudacre --incremental lastmodified --check-column modified --last-value '2016-08-22 19:02:41'
但是,当我使用合并键选项时,我只能看到包含所有记录的部分文件。
小智 6
虽然是一篇很老的帖子,但我正在为有同样问题的人添加要点。
@Deepak_Spark_Beginner:如果错误显示“需要合并密钥”,则意味着“--target-dir”已经存在。由于您没有在 Sqoop 命令中指定此值,因此将选择默认值,即表名“employee”。这意味着,名为员工的目录已经存在。
接下来,当您在增量方法期间指定合并键时,会发生以下操作序列,
8/10/30 13:27:52 INFO mapreduce.Job:映射 0% 减少 0%
18/10/30 13:27:58 INFO mapreduce.Job:映射 67% 减少 0%
18/10/30 13:27:59 INFO mapreduce.Job:映射 100%减少 0%
18/10/30 13:28:08 INFO mapreduce.Job:映射 0% 减少 0%
18/10/30 13:28:14 INFO mapreduce.Job:映射 17% 减少 0%
18/10/30 13:28:16 INFO mapreduce.Job:映射 100% 减少 0%
18/10/30 13:28:20 INFO mapreduce.Job:映射 100%减少 100%
由于关键匹配必须扫描完整数据集的明显原因,需要减速器作业。另外,您可以通过文件名来验证相同的内容,其中包含一个表示减速器输出的“r”。
这就是为什么您在输出中只看到 1 个文件的原因。
你评论说“我的意思只是从数据库获取修改后的字段并使用lastmodified更新HDFS”。嗯,这就是发生的事情。如果检查输出,就会发现执行已从数据库获取修改后的字段并在 HDFS 中更新。唯一的区别是输出被合并到一个文件中。
| 归档时间: |
|
| 查看次数: |
4569 次 |
| 最近记录: |