我试图理解sqoop作业中默认最大映射器背后的原因,并且我们可以在sqoop作业中设置四个以上的映射器以实现更多的并行性.
如果在拆分中使用整数列,则默认的映射器数为4.强烈建议您始终使用整数列而不是字符串/ char/Text列.请参阅此处的代码以获取更多解释.https://github.com/apache/sqoop/blob/660f3e8ad07758aabf0a9b6ede3accdfac5fb1be/src/java/org/apache/sqoop/mapreduce/db/TextSplitter.java#L100
是的,您可以通过指定-m来增加/减少并行度
来自Sqoop指南 Sqoop从大多数数据库源并行导入数据.您可以使用-m或--num-mappers参数指定要用于执行导入的映射任务(并行进程)的数量.这些参数中的每一个都采用整数值,该值对应于要使用的并行度.默认情况下,使用四个任务.某些数据库可能会通过将此值增加到8或16来提高性能.不要将并行度增加到大于MapReduce群集中可用的并行度; 任务将以串行方式运行,并可能增加执行导入所需的时间.同样,不要将并行度提高到数据库可以合理支持的程度.将100个并发客户端连接到数据库可能会将数据库服务器上的负载增加到性能受损的程度.
执行并行导入时,Sqoop需要一个可以分割工作负载的标准.Sqoop使用拆分列来分割工作负载.默认情况下,Sqoop将识别表中的主键列(如果存在)并将其用作拆分列.从数据库中检索拆分列的低值和高值,并且映射任务在总范围的大小均匀的组件上运行.例如,如果您的表的主键列id为最小值为0且最大值为1000,并且Sqoop被指示使用4个任务,则Sqoop将运行四个进程,每个进程执行SELECT*形式的SQL语句FROM sometable WHERE id> = lo AND id <hi,其中(lo,hi)在不同的任务中设置为(0,250),(250,500),(500,750)和(750,1001).
如果主键的实际值在其范围内不均匀分布,则可能导致任务不平衡.您应该使用--split-by参数明确选择不同的列.例如,--split-by employee_id.Sqoop目前无法拆分多列索引.如果表没有索引列,或者具有多列键,则还必须手动选择拆分列.
| 归档时间: |
|
| 查看次数: |
4955 次 |
| 最近记录: |