2016-07-08 2 views
0

나는 항상 새로운 레코드로 업데이트되는 테이블 A를 가지고있다. 나는 2:00 PM CT (소스 테이블 A는 5M 레코드를 가짐)에서 sqoop은 오후 4:00 CT (테이블 A는 5.5M 레코드를 가짐)에서 끝나는 것처럼 테이블 A에서 HDFS로 레코드를 스퀘어하려고합니다. 내 질문은sqoop은 초기에 레코드를 추출 할 것인가 아니면 sqoop이 실행 중일 때 테이블에 레코드를 추가 할 것인가?

  • 대상 또는 5.5M에 5M 레코드가 있습니까?

답변

1

documentation에 따르면, Sqoop은 read committed transaction isolation을 사용합니다. 따라서 Sqoop이 수행 한 (하나 이상의) SELECT 쿼리가 실행되면 "선택된"레코드가 하이브에 삽입 될 레코드가됩니다 (태그로 인해 하이브로 데이터를 가져 오는 것으로 가정합니다). 당신은 질문에서 사용했습니다). 따라서 최종적으로 가져올 레코드 수 (5M 또는 5.5M 레코드)를 결정하는 것은 전체 가져 오기 프로세스에 걸리는 총 시간이 아닌 SELECT 쿼리의 실행입니다.

사용하려고하는 매퍼의 수 (매개 변수 --num-mappers)를 지정하여 가져 오기 프로세스의 병렬 처리를 제어 할 수 있습니다. 각 매퍼는 독립적 인 SELECT 쿼리를 수행합니다.

또한 가져 오기 프로세스가 완료된 후 데이터베이스에 추가 된 새 데이터를 검색하기 위해 incremental imports을 사용할 수도 있습니다. 또한 free-form queries을 사용하여 데이터베이스로 가져올 데이터 양을보다 세밀하게 제어 할 수 있습니다.

관련 문제