我的Sqoop导入仅适用于1个地图任务( - m 1)而不是更多。
这是有效的:
sqoop import --connect jdbc:mysql://localhost/databaseY --username root --password PASSWORD --table tableX --target-dir /tmp/databaseY --as-textfile -m 1
这不是:
sqoop import --connect jdbc:mysql://localhost/databaseY --username root --password PASSWORD --table tableX --target-dir /tmp/databaseY --as-textfile -m 3
我的群集是AWS上的3个节点。
我在配置过程中遗漏了什么?
----编辑解决方案---- 问题是localhost。我用IP地址改了它,工作正常。
答案 0 :(得分:1)
由于sqoop docs足以说明这一点,
执行并行导入时,Sqoop需要一个可以分割工作负载的标准。 Sqoop使用拆分列来拆分工作负载。默认情况下, Sqoop将识别表中的主键列(如果存在)并将其用作拆分列。从数据库和映射中检索拆分列的低值和高值任务在总范围内的大小均匀的组件上运行。例如,如果您的表的主键列id为最小值为0且最大值为1000,并且Sqoop被指示使用4个任务,则Sqoop将运行四个进程,每个进程执行{{{{ 1}},(lo,hi)在不同的任务中设置为(0,250),(250,500),(500,750)和(750,1001)。
如果表没有定义主键并且未提供
SELECT * FROM sometable WHERE id >= lo AND id < hi
,则导入将失败,除非使用--split-by <col>
选项将映射器的数量显式设置为1。
(重点是我的)
修改:我之前关于相关主题的answer也会对此有所帮助。