2017-11-05 10 views
0

Redshift 테이블에서 작동하는 Spark 스트리밍 코드에 많은 테이블, 삽입 및 업데이트 만들기가 있습니다. Spark-redshift-preview-3.0.0 jar와 scala 2.11.8을 사용하고 있습니다. 스트리밍 작업으로 Redshift에서 5000 행을 삽입/업데이트하는 데 20 분 이상 소요됩니다. 이는 스파크 마이크로 배치 창을 초과하고 시스템이 불안정 해지는 것입니다.Spark Streaming Redshift 성능 문제

Spark Streaming 작업에서 내 Redshift 쿼리의 속도를 높이려면 어떤 구성 매개 변수를 설정해야합니까? 5 분마다 최소한 10K 행을 삽입하고 업데이트해야합니다.

답변

2

너무 느린 이유는 당신의 스파크 코드가 명령을 생성하는 것입니다 같은

insert into table ... 
update table ... 
delete from table ... 
데이터의 낮은 볼륨의

(때때로 데이터의 몇 행)은이 방법을 사용하려면 OK이지만, 같은 더 큰 당신은 항상해야 볼륨 : S3에

  1. 쓰기 데이터, 바람직하게는 1 기가 바이트 파일, 바람직 gzip으로 압축에 1메가바이트에 최대 청크.
  2. redshift copy 명령을 실행하여 해당 s3 데이터를 적색 변경 "준비"영역으로로드하십시오.
  3. redshift sql을 실행하여 준비 데이터를 대상 테이블에 병합하십시오.

이 방법을 사용하면 개별 삽입/업데이트/삭제보다 수백 배 효율적일 수 있습니다.

몇 분마다이 배치 업데이트를 실행하면 적색 변경 데이터 대기 시간을 낮게 유지할 수 있습니다.

+0

고마워요! 업데이트는 인서트에 따라 달라 지므로 S3 복사를 수행하고 redshift SQL을 실행해야한다면 어떻게 할 수 있습니까?이 모든 것을 내 스트리밍 블록 내에서 (즉 forEachRDD 블록 내에서) 할 수 있습니까? –