병렬화 계약
Parallelization contract![]() |
병렬화 계약 또는 PACT 프로그래밍 모델은 MapReduce 프로그래밍 모델의 일반화이며 2차 함수를 사용하여 대형(페타바이트) 데이터 세트에 대한 동시 계산을 병렬로 수행합니다.
개요
MapReduce와 마찬가지로 임의의 사용자 코드는 PACTs에 의해 전달되고 실행됩니다.그러나 PACT는 MapReduce의 몇 가지 개념을 일반화합니다.
- 2차 기능: APCT는 더 많은 2차 기능을 제공합니다.현재 Input Contracts라는 5개의 2차 기능이 지원됩니다.이 집합은 나중에 확장될 수 있습니다.
- 프로그램 구조: PACT를 통해 임의의 비순환 데이터 흐름 그래프를 구성할 수 있습니다.계약상 MapReduce 프로그램은 정적 구조(Map -> Reduce)를 가집니다.
- 데이터 모델: PACT의 데이터 모델은 임의의 여러 필드에 대한 임의의 레코드입니다.MapReduce의 KeyValue-Pairs는 두 개의 필드가 있는 레코드로 간주할 수 있습니다.
오픈 소스 병렬 데이터 처리 플랫폼인 Apache Flink는 PACTs를 구현했습니다.깜박임을 통해 사용자는 주석을 사용하여 사용자 기능을 지정할 수 있습니다.
논리적 관점
병렬화 계약(PACT)은 데이터 흐름의 데이터 처리 연산자입니다.따라서 APCT에는 하나 이상의 데이터 입력과 하나 이상의 출력이 있습니다.APCT는 다음 두 가지 구성 요소로 구성됩니다.
- 입력 계약
- 사용자 기능
- 사용자 코드 주석
아래 그림은 이러한 구성 요소가 함께 작동하는 방식을 보여줍니다.입력 계약은 입력 데이터를 독립적으로 처리 가능한 하위 집합으로 분할합니다.이러한 각 독립 하위 집합에 대해 사용자 코드가 호출됩니다.하위 집합이 독립적이기 때문에 모든 호출을 병렬로 실행할 수 있습니다.
선택적으로 사용자 코드에 추가 정보를 추가할 수 있습니다.이러한 주석은 블랙박스 사용자 기능의 동작에 대한 일부 정보를 공개합니다.PACT 컴파일러는 정보를 활용하여 보다 효율적인 실행 계획을 얻을 수 있습니다.그러나 주석이 누락되어도 실행 결과는 변경되지 않지만 잘못된 출력 계약을 사용하면 잘못된 결과가 생성됩니다.
현재 지원되는 입력 계약 및 주석이 다음에 제시되고 논의됩니다.
입력 계약
입력 계약은 PACT의 입력 데이터를 독립적으로 처리 가능한 하위 집합으로 분할하여 PACT의 사용자 기능에 전달합니다.입력 계약은 데이터 입력의 수와 독립적인 하위 집합이 생성되는 방법에 따라 다릅니다.
더 공식적으로, 입력 계약은 1차 함수(사용자 코드), 하나 이상의 입력 세트 및 입력당 하나 이상의 키 필드가 매개 변수로 있는 2차 함수입니다.입력 집합의 부분 집합을 사용하여 1차 함수를 여러 번 호출합니다.1차 기능은 부작용이 없기 때문에 각 통화는 서로 독립적이며 모든 통화는 병렬로 가능합니다.
MapReduce 프로그래밍 모델의 2차 함수 맵() 및 축소()는 PACT 프로그래밍 모델의 맥락에서 입력 계약입니다.
지도
맵 입력 계약은 맵리듀스와 동일한 방식으로 작동합니다.단일 입력이 있고 각 입력 레코드를 자체 하위 집합에 할당합니다.따라서 모든 레코드는 서로 독립적으로 처리됩니다.
줄이자
Reduct Input Contract는 MapReduce의 Reduct 기능과 동일한 의미를 가집니다.단일 입력이 있고 키 필드가 동일한 모든 레코드를 그룹화합니다.이러한 각 그룹은 전체적으로 사용자 코드로 전달되고 사용자 코드에 의해 처리됩니다(아래 그림 참조).또한 PACT 프로그래밍 모델은 부분 집합과 같은 선택적 결합기를 지원합니다.
건너다
교차 입력 계약은 두 가지 입력에 대해 작동합니다.그것은 두 입력의 레코드의 데카르트 곱을 만듭니다.데카르트 제품(기록 쌍)의 각 요소는 사용자 코드로 전달됩니다.
경기
Match Input Contract는 두 개의 입력에 대해 작동합니다.두 입력 모두 서로 다른 입력에서 온 동일한 키 필드의 레코드와 일치합니다.따라서 두 입력의 키가 조인할 속성인 동등 조인과 유사합니다.일치하는 각 레코드 쌍은 사용자 코드로 전달됩니다.
COGROUP
CoGroup 입력 계약은 두 개의 입력에도 적용됩니다.이는 두 가지 입력에 대한 감소로 볼 수 있습니다.각 입력에서 레코드는 키별로 그룹화되어(예: 축소) 사용자 코드로 전달됩니다.일치와 달리 한 입력에만 키가 있는 경우 사용자 코드를 호출합니다.
협정 기록 데이터 모델
MapReduce와 대조적으로, Pact는 함수 간에 데이터를 전달하기 위해 보다 일반적인 레코드 데이터 모델(Pact Record)을 사용합니다.팩트 레코드는 자유 스키마가 있는 튜플로 생각할 수 있습니다.레코드 필드의 해석은 사용자 기능에 따라 달라집니다.키/값 쌍(MapReduce에서와 같이)은 두 개의 필드(키와 값)만 있는 해당 레코드의 특수한 경우입니다.
키에서 작동하는 입력 계약(예: //Reduce//, //Match// 또는 //CoGroup/)의 경우 키를 구성하는 레코드 필드의 조합을 지정합니다.임의의 필드 조합을 사용할 수 있습니다.//Reduce// 및 //Match//를 정의하는 프로그램이 하나 이상의 필드에서 수축하고 필드 간 데이터 이동을 최소화하도록 작성할 수 있는 방법은 쿼리 예제를 참조하십시오.
레코드가 드문드문 채워질 수 있습니다. 즉, //null// 값을 가진 필드가 있을 수 있습니다.예를 들어 필드 2와 5만 설정된 레코드를 생성하는 것은 합법적입니다.필드 1, 3, 4는 //null//로 해석됩니다.그러나 계약에서 키 필드로 사용되는 필드는 null이 아니거나 예외가 발생할 수 있습니다.
사용자 코드 주석
사용자 코드 주석은 PACT 프로그래밍 모델에서 선택적으로 사용할 수 있습니다.개발자는 최적화 도구를 사용하여 특정 사용자 코드 동작을 명시적으로 수행할 수 있습니다.PACT 최적화 도구는 이러한 정보를 활용하여 보다 효율적인 실행 계획을 얻을 수 있습니다.그러나 유효한 주석이 사용자 코드에 첨부되지 않은 경우에는 결과의 정확성에 영향을 미치지 않습니다.반면에 잘못된 주석을 지정하면 잘못된 결과가 계산될 수 있습니다.다음에는 현재 사용 가능한 출력 계약 세트가 나와 있습니다.
상수 필드
상수 필드 주석은 사용자 코드 함수에 의해 수정되지 않은 필드를 표시합니다.모든 입력 레코드에 대해 일정한 필드는 출력 레코드의 내용과 위치를 변경할 수 없습니다!Cross, Match 및 CoGroup과 같은 이진 2차 함수의 경우 입력당 주석을 하나씩 지정할 수 있습니다.
상수 필드 제외
상수 필드 제외 주석은 상수 필드 주석과 반대입니다.주석이 달린 사용자 함수에 의해 수정될 수 있는 모든 필드에 주석을 달기 때문에 옵티마이저는 주석이 없는 필드를 상수로 간주합니다.이 주석은 매우 신중하게 사용해야 합니다!다시, 이진 2차 함수(교차, 일치, CoGroup)의 경우 입력당 하나의 주석을 정의할 수 있습니다.입력에는 상수 필드 또는 상수 필드 제외 주석을 사용할 수 있습니다.
PATC 프로그램
APCT 프로그램은 데이터 소스, APCT 및 데이터 싱크로 구성된 데이터 흐름 그래프로 구성됩니다.하나 이상의 데이터 원본이 입력 데이터가 포함된 파일을 읽고 해당 파일에서 레코드를 생성합니다.이러한 레코드는 각각 입력 계약, 사용자 코드 및 선택적 코드 주석으로 구성된 하나 이상의 PACT에 의해 처리됩니다.마지막으로, 결과는 하나 이상의 데이터 싱크에 의해 출력 파일에 다시 기록됩니다.MapReduce 프로그래밍 모델과 달리 PACT 프로그램은 임의로 복잡할 수 있으며 고정된 구조가 없습니다.
아래 그림은 두 개의 데이터 소스, 네 개의 PACT 및 한 개의 데이터 싱크가 있는 PACT 프로그램을 보여줍니다.각 데이터 원본은 파일 시스템의 지정된 위치에서 데이터를 읽습니다.두 소스 모두 데이터를 지도 입력 계약과 함께 각 PACTs에 전달합니다.사용자 코드는 그림에 나와 있지 않습니다.두 Map PACTs의 출력은 Match Input Contract가 포함된 APCT로 스트리밍됩니다.마지막 협약은 입력 감소 계약을 체결하고 그 결과를 데이터 싱크에 전달합니다.
APCT가 MapReduce에 비해 갖는 이점
- PACT 프로그래밍 모델은 보다 모듈식 프로그래밍 스타일을 장려합니다.일반적으로 사용자 기능의 수가 더 많지만, 더 세분화되고 특정 문제에 초점을 맞춥니다.따라서 MapReduce 작업에 일반적인 기능의 인터위빙을 피할 수 있습니다.
- 데이터 분석 작업은 특히 여러 입력이 필요할 때 간단한 데이터 흐름으로 표현할 수 있습니다.
- FACT에는 레코드 기반 데이터 모델이 있으므로 모든 데이터 항목을 단일 값 유형으로 패킹할 필요가 없으므로 사용자 지정 데이터 유형을 지정할 필요가 없습니다.
- PACT는 병렬 프로그래밍 모델을 "파손"하는 분산 캐시와 같은 보조 구조의 필요성을 종종 제거합니다.
- 데카르트 제품을 구축하거나 동일한 키로 레코드를 결합하는 것과 같은 데이터 구성 작업은 런타임 시스템에서 수행됩니다.MapReduce에서는 이러한 자주 필요한 기능을 사용자 코드 개발자가 제공해야 합니다.
- PACTs는 선언적 방식으로 데이터 병렬화를 지정하여 시스템에 몇 가지 자유도를 남깁니다.이러한 자유도는 자동 최적화를 위한 중요한 전제 조건입니다.PACT 컴파일러는 다양한 실행 전략을 열거하고 전송할 데이터 양이 가장 적은 전략을 선택합니다.반대로 Hadoop은 항상 동일한 전략으로 MapReduce 작업을 실행합니다.
MapReduce와 PACT 프로그래밍 모델에 대한 자세한 비교는 당사의 문서 //"MapReduce와 PACT - 데이터 병렬 프로그래밍 모델 비교"//(당사 페이지 참조)를 참조하십시오.
레퍼런스
- "Nephelle/PACTs: 웹 스케일 분석 처리를 위한 프로그래밍 모델 및 실행 프레임워크"—D의 논문.바트레, S. Ewen, F.휴즈케, O. 카오, V. 마클, 그리고 D.TU 베를린의 Warneke는 ACM SoCC 2010의 Proc.에 출판되었습니다.이 논문은 성층권 연구 프로젝트에서 개발된 MapReduce의 일반화인 PACT 프로그래밍 모델을 소개합니다.
- "MapReduce와 PACT - 데이터 병렬 프로그래밍 모델 비교"—A의 논문.알렉산드로프, S. Ewen, M.하이멜, F.Hueske, O. Kao, V. Markl, E. Nijkamp, 그리고 D.TU Berlin의 Warneke는 BTW 2011의 Proc.에 출판되었습니다.
진일보한 내용
외부 링크
- 성층권 프로젝트 홈 페이지
- 성층권 슬라이드 프레젠테이션
- 비디오 강의 병렬 데이터 흐름 프로그래밍