해결된 질문
작성
·
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 인턴입니다. 민수님.
Spark에서의 Broadcast는 작은 크기의 데이터를 클러스터의 모든 노드에 배포하여 병렬 작업 시 데이터 접근을 빠르게 하기 위한 메커니즘입니다. 일반적으로 Broadcast는 작은 데이터셋, 즉 수 메가바이트(MB) 이내의 데이터를 목표로 설계되어 있습니다. 그 이상 큰 데이터를 Broadcast하게 되면 클러스터의 각 워커 노드로 데이터를 보내는 데 있어서 네트워크 부담이 크고, 성능 저하가 발생할 수 있습니다.
메모리 제약: Broadcast의 최대 메모리 용량은 노드의 가용 메모리에 따라 다르며, 일반적으로 수 MB 단위를 넘지 않는 것이 좋습니다. Spark의 공식 문서에서는 명확한 값이 명시되어 있진 않지만, 노드의 메모리에 과부하를 주지 않도록 주의하는 것이 중요합니다.
실제 작동 방식: Spark는 드라이버 노드에서 Broadcast 객체를 생성하고, 이를 각 워커 노드에 전달합니다. 따라서 하나의 노드라도 과부하에 걸릴 수 있는 크기를 broadcast하려 한다면 성능 저하 및 실패 위험이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.