Sqoop 是否使用 Reducer?

Does Sqoop use Reducer?

如果在 select 查询中执行 join/aggregation,Sqoop 运行 reducer 是否使用 --query 参数?或者在 Sqoop 中是否存在映射器和缩减器 运行?

Documentation 指定每个映射任务都需要执行查询的副本,结果按 Sqoop 推断的边界条件进行分区。

$ sqoop import \
  --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
  --split-by a.id --target-dir /user/foo/joinresults

在上面的示例中,JOIN 是如何在 table 首先使用 $CONDITIONS 进行分区的地方发生的?

Join/Computation 将在 RDBMS 上执行,其结果将由 mapper 用于传输到 HDFS。 不涉及减速器

使用--query参数,您需要指定--split-by参数与应该用于切片的列 您的数据进入多个并行地图​​任务。该参数通常自动默认为 main table

的主键

$CONDITIONS 将自动用指定要传输的数据切片的生成条件替换此占位符

在您的特定命令中,sqoop 不使用减速器。 但是在某些情况下,sqoop 会使用 reducer。检查以下取自 document here.

的示例
$ sqoop export \
    -Dmapred.reduce.tasks=2
    -Dpgbulkload.bin="/usr/local/bin/pg_bulkload" \
    -Dpgbulkload.input.field.delim=$'\t' \
    -Dpgbulkload.check.constraints="YES" \
    -Dpgbulkload.parse.errors="INFINITE" \
    -Dpgbulkload.duplicate.errors="INFINITE" \
    --connect jdbc:postgresql://pgsql.example.net:5432/sqooptest \
    --connection-manager org.apache.sqoop.manager.PGBulkloadManager \
    --table test --username sqooptest --export-dir=/test -m 2