Sqoop使用Reducer吗?

时间:2018-03-27 11:15:55

标签: database hadoop mapreduce sqoop

如果在使用--query参数给出的select查询中执行了连接/聚合,Sqoop是否会运行reducer?或者在Sqoop中是否存在映射器和缩减器都运行的情况?

Documentation指定每个map任务都需要执行查询的副本,结果由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如何使用$CONDITIONS首次对表进行分区?

2 个答案:

答案 0 :(得分:1)

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

使用--query参数,您需要使用应用于切片的列指定--split-by参数 将您的数据分成多个并行映射任务。此参数通常自动默认为 主表的主键

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

答案 1 :(得分:0)

在您的特定命令中,sqoop不使用reducer。 但有时会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