인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

민수님의 프로필 이미지

작성한 질문수

실리콘밸리 엔지니어에게 배우는 파이썬 아파치 스파크

Broadcast(브로드캐스트)의 소개와 브로드캐스트 조인 방법 알아보기

BroadCast 지원 가능 메모리 문의

해결된 질문

작성

·

42

0

안녕하세요.

최근부터 Spark 강의를 듣고있는데 이해하기 쉽게 설명 해주셔서 감사합니다.

 

Broadcast에 대해서 설명을 해주셨는데 Join 대상이 큰 빅데이터 이거나, meta에 큰 데이터를 담을 경우에는 Broadcast를 사용 하지 못한다고 설명해주셨는데요, 혹시 Broadcast에서 지원할 수 있는 최대 메모리가 있을까요?

 

그리고 Join대상 데이터가 A, B, C, D ID로 이뤄진 TB 사이즈의 테이블이라고 했을 경우 meta에 A, B, C, D ID에 대한 Name을 Brodcast할 경우 위 테이블과 맵핑하여 사용이 가능할까요?

답변 2

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 민수님,

일단 첫번째 질문에 대한 답변으로는 Spark에서 broadcast 변수를 사용할 때, 최대 메모리 크기는 Spark의 executor 메모리 및 드라이버 메모리 설정에 따라 달라집니다. 하지만 일반적으로 몇 가지 고려해야 할 사항이 있습니다.

  • 기본적으로 spark.driver.maxResultSize 설정에 영향을 받음

    • 기본값은 1GB이며, 더 큰 데이터를 브로드캐스트하면 OOM(Out of Memory) 에러가 발생할 수 있음.

    • 필요하면 값을 늘릴 수 있음 (spark.driver.maxResultSize=4g 등).

  • spark.sql.autoBroadcastJoinThreshold

    • 기본적으로 10MB (10485760 바이트) 이상인 경우 자동 브로드캐스트가 비활성화됨.

    • 이 값을 늘리면 더 큰 데이터를 브로드캐스트할 수 있지만, 너무 크면 실행 성능이 저하될 수 있음.

  • Executor 메모리 제약

    • 브로드캐스트 데이터는 각 Executor에서 메모리에 유지되므로, 개별 Executor의 메모리 크기에 따라 제한됨.

두번째 질문에 대한 대답으로는 저희가 meta를 dim_table이라 할 경우 ...

  • 브로드캐스트 가능: dim_table이 작을 경우 (보통 100MB 이하).

  • 브로드캐스트 불가능: dim_table이 크거나, TB 크기의 테이블에서 여러 컬럼과 매핑할 경우.

  • 대안: Shuffle Join, Partition 조정, Bloom Filter 등을 활용하시면 될 듯 합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 민수님.

Spark에서의 Broadcast는 작은 크기의 데이터를 클러스터의 모든 노드에 배포하여 병렬 작업 시 데이터 접근을 빠르게 하기 위한 메커니즘입니다. 일반적으로 Broadcast는 작은 데이터셋, 즉 수 메가바이트(MB) 이내의 데이터를 목표로 설계되어 있습니다. 그 이상 큰 데이터를 Broadcast하게 되면 클러스터의 각 워커 노드로 데이터를 보내는 데 있어서 네트워크 부담이 크고, 성능 저하가 발생할 수 있습니다.

Broadcast 메모리 제한

  1. 메모리 제약: Broadcast의 최대 메모리 용량은 노드의 가용 메모리에 따라 다르며, 일반적으로 수 MB 단위를 넘지 않는 것이 좋습니다. Spark의 공식 문서에서는 명확한 값이 명시되어 있진 않지만, 노드의 메모리에 과부하를 주지 않도록 주의하는 것이 중요합니다.

  2. 실제 작동 방식: Spark는 드라이버 노드에서 Broadcast 객체를 생성하고, 이를 각 워커 노드에 전달합니다. 따라서 하나의 노드라도 과부하에 걸릴 수 있는 크기를 broadcast하려 한다면 성능 저하 및 실패 위험이 있습니다.

Join 대상의 큰 데이터

  • Join 대상 데이터가 크다면 A, B, C, D와 같은 ID에 대해 작은 루크업 테이블을 사용하여 이름 매핑 데이터를 Broadcast하는 것이 일반적입니다. 예를 들어, ID와의 맵핑 정보가 A, B, C, D와 같은 이름이 포함된 작은 테이블로 제한된다면 Broadcast를 활용하여 큰 dataset과 빠르게 조인할 수 있습니다. 이 방식은 매우 효율적이며 병렬 처리 시 큰 성능이 나타납니다.

참고할 만한 유사 게시물

  • 대용량 데이터 Join에서는 대용량 데이터 상황에서의 Join 최적화 방법과 관련된 정보를 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

민수님의 프로필 이미지

작성한 질문수

질문하기