如果在使用--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
首次对表进行分区?
答案 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