【发布时间】:2017-07-14 10:17:18
【问题描述】:
如果数据有偏差,我怀疑如何将数据分区为部分文件。如果可能,请帮助我澄清这一点。
假设这是我的department 表,以department_id 作为主键。
mysql> select * from departments;
2 Fitness
3 Footwear
4 Apparel
5 Golf
6 Outdoors
7 Fan Shop
如果我通过在导入命令中提及-m 1 来使用sqoop import,我知道我只会生成一个包含所有记录的零件文件。
现在我在没有指定任何映射器的情况下运行命令。所以默认情况下它应该需要 4 个映射器,它在 HDFS 中创建了 4 个部分文件。下面是每个部分文件的记录是如何分布的。
[cloudera@centsosdemo ~]$ hadoop fs -cat /user/cloudera/departments/part-m-00000
2,Fitness
3,Footwear
[cloudera@centsosdemo ~]$ hadoop fs -cat /user/cloudera/departments/part-m-00001
4,Apparel
[cloudera@centsosdemo ~]$ hadoop fs -cat /user/cloudera/departments/part-m-00002
5,Golf
[cloudera@centsosdemo ~]$ hadoop fs -cat /user/cloudera/departments/part-m-00003
6,Outdoors
7,Fan Shop
根据 BoundingValsQuery,默认使用 Min(department_id)=2、Max(department_id)=8 和 4 个映射器。
计算后,每个mapper应该得到(8-2)/4=1.5条记录。
这里我不知道如何分发数据。我不明白如何在 part-m-00000 中有 2 条记录,而在 part-m-00001、part-m-00002 中只有一条,在 part-m-00003 中又是两条。
【问题讨论】:
-
如果你想有人帮助你,你应该更好地解释你想要的。你至少应该解释一下你想要达到的目标。
-
我想知道数据是如何在部分文件之间拆分的,即哪条记录将转到哪个部分文件。
-
Sqoop 为每个映射器创建 sql 查询。您可以从所有 Workers 节点检查 SQL。您可以在您的 sql server 上运行所有 sql 查询并共享结果吗?
-
@SandeepSingh 首先我使用的是 mysql。基本上我知道 sqoop 为每个映射器创建 sql 查询。但我想知道如何准备查询以及如何确定每个映射器的异常值。
-
@ElmerDantas- 实际上我想看看在你的情况下查询是如何形成的,因为数据中的最大值是 7,但你已经分配了 8
标签: hadoop sqoop hadoop-partitioning