Database Sqoop是否使用减速机?
如果在使用Database Sqoop是否使用减速机?,database,hadoop,mapreduce,sqoop,Database,Hadoop,Mapreduce,Sqoop,如果在使用--query参数给出的select查询中执行了连接/聚合,Sqoop是否运行reducer?或者在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 /
--query
参数给出的select查询中执行了连接/聚合,Sqoop是否运行reducer?或者在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
在上面的示例中,当首先使用
$CONDITIONS
对表进行分区时,联接是如何发生的?联接/计算将在RDBMS上执行,其结果将由映射器用于传输到HDFS。
不涉及减速器
使用--query
参数,您需要指定--split by
参数以及应该用于切片的列
将数据转换为多个并行映射任务。此参数通常自动默认为
主表的主键
$CONDITIONS将自动用生成的条件替换此占位符,指定要传输的数据片在特定命令中,sqoop
不使用reducer。
然而,在某些情况下,当sqoop
使用reducer
时。检查以下示例,这些示例取自
看起来像是一个采访问题。那么,这是否意味着在数据库执行连接之后,每个映射器使用--split by
对数据进行分区?如果是这种情况,那么查询执行将是瓶颈,只有数据传输到Hadoop将是并行的。你可能会在这里得到答案是的,但是,只有当要导出的数据被切片并准备好发送到HDFS时,映射程序才会出现。这个过程必须等待DB执行聚合
。那么,这是唯一的情况还是还有其他情况?您一定已经意识到sqoop是一组工具,这里sqoop的工作方式由连接器定义。总是可以编写一个新的连接器,它的生命周期中有一个减速器。到目前为止,我知道这是一个捆绑的标准功能,但自定义代码总是可以带来一个减速器,这取决于设计。
$ 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