我正在尝试使用sqoop导入将一些数据从MySQL迁移到HBase。这是我正在使用的命令:

sqoop import --connect jdbc:mysql://hostname/database --username username -P
--query 'SELECT * FROM logs WHERE $CONDITIONS' --split-by log_id -m 4
--hbase-table logs --column-family cf --hbase-create-table

问题是,当不增加任何映射时,执行时间就会增加。由于并行处理是随着映射器的增加而完成的,因此理想情况下,执行时间实际上应该减少。

这是模式

map 时间(秒)
1 16
2 20
4 29
8 51
10 55
16 82
25122


从上方可以看到,只有一个映射器时,花费的时间最少。知道是什么原因吗?任何帮助将不胜感激。
我的集群由一个名称节点和两个数据节点组成。

最佳答案

同时运行多个查询时,可能是mySQL上的负载。同样,从总运行时间(16秒)来看,您正在导入的数据非常小,因此添加更多的映射会增加开销,但是每个映射只能处理一个小的数据段,因此开销不会被抵消。最后,您没有对集群说太多(我想这是一个小测试),因此,如果您分配的映射器比插槽多,那么映射器将等到有可用插槽时才增加时间

关于hadoop - 执行时间随着 map 工作的增加而增加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16284172/

10-16 03:01