[HADOOP] 매퍼의 단일 출력에서 여러 감속기를 실행
HADOOP매퍼의 단일 출력에서 여러 감속기를 실행
map reduce를 사용하여 왼쪽 조인 기능을 구현하고 있습니다. 왼쪽에는 약 6 억 개의 레코드가 있고 오른쪽에는 약 2,300 만 개의 레코드가 있습니다. 매퍼에서 왼쪽 조인 조건에 사용 된 열을 사용하여 키를 만들고 키 값 출력을 매퍼에서 감속기로 전달합니다. 두 테이블의 값 수가 많은 매퍼 키가 거의 없기 때문에 성능 문제가 발생합니다 (예 : 각각 456789 및 78960). 다른 감속기가 작업을 마치더라도이 감속기는 더 오랜 시간 동안 계속 작동합니다. 성능을 향상시키기 위해 여러 리듀서가 매퍼의 동일한 키-값 출력에서 병렬로 작업 할 수있는 방법이 있습니까?
이것은 내가 최적화하려는 Hive 쿼리입니다.
select distinct
a.sequence,
a.fr_nbr,
b.to_nbr,
a.fr_radius,
a.fr_zip,
a.latitude as fr_latitude,
a.longitude as fr_longitude,
a.to_zip,
b.latitude as to_latitude,
b.longitude as to_longitude,
((2 * asin( sqrt( cos(radians(a.latitude)) * cos(radians(b.latitude)) * pow(sin(radians((a.longitude - b.longitude)/2)), 2) + pow(sin(radians((a.latitude - b.latitude)/2)), 2) ) )) * 6371 * 0.621371) as distance,
a.load_year,
a.load_month
from common.sb_p1 a LEFT JOIN common.sb__temp0u b
on a.to_zip=b.zip
and a.load_year=b.load_year
and a.load_month=b.load_month
where b.correction = 0
and a.fr_nbr <> b.to_nbr
and ((2 * asin( sqrt( cos(radians(a.latitude)) * cos(radians(b.latitude)) * pow(sin(radians((a.longitude - b.longitude)/2)), 2) + pow(sin(radians((a.latitude - b.latitude)/2)), 2) ) )) * 6371 * 0.621371 <= a.fr_radius)
다른 해결책도 인정 될 것이다.
해결법
-
==============================
1.UNION ALL을 사용하여 기울어 진 키를 분리하십시오.
UNION ALL을 사용하여 기울어 진 키를 분리하십시오.
select * from table1 a left join table2 b on a.key=b.key where a.key not in (456789,78960) union all select * from table1 a left join table2 b on a.key=b.key where a.key = 456789 union all select * from table1 a left join table2 b on a.key=b.key where a.key = 78960 ;
이러한 하위 쿼리는 병렬로 실행되며 기울어 진 키는 단일 감속기로 분배되지 않습니다.
-
==============================
2.이를 위해 HiveQL 사용을 고려할 수도 있습니다. 그것은 위에서 언급 한 것과 같은 상황을 의미하며 맵 감소 구현의 복잡성을 처리합니다.
이를 위해 HiveQL 사용을 고려할 수도 있습니다. 그것은 위에서 언급 한 것과 같은 상황을 의미하며 맵 감소 구현의 복잡성을 처리합니다.
from https://stackoverflow.com/questions/40095103/run-multiple-reducers-on-single-output-from-mapper by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop에서 글로벌 순차 번호 생성기를 공유하는 방법은 무엇입니까? (0) | 2019.09.16 |
---|---|
[HADOOP] Spark 애플리케이션을 실행하는 동안 java.lang.ClassNotFoundException 가져 오기 (0) | 2019.09.16 |
[HADOOP] 예상 org.apache.hadoop.io.Text를 해결하는 방법, mapreduce 작업에서 org.apache.hadoop.io.LongWritable을 받았습니다. (0) | 2019.09.16 |
[HADOOP] hdfs 파일에서 mapreduce를 실행하고 감속기 결과를 hbase 테이블에 저장하는 예 (0) | 2019.09.16 |
[HADOOP] mvn 및 make 패키지 오류 (0) | 2019.09.16 |