如果在带有--query
参数的select查询中执行了连接/聚合,那么Sqoop是否运行还原器?或者,在Sqoop中是否存在映射器和减速器运行的情况?
文档指定每个映射任务都需要执行查询的副本,结果由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
对表进行分区的地方发生的
发布于 2018-03-28 00:51:49
连接/计算将在RDBMS上执行,其结果将被映射程序用来传输到HDFS。不涉及减速机
使用--query
参数时,需要使用列指定--split-by
参数,该列用于将数据切片为多个并行映射任务。此参数通常自动默认为主表的主键。
$CONDITIONS将自动替换此占位符,生成的条件指定要传输的数据片。
发布于 2018-03-28 11:54:54
在您的特定命令中,sqoop
不使用减缩器。但是,在某些情况下,sqoop
确实使用了reducer
。请检查从文件在这里获取的以下示例。
$ 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
https://stackoverflow.com/questions/49511479
复制