Yann Moisan
Yann Moisan

Follow

May 29, 2018 · 9 min read

Spark is the core component of Teads’s Machine Learning stack. We use it for many ML applications, from ad performance predictions to user Look-alike Modeling. 우리는 또한 카산드라에 데이터를로드 스 테이블 변환에 크로스 디바이스 세그먼트 확장 또는 마루와 같은 집중적 인 작업을 처리하기 위해 스파크를 사용합니다.스파크 작업 우리는 정기적으로 메모리,디스크 또는 프로세서 측면에서 클러스터 리소스의 한계에 도달합니다. 스케일 아웃은 문제를 다시 밀어 그래서 우리는 우리의 손을 더러운 얻을 수있다.다음은 커버,더 나은 성능과 청소기 스파크 코드를 달성하기 위해 스파크 2.2.0 에 대한 모범 사례 및 최적화 팁의 모음입니다:텅스텐,실행 계획 분석,데이터 관리(캐싱,방송),클라우드 관련 최적화를 활용하는 방법.업데이트 07/12/2018,또한 문제 해결 트릭과 외부 데이터 소스 관리를 다루는 두 번째 부분을 참조하십시오.그것은 상식이지만 코드 성능을 향상시키는 가장 좋은 방법은 스파크의 강점을 포용하는 것입니다. 그들 중 하나는 텅스텐입니다.1.5 버전 이후,텅스텐은 런타임에 바이트 코드에서 스파크 작업을 다시 작성하여 향상된 성능을 제공하는 스파크 구성 요소입니다. 텅스텐 가상 기능을 억제하고 작업 중앙 처리 장치 및 메모리 효율성에 초점을 맞춤으로써 베어 메탈 성능에 가까운 활용합니다.

을 만들 대부분 텅스텐의는 다음과 같은 사항에 유의해야 합니다.

사용 데이터 집합 구조를 보다는 오히려 DataFrames

를 확인 우리의 코드 같은 혜택을 가능한 많은 텅스텐 최적화는 우리가 사용하는 기본 데이터베이스 API 를 가진 스칼라(대신 RDD).데이터 집합은 관계형(데이터 프레임)과 기능적(데이터 프레임)변환이 혼합 된 두 세계의 최고를 제공합니다. 더 나은 오류 처리 및 훨씬 더 읽기 쉬운 단위 테스트와 함께 유형 안전성을 추가합니다.이 패키지에는 주 프로그램 바이너리와 미리 컴파일된 대수 및 자동 로드 모듈이 들어 있습니다. 프레임리스 이 제한을 해결할 수있는 유망한 솔루션입니다.이 함수를 사용하는 것은 역직렬화를 의미하여 클래식 스칼라에서 데이터를 처리 한 다음 다시 직렬화합니다. 이미 많은 기능이 있으며 새로운 기능이 정기적으로 추가됩니다.그러나 적어도 코드가 변경되면 향후 성능 문제를 방지 할 수 있습니다. 모든 것이 스파크의 측면에서 수행 될 때 또한,내장 스파크 씨티 함수를 사용하여 우리는 우리의 테스트 노력을 줄일 수 있습니다. 이 기능은 더 나은 성능을 달성 할 가능성이 없습니다.스파크와 더 일반적으로 분산 컴퓨팅에서,네트워크를 통해 데이터를 전송(스파크 일명 셔플)가장 비싼 작업입니다. 셔플은 디스크 입출력,데이터 직렬화 및 네트워크 입출력을 포함하기 때문에 비용이 많이 듭니다.이 점을 고려할 때 단계 수를 줄이는 것은 작업을 최적화하는 분명한 방법입니다. 우리는 사용.작업에 관련된 모든 단계(단계)를 자세히 설명하는 실행 계획을 표시하려면(참)명령을 설명하십시오. 다음은 예제입니다:

Simple execution plan example

The Directed Acyclic Graph (DAG) in Spark UI can also be used to visualize the task repartition in each stage.2015 년 12 월 1 일(금)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 12 월 1 일(일)~2015 년 최적화는 데이터와 그 처리에 대한 우리의 지식(포함. 비즈니스 로직). 2.2.0 에서 실행 계획을 최적화하기 위해”정비사”규칙을 사용한다는 것입니다.많은 다른 사람들처럼,우리는 방송 조인 선택을 넘어 비용 기반 최적화 엔진을 기다리고 있었다. 지금은 2.3.0 에서 사용할 수 보인다,우리는 그것을 볼 수있을 것이다.우리는 실행 계획을 조사하여 작업 성능을 개선하는 방법을 보았지만 데이터 측면에서 가능한 많은 개선 사항이 있습니다.모든 것이 괜찮은지 신속하게 확인하기 위해 각 작업의 실행 기간을 검토하고 이기종 프로세스 시간을 찾습니다. 작업 중 하나가 다른 작업보다 훨씬 느린 경우 전체 작업 기간을 연장하고 가장 빠른 실행자의 리소스를 낭비합니다.최소,최대 및 중간 지속 시간을 확인하는 것은 매우 쉽습니다. 다음은 균형 잡힌 예입니다.

답글 남기기

이메일 주소는 공개되지 않습니다.