Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/
2.9控制并行
问题
默认情况下, Sqoop 使用四个并发映射任务将数据传输到 Hadoop。传输较大的表时使用更多的并发任务这样应该可以减少传输所需的时间。
当想要灵活的改变map任务数量要先对每个人物的基础信息了解。
解决方案
使用 --num-mappers 参数在想要使用一个非默认数量的maper。举例来说,使用10个并行任务,使用以下的sqoop命令:
sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--num-mappers 10
讨论
参数--nun-mappers作为一个提示服务。在绝大多数情况下,你设置一个特地数量的mappers数量,当并不能保证实际就使用这个值。
如果你的数据集合很小,sqoop还是会使用很小的mappers数。如,如果你传输一个只有四行数据的数据集,但是你的--num-mappers数设置为10个,
那么仍然只有4个mapper被使用,由于另外6个mappers没有任何数据要传输。
控制sqoop传输数据的并行数是控制数据载入数据库的负载的主要点,使用更多的mapper数,会导致更高数量的并行数量传输任务,这样可以让作业更快的完成。
然而,这也会增加数据库的负荷,由于sqoop将会执行更多的查询,这也许会对其他的查询造成影响,不利的是会对生产环境的造成影响
提升mapper的数量并不总会提高任务的完成速度。然而,提高mapper数量,是让数据库性能饱和的关键点。提高mapper数量超出饱和点将导致不能更快的处理作业。
实际上相反,数据库将会花更多时间在上下文切换上,对mapper数量的优化上取决于很多变量。需要考虑数据库的类型,使用的硬件,及数据需要服务的其他请求。
没有针对所有场景的最佳的mapper数,相反,是鼓励通过尝试发现环境中最佳并行数。从一个很小的mapper数开始慢慢增长,而不是从一个很大的数开始是一个很好的方法。
网友评论