2013-02-04 3 views
3

sqoop을 사용하여 MySQL에서 1 TB 테이블을 HDFS로 가져 오려고했습니다. 사용되는 명령이었다 경계 발스 쿼리를 실행 한 후작업 제한 시간 때문에 Sqoop 가져 오기 작업이 실패합니다

sqoop import --connect jdbc:mysql://xx.xx.xxx.xx/MyDB --username myuser --password mypass --table mytable --split-by rowkey -m 14

는 모든 맵퍼는 시작하지만 잠시 후, 작업으로 인해 타임 아웃 (1천2백초)에 살해. 각 매퍼에서 실행되는 select 쿼리를 실행하는 데 걸리는 시간이 제한 시간 (sqoop에서는 1200 초인 것처럼 보임)보다 많은 시간이 걸리기 때문입니다. 따라서 상태를보고하지 못하고 작업이 연속적으로 종료됩니다. (나는 또한 100GB 데이터 세트를 시도했지만 여러 매퍼의 시간 초과로 인해 여전히 실패했습니다.) 단일 매퍼 가져 오기의 경우 필터링 된 결과 세트가 필요 없으므로 정상적으로 작동합니다. sqoop에서 여러 매퍼를 사용하면서지도 작업 타임 아웃을 무시할 수있는 방법이 있습니까 (0 또는 매우 높은 값으로 설정하십시오)?

답변

0

Sqoop은 상태를 전송하기 위해 특수 스레드를 사용하여지도 작업이 jobtracker에 의해 종료되지 않도록합니다. 나는 당신의 문제를 더 깊이 탐구하는 데 관심이있을 것입니다. 지도 작업 로그와 테이블 스키마 중 하나 인 sqoop 로그를 공유 하시겠습니까?

Jarcec

+4

이 나를 위해 문제를 해결 (일시적으로) : Sqoop을 가져 오기 -D mapred.task.timeout = 0 --connect JDBC : mysql을 : //xx.xx.xxx.xx/MyDB --username myuser --password mypass --table mytable --split-by rowkey -m 14 timeout 매개 변수를 "-D"인수로 추가해야했습니다. 답장을 보내 주셔서 감사 합니다만, sqoop은 여러분이 말한 것처럼 상태를 전송하는 스레딩 메커니즘을 가지고 있어야합니다. 왜 이런 일이 일어 났는지 궁금합니다. 또는 내 테이블에 인덱스가 없기 때문에 쿼리가 예상보다 많은 시간이 걸릴 수 있습니다. –