【问题标题】:Execution time increases with increasing map jobs执行时间随着地图作业的增加而增加
【发布时间】:2013-04-29 16:57:57
【问题描述】:

我正在尝试使用 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

问题是当没有增加地图时执行时间会增加。由于并行处理是随着映射器的增加而完成的,所以理想情况下执行时间实际上应该减少。

这是模式

地图数量时间(秒) 1 16 2 20 4 29 8 51 10 55 16 82 25 122


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

【问题讨论】:

  • 有多少数据?
  • 它是一个测试环境,因此大约有 25k 条记录的小数据集,大小约为 15MB。
  • 这基本上是零数据,因此您几乎肯定会被开销和数据库抖动所淹没。

标签: hadoop mapreduce hbase sqoop


【解决方案1】:

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

【讨论】:

  • 是的,我正在测试环境中使用小型数据集进行测试,大约有 25k 条记录。而且我有 2 个数据节点,每个都有 HBase 区域服务器,所以这意味着具有 2 个映射的过程应该比单个映射更快,但这不是场景。
  • 两个地图并不意味着它们被发送到两个服务器,设置 2 个地图作业的 4 秒差异是微不足道的。特别是因为我不确定这是否是一个仅限地图的工作(即减速器中可能有同步)。请注意,这里无关紧要的是关于 hadoop 的设计目的。设置多个 map(和 reduce)作业的开销被无法放入内存或单个服务器的 large 数据集所获得的并行性所抵消。
  • 有道理。这种微不足道的延迟可能是因为拆分工作的开销。希望在处理大型数据集时这个问题会消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多