분산 컴퓨팅(distributed computing)은 분산 시스템(distributed systems)을 연구하는 컴퓨터 과학의 한 분야로, 인터넷에 연결된 여러 컴퓨터들의 처리 능력을 이용하여 메시지를 하나에서 다른 하나로 보냄(message passing)으로써 거대한 계산 문제를 해결하려는 분산처리 모델이다. Show 유휴 개인용 컴퓨터의 프로세싱 자원을 활용하려는 생각은 1970년대 초 인터넷의 효시로도 불리는 ARPANET이 처음 등장할 때 나타났다. Creeper와 Reaper 같은 몇몇 프로그램들이 출현했으며, 인터넷의 대중화로 1997년에 RSA Data Security사가 Distributed.net 프로젝트를 시작하여 약 30만 명의 이용자가 참여하였으며 DES 64 비트 암호를 해독하였다. 해외의 분산컴퓨팅 프로젝트 동향을 살펴보면 미국을 중심으로 영국, 독일 등 유럽등 여러 곳에서 분산 컴퓨팅에 의한 프로젝트에 관심을 보이고 있고, 바이오 분야, 기상, 인공지능, 수학, 암호학 등 다양한 응용분야에 대한 프로젝트가 진행되고 있다. 이중 가장 대중적으로 성공을 거두고 있는 것은 유명한 프로젝트인 SETI@Home (Search for Extraterrestrial Intelligence, 외계 지적생명체 탐사) 프로젝트이다. SETI@Home은 1999년 본격적으로 프로젝트를 시작해 2003년 기준으로 약 300만 명 이상의 이용자가 참여하고 있다. 이외에도 스탠포드대학과 영국의 옥스퍼드대학 등이 중심이 되어 @Home 프로젝트의 중추적인 역할을 수행하고 있으며, 관련 업체로써는 Entropia, United Devices, Parabon 등이 대표적으로 바이오 분야의 프로젝트를 집중적으로 수행하고 있다. 대한민국에서는 정보통신부가 2002년부터 '코리아앳홈 프로젝트'를 추진하고 있다. 이 사업은 인터넷 기반 분산컴퓨팅 기법을 활용해 수십∼수백 만대의 유휴 PC를 모아 가상의 대용량 슈퍼컴퓨팅을 구현하는 것이 기본목표다. 현재는 종료되었다. 병렬 컴퓨팅과의 관계[편집](a), (b): 분산
시스템. 분산 시스템은 네트워크로 이루어진 컴퓨터들의 그룹이며, 업무를 위해 공통의 목표를 가지고 있다. 병행 컴퓨팅, 병렬 컴퓨팅, 분산 컴퓨팅은 서로 겹치는 부분이 많으며 이들 중 분명한 차이가 존재하지는 않는다.[1] 역사[편집]메시지 전달을 통해 통신하는 병행 프로세스의 이용은 1960년대에 연구된 운영 체제 구조에 그 뿌리가 있다.[2] 최초로 널리 사용되는 분산 시스템은 이더넷과 같은 근거리 통신망으로, 1970년대에 발명되었다.[3] 인터넷의 전신인 ARPANET은 1960년대 말에 도입되었으며, ARPANET 이메일은 1970년대 초에 발명되었다. 이메일은 ARPANET의 가장 성공적인 애플리케이션이 되었으며,[4] 대형 분산 애플리케이션의 최초의 예로 간주할 수 있다. 각주[편집]
외부 링크[편집]
one of a kind sceneADP/이론 4-2 데이터 처리 기술_분산 컴퓨팅 기술 part1_MapReducespecialscene 2019. 12. 16. 23:00 분산 컴퓨팅 기술 part1_MapReduceMapReduce는 대용량 데이터를 분산 처리 하기 위한 프로그래밍 모델 1. 개념 및 특징 • MapReduce는 구글에서 분산 병렬 컴퓨팅을 이용하여 대용량 데이터를 처리하기 위한 목적으로 제작한 소프트웨어 프레임 워크 • 분할정복 방식으로 대용량 데이터를 병렬로 처리할 수 있는 프로그래밍 모델 • 분할정복(divide and conquer) : 해결하고자 하는 문제를 성질이 같은 여러 부분으로 나누어 해결한 뒤, 원래 문제의 해를 구하는 방식 • 구글 외에 아파치 하둡에서 오픈 소스 프로젝트로 시작한 자바(Java) 기반의 'Hadoop MapReduce' 프레임 워크가 동일한 기능 지원 • Client의 수행 작업 단위는 맵리듀스 잡(MapReduce Job)이라고 함 • Map Task 하나가 1개의 블록(64MB)을 대상으로 연산 수행 • (예) 320MB의 파일 → 5개의 Map Task 생성 • Map 과정에서 생산된 중간 결과물들을 사용자가 지정한 개수에 해당되는 Reduce Task들이 받아와서 정렬 및 필터링 작업을 거쳐서 최종 결과물(output)을 만들어 냄 <MapReduce의 작업 흐름>2. 구글 MapReduce ① 구글 MapReduce 개발 배경 • 대용량 처리하는 데에 있어서 연산의 병렬화, 장애 복구 등의 복잡성을 추상화시켜서 개발자들이 오직 핵심 기능 구현에만 집중할 수 있도록 하기 위해 MapReduce를 만듦 ② 프로그래밍 모델 : Map과 Reduce라는 2개의 단계 • Map에서는 (key, value)쌍 형태로 입력된 문장을 변환 (예) I love you → (I, 1) , (love, 1) , (you, 1) • (key, value)쌍으로 변환된 문장은 shuffling과 group by정렬 과정을 자동으로 거친 후 (key, [value list]) 형식으로 Reduce에게 전송 • (key, [value list]) 형식으로 Reduce에 입력되면 사용자가 정의한 Reduce 함수를 통해 최종 Output으로 산출됨 • 사용자 관점에서는 장애 복구와 같은 세세한 이슈들은 신경 쓸 필요 없이, Map과 Reduce 두 함수만 작성하는 것만으로 대규모 병렬 연산 작업을 수행할 수 있다. • (과정1) 문장 변환 : I love book book book → (I, 1) , (love, 1), (book, 1), (book, 1) , (book, 1) • (과정2) Map과정 후(=Reduce에 전달되는 모양) : (I, [1]) , (love, [1]) , (book, [1,1,1]) • (과정3) Reduce 과정 후(사용자가 정의한 Reduce 함수가 sum인 경우) : (I, 1) , (love, 1) , (book, 3) ③ 실행 과정 • 사용자가 MapReduce 프로그램 작성 및 실행 • Master는 사용자가 작성한 MapReduce 프로그램에서 지정한 입력 데이터소스를 가지고 MapReduce를 하기위한 스케줄링 실시 • 큰 파일은 여러 개의 파일split들로 나뉘며, 각 split들이 Map 프로세스들의 할당 단위가 됨 • 보통 split 단위는 블록 사이즈인 64MB 또는 128MB • split 수만큼 Map Task들이 워커로부터 fork되며, Output을 로컬 파일시스템에 저장 • Output 값들은 pratitioner라는 Reduce 번호를 할당해 주는 클래스를 통해 어떤 Reduce에게 보내질지 정해짐 • 특별히 정해지지 않으면 Key와 해시(Hash)값을 Reduce갯수로 Modular(=나눠서 나머지값) 계산한 값이 부여되어 동일한 Key들은 같은 Reduce에 배정 • Map 단계가 끝나면 원격의 Reduce 워커들이 자기에 할당된 Map의 중간 값들을 네트워크로 가져, 사용자의 Reduce 로직을 실행해 최종 산출물을 얻어냄 |