[HADOOP] 내 BroadcastHashJoin이 Spark의 ShuffledHashJoin보다 느린 이유
HADOOP내 BroadcastHashJoin이 Spark의 ShuffledHashJoin보다 느린 이유
Spark에서 javaHiveContext를 사용하여 조인을 실행합니다.
큰 테이블은 1,76Gb이고 100 백만개의 기록을 가지고 있습니다.
두 번째 테이블은 273Mb이고 10 백만 레코드가 있습니다.
나는 JavaSchemaRDD를 얻었고 count ()를 호출했다.
String query="select attribute7,count(*) from ft,dt where ft.chiavedt=dt.chiavedt group by attribute7";
JavaSchemaRDD rdd=sqlContext.sql(query);
System.out.println("count="+rdd.count());
broadcastHashJoin (SET spark.sql.autoBroadcastJoinThreshold = 290000000)을 강제 실행하고 8 코어와 20Gb 메모리가있는 5 노드에서 5 개의 실행 프로그램을 사용하면 100 초 후에 실행됩니다. 내가 강제로 방송하지 않으면 30 초 후에 실행됩니다.
N.B. 테이블은 쪽모이 세공 파일로 저장됩니다.
해결법
-
==============================
1.문제의 원인은 대부분 방송 비용입니다. 일을 간단하게 만들려면 큰 RDD에 1800MB, 작은 RDD에 300MB가 있다고 가정하십시오. 5 명의 실행 프로그램을 가정하고 이전 파티션을 작성하지 않은 경우 모든 데이터 중 5 분의 1이 이미 올바른 시스템에 있어야합니다. 표준 조인의 경우에는 1700MB가 남았습니다.
문제의 원인은 대부분 방송 비용입니다. 일을 간단하게 만들려면 큰 RDD에 1800MB, 작은 RDD에 300MB가 있다고 가정하십시오. 5 명의 실행 프로그램을 가정하고 이전 파티션을 작성하지 않은 경우 모든 데이터 중 5 분의 1이 이미 올바른 시스템에 있어야합니다. 표준 조인의 경우에는 1700MB가 남았습니다.
브로드 캐스트 조인의 경우 더 작은 RDD가 모든 노드로 전송되어야합니다. 그것은 1500MB의 데이터가 전송된다는 것을 의미합니다. 필요한 통신을 드라이버에 추가하면 훨씬 더 비싼 방법으로 비슷한 양의 데이터를 이동해야합니다. 브로드 캐스팅 된 데이터는 먼저 수집되어야하며 이후에는 모든 작업자에게 전달 될 수 있습니다.
from https://stackoverflow.com/questions/34139049/why-my-broadcasthashjoin-is-slower-than-shuffledhashjoin-in-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] OOZIE : global job-xml에서 참조 된 파일에 정의 된 속성이 workflow.xml에 표시되지 않습니다. (0) | 2019.05.30 |
---|---|
[HADOOP] Sqoop - 데이터 분할 (0) | 2019.05.30 |
[HADOOP] Apache Spark에서 정확한 중간 값을 어떻게 계산합니까? (0) | 2019.05.30 |
[HADOOP] hadoop의 -libjars 문제 (0) | 2019.05.30 |
[HADOOP] 멀티 문자 구분 기호로 하이브 테이블 만들기 (0) | 2019.05.30 |