복붙노트

[HADOOP] Spark : 코어 수를 조정할 때 성능이 일치하지 않습니다.

HADOOP

Spark : 코어 수를 조정할 때 성능이 일치하지 않습니다.

정렬 벤치 마크를 사용하여 Spark에 대한 간단한 스케일링 테스트를하고 있습니다 - 1 코어에서 최대 8 코어. 나는 8 개의 코어가 1 개의 코어보다 느리다는 것을 알아 차렸다.

//run spark using 1 core
spark-submit --master local[1] --class john.sort sort.jar data_800MB.txt data_800MB_output

//run spark using 8 cores
spark-submit --master local[8] --class john.sort sort.jar data_800MB.txt data_800MB_output  

각각의 경우 입력 및 출력 디렉토리는 HDFS에 있습니다.

나는 8 코어 성능이 x 속도 향상을 기대합니다.

해결법

  1. ==============================

    1.이론적 한계

    이론적 한계

    나는 당신이 친숙한 Amdahl의 법칙이라고 생각하지만 여기에 빠른 알림이 있습니다. 이론적 인 속도 향상은 다음과 같이 정의됩니다.

    여기서 :

    실제로 이론적 인 속도 향상은 항상 병렬화 할 수없는 부분에 의해 제한되며 p가 비교적 높다하더라도 (0.95) 이론상의 한계는 매우 낮습니다.

    (이 파일은 Creative Commons Attribution-Share Alike 3.0 Unported 라이센스에 따라 사용이 허가되었습니다. 출처 : Daniels220, 영문 위키피디아)

    효과적으로 이것은 얼마나 빨리 얻을 수 있는지 이론적으로 결정합니다. 난처한 상황에서 p가 상대적으로 높을 것으로 기대할 수 있지만 0.95 또는 그 이상에 가까운 것을 꿈꿀 필요는 없습니다. 이 때문입니다

    Spark는 높은 비용의 추상화입니다.

    Spark는 데이터 센터 규모의 범용 하드웨어에서 작동하도록 설계되었습니다. 핵심 설계는 전체 시스템을 강력하게 만들고 하드웨어 오류를 방지하는 데 중점을 둡니다. 수백 개의 노드로 작업 할 때 큰 특징입니다. 장시간 실행되는 작업을 실행하지만 확장 성이 떨어집니다.

    Spark는 병렬 컴퓨팅에 초점을 맞추지 않았습니다.

    실제로 Spark 및 유사한 시스템은 두 가지 문제에 초점을 맞추고 있습니다.

    이는 대규모의 데이터 집약적 시스템에 대한 근본적인 문제입니다.

    병렬 처리는 주요 솔루션보다 특정 솔루션의 부작용입니다. 스파크는 첫 번째로, 두 번째는 병렬로 배포됩니다. 주요 포인트는 기존 계산을 가속화하지 않고 스케일 아웃으로 데이터 양이 증가함에 따라 처리 시간을 일정하게 유지하는 것입니다.

    현대의 보조 프로세서 및 GPGPU를 사용하면 일반적인 Spark 클러스터보다 단일 시스템에서 더 높은 병렬 처리를 구현할 수 있지만 IO 및 메모리 제한으로 인해 데이터 집약적 인 작업에는 반드시 도움이되지는 않습니다. 문제는 데이터를 처리하는 방법이 아닌 데이터를 충분히 빠르게로드하는 방법입니다.

    실용적인 의미

    이 문맥에서 :

    클래스와 jar가 의미가 있다고 가정하면 사실상 파일 (shuffle)과 데이터 (shuffle)가있는 전체 스파크 정렬 기계를 실행하는 것보다 단일 파티션에서 메모리 (single partition in, 단일 파티션 out)에서 데이터를 읽는 것이 더 낫습니다. 교환.

  2. from https://stackoverflow.com/questions/41090127/spark-inconsistent-performance-number-in-scaling-number-of-cores by cc-by-sa and MIT license