메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

클라우드에서 MapReduce 및 로드 밸런싱 사용하기

Hadoop MapReduce 및 가상화를 이용하여 노드 성능 향상시키기

Kirpal A. Venkatesh, System Engineer, Global Business Services, IBM
Kirpal A. Venkatesh is a System Engineer for Global Business Service at IBM, a practitioner in Microsoft technologies, and an enthusiastic adopter and innovator of cloud computing technology.
Kishorekumar Neelamegam, Systems Engineer/IT Architect, Global Business Services, IBM
Kishorekumar is an IT Architect for Global Business Service at IBM. He brings more than 13 years of software development experience with a strong focus on integrating software into the Rational platform. A passionate evangelist on cloud, Kishore is a frequent participant on developerWorks. You can follow his activities through his MydW profile and blog.
R. Revathy, Intern, IBM
R. Revathy is a final-year student at the College of Engineering, Guindy, Anna University, Chennai, India.

요약:  클라우드 환경에서 Hadoop MapReduce 프레임워크를 구현하는 방법과 가상 로드 밸런싱을 사용하여 단일 및 다중 노드 시스템의 성능을 향상시키는 방법에 대해 설명합니다.

원문 게재일:  2010 년 7 월 19 일 번역 게재일:   2010 년 11 월 09 일
난이도:  초급 영어로:  보기 PDF:  A4 and Letter (119KB | 12 pages)Get Adobe® Reader®
페이지뷰:  4788 회
의견:  


클라우드 컴퓨팅은 일반적으로 데이터 센터 레벨의 확장성과 신뢰성을 바탕으로 인터넷을 통해 온디맨드 자원 또는 서비스를 제공하기 위해 설계되었다. MapReduce는 작업을 독립 태스크 세트로 분할하여 대용량 데이터를 병렬로 처리하기 위해 설계된 프로그래밍 모델이다. Google의 BigTable, Hadoop 및 Sector와 같은 일부 capacity-on-demand 스타일의 클라우드에서 지원되는 병렬 프로그래밍 스타일이다.

이 기사에서는 Randomized Hydrodynamic Load Balancing 기술(자세한 정보는 다음 섹션 참조)을 따르는 로드 밸런싱 알고리즘을 사용한다. 가상화를 사용하여 실제 서버의 수와 비용을 줄일 뿐만 아니라 한발 더 나아가서 실제 시스템의 CPU 사용률을 효율적으로 향상시킨다.

이 기사를 이해하려면 클라우드 컴퓨팅 개념, Randomized Hydrodynamic Load Balancing 기술 및 Hadoop MapReduce 프로그래밍 모델에 대한 일반적인 수준의 이해가 필요하다. 병렬 프로그래밍에 대한 기본적인 이해와 Java™ 또는 기타 오브젝트 지향 언어에 대한 프로그래밍 지식도 많은 도움이 된다.

이 기사에서는 다음과 같은 제품을 사용하여 MapReduce 알고리즘에 시스템에 구현했다.

  • Hadoop 0.20.1
  • Eclipse IDE 3.0 이상(또는 Rational Application Developer 7.1)
  • Ubuntu 8.2 이상

MapReduce 알고리즘을 살펴보기 전에 이 기사를 이해하는 데 필요한 클라우드 아키텍처, 로드 밸런싱, MapReduce 및 병렬 프로그래밍에 대한 기본적인 내용을 먼저 살펴보자.

클라우드 아키텍처: 기본 사항

그림 1에서는 전체 시스템, 플랫폼, 소프트웨어 및 이러한 요소가 이 기사의 목표를 달성하는 데 사용되는 방법을 자세히 보여 준다.


그림 1. 클라우드 아키텍처
클라우드 아키텍처

Ubuntu 9.04 및 8.2는 운영 체제로 사용되며, Hadoop 0.20.1, Eclipse 3.3.1 및 Sun Java 6은 플랫폼으로 사용되고, Java 언어는 프로그래밍 언어로, HTML, JSP 및 XML은 스크립트 언어로 사용된다.

이 클라우드 아키텍처에는 마스터 및 슬레이브 노드가 있다. 이 구현에서 기본 서버는 클라이언트 요청을 받은 후 요청의 유형에 따라 요청을 처리한다. 마스터 노드는 기본 서버에 있고 슬레이브 노드는 보조 서버에 있다.

그림 2에서 볼 수 있듯이 검색 요청은 Hadoop의 NameNode로 전달된다. 그런 다음 Hadoop NameNode에서는 많은 수의 Map 및 Reduce 프로세스를 시작하여 검색 및 인덱싱 작업을 수행한다. 특정 검색 키에 대한 MapReduce 작업이 완료되면 NameNode가 서버와 클라이언트에게 차례로 출력 값을 리턴한다.


그림 2. 검색 및 인덱싱을 수행하는 Map 및 Reduce 함수
검색 및 인덱싱을 수행하는 Map 및 Reduce 함수

특정 소프트웨어에 대한 요청일 경우에는 고객 테넌트 ID, 지불 기한, 특정 소프트웨어를 사용할 수 있는 적격성 및 소프트웨어 임대 기간을 바탕으로 인증 단계가 수행된다. 그런 다음 서버에서 이 요청을 처리하여 사용자가 선택한 소프트웨어 조합을 사용할 수 있도록 허용한다.

여기에서 소프트웨어의 단일 인스턴스가 여러 테넌트를 지원할 수 있는 SaaS의 멀티테넌시 기능이 제공된다. 모든 테넌트 관련 요청에는 테넌트 ID를 기반으로 생성된 간단한 분리 행이 있다. 이러한 요청은 단일 인스턴스에서 사용된다.

테넌트 관련 클라이언트 요청에서 파일을 검색하거나 다른 멀티테넌트 소프트웨어를 사용하려는 경우 오퍼링은 프로비저닝된 운영 체제 인스턴스(PaaS)에 있는 Hadoop을 사용한다. 또한 클라우드에서 데이터(예를 들어, 데이터베이스나 파일)를 저장하려면 클라이언트가 데이터 센터의 메모리 공간을 사용해야 한다(IaaS). 이러한 모든 작업은 자동으로 처리되므로 일반 사용자가 관여하지 않아도 된다.


Randomized Hydrodynamic Load Balancing: 기본 사항

로드 밸런싱은 다른 자원이 사용 중일 때 유휴 상태에 있는 자원이 없도록 하기 위해 사용된다. 로드 밸런스를 적절히 유지하기 위해 워크로드가 높은 소스 노드의 로드를 비교적 워크로드가 낮은 대상 노드로 옮길 수 있다.

런타임 동안 로드 밸런싱을 적용하는 경우를 동적 로드 밸런싱이라고 하며 실행 노드 선택에 따라 직접적 또는 반복적 방법으로 실현할 수 있다.

  • 반복적 방법에서는 최종 대상 노드가 여러 반복 단계를 통해 결정된다.
  • 직접적 방법에서는 최종 대상 노드가 하나의 단계에서 선택된다.

이 기사에서는 직접적 및 반복적 방법을 둘 다 사용하는 하이브리드 방법인 Randomized Hydrodynamic Load Balancing 방법을 사용한다.


MapReduce: 기본 사항

MapReduce 프로그램은 대용량 데이터를 병렬로 계산하기 위해 설계되었다. 이를 위해서는 워크로드를 많은 시스템에 분배해야 한다. Hadoop은 이 프로그래밍 패러다임을 구현할 수 있는 시스템적인 방법을 제공한다.

계산에는 입력 키/값 쌍 세트가 사용되며 출력 키/값 쌍 세트가 결과로 출력된다. 계산에는 Map과 Reduce라는 두 가지 기본 작업이 포함된다.

사용자에 의해 작성된 Map 작업은 입력 쌍을 사용하여 중간 키/값 쌍 세트를 출력한다. MapReduce 라이브러리가 동일한 중간 Key #1에 연관된 모든 중간 값을 그룹화하여 Reduce 함수에 전달한다.

마찬가지로 사용자에 의해 작성된 Reduce 함수는 중간 Key #1과 해당 키에 대한 값 세트를 받는다. 이 함수는 이러한 값을 병합하여 가능한 한 작은 값 세트를 만든다. 일반적으로 Reduce 호출마다 0 또는 1의 출력 값이 출력된다. 중간 값은 반복자(프로그래머가 특정 구현에 상관 없이 콜렉션의 모든 요소를 이동할 수 있도록 지원하는 오브젝트)를 통해 사용자의 Reduce 함수에 제공된다. 이 방법을 사용하면 용량이 커서 메모리에 저장하기 어려운 값 목록도 처리할 수 있다.

WordCount 문제 예제를 살펴보자. 이 예제는 대용량의 문서 콜렉션에서 각 단어의 발생 수를 계산한다. Mapper 및 Reducer 함수는 Listing 1과 같다.


Listing 1. WordCount 문제의 Map 및 Reduce

mapper (filename, file-contents):
  for each word in file-contents:
    emit (word, 1)

reducer (word, values):
  sum = 0
  for each value in values:
    sum = sum + value
  emit (word, sum)

Map 함수는 각 단어 및 연관된 발생 수를 표시한다. Reduce 함수는 특정 단어에 대해 표시된 모든 계수를 합산한다. 이 기본 기능은 클러스터에서 빌드할 경우 고속 병렬 처리 시스템으로 쉽게 전환될 수 있다.

대용량 데이터에 대한 계산 수행은 이전부터 일반적으로 분산 설정에서 수행되었다. Hadoop을 차별화하는 특징은 단순화된 프로그래밍 모델에 있다. 이 모델을 사용하면 사용자가 분산 시스템을 빠르게 작성 및 테스트할 수 있고, 데이터 및 작업이 시스템에 효율적으로 자동 분배되며, CPU 코어의 기본 병렬 기능을 활용할 수 있다.

좀 더 자세히 살펴보자. 앞에서 설명한 것처럼 Hadoop 클러스터에는 다음과 같은 노드가 있다.

  • NameNode(클라우드 마스터)
  • DataNodes(또는 슬레이브)

클러스터의 노드에는 로컬 입력 파일이 미리 로드되어 있다. MapReduce 프로세스가 시작되면 NameNode가 JobTracker 프로세스를 사용하여 DataNode에 태스크를 할당한다. 그런 다음 DataNode에서는 TaskTracker 프로세스를 통해 태스크를 실행한다. 여러 Map 프로세스가 각 DataNode에서 실행되고 중간 결과가 Combiner 프로세스에 전달된다. 그런 다음 Combiner 프로세스가 한 시스템의 파일에 있는 단어 수를 생성한다(예를 들어, WordCount 문제의 경우). 이제 값이 섞여서 Reduce 프로세스에 전달된 후 이 프로세스에서 관심 있는 문제에 대한 최종 출력이 생성된다.


로드 밸런싱을 사용하는 방법

로드 밸런싱은 노드가 임계값 레벨 이상으로 로드되었을 때 여유가 있는 노드에 로드를 고르게 분배하는 유용한 기능이다. MapReduce 알고리즘의 실행에서는 로드 밸런싱이 많이 중요하지는 않지만 대용량 파일을 처리하고 하드웨어 자원 사용이 중요할 경우에는 로드 밸런싱이 매우 중요하다. 결과적으로 로드 밸런싱은 자원 중심적 상황에서 하드웨어 사용률을 향상시키는 동시에 약간의 성능 향상도 제공한다.

일부 데이터 노드의 로드 용량이 모두 찼거나 새로운 빈 노드가 클러스터에 추가될 때 Hadoop Distributed File System 클러스터의 디스크 공간 사용량을 조절하기 위한 모듈이 구현되었다. 밸런서(Class Balancer 도구)는 임계값부터 시작되며, 이 매개변수는 0%부터 100% 사이의 값으로 10%가 기본값이다. 이 값은 클러스터의 조절 여부에 대한 목표를 설정하며, 임계값이 낮을수록 클러스터의 균형이 더 세밀하게 조절된다. 또한 밸런서 실행 시간도 길어진다. (참고: 임계값이 너무 작으면 클러스터의 상태를 조절할 수 없다. 왜냐하면 애플리케이션이 파일을 동시에 쓰고 지울 수도 있기 때문이다.)

클러스터는 각 데이터 노드에서 노드의 전체 용량 대비 사용한 공간 비율(노드의 사용률)과 클러스터의 전체 용량 대비 사용한 공간 비율(클러스터의 사용률)의 차이가 임계값을 초과하지 않을 경우 균형 잡힌 상태에 있는 것으로 간주된다.

이 모듈은 사용률이 높은 데이터 노드의 블록을 사용률이 낮은 노드로 반복적으로 이동하며, 각 반복에서 노드는 노드 용량의 임계값 이하의 블록을 이동하거나 받고, 각 반복은 20분 이하로만 실행된다.

이 구현에서 노드는 highly-utilized, average-utilizedunder-utilized로 분류된다. 각 노드의 사용률에 따라 노드 간에 로드가 전송되고 클러스터의 상태가 조절된다. 이 모듈은 다음과 같이 작동된다.

  • 먼저, 주변 노드의 세부 사항을 확인한다.
    1. DataNode의 로드가 임계값 레벨까지 올라가면 NameNode에 요청을 보낸다.
    2. NameNode에는 특정 DataNode의 최인접 노드에 대한 로드 레벨 정보가 있다.
    3. NameNode에서 로드를 비교하여 여유가 가장 많은 주변 노드에 대한 세부 사항을 특정 DataNode에게 보낸다.
  • 그런 다음 DataNode에서 다음과 같은 작업이 수행된다.
    1. 각 DataNode에서는 최인접 주변 노드의 로드양의 합과 자신의 로드양을 비교한다.
    2. DataNode의 로드 레벨이 주변 노드의 합보다 크면 로드 대상 노드(인접 노드 및 기타 노드)가 임의로 선택된다.
    3. 그런 다음 로드 요청이 대상 노드에 전송된다.
  • 마지막으로 요청이 수신된다.
    1. 모든 노드에는 로드 요청을 수신하는 버퍼가 있다.
    2. MPI(Message Passing Interface)가 이 버퍼를 관리한다.
    3. 주 스레드가 버퍼링된 큐를 청취하고 수신된 요청을 처리한다.
    4. 노드가 로드 밸런싱 실행 단계가 들어간다.

성능 평가하기

크기가 각기 다른 다양한 입력 파일 세트가 제공되었으며 MapReduce 태스크를 단일 및 두 개의 노드로 구성된 클러스터에서 실행했다. 해당 실행 시간을 측정하여 클러스터에서 MapReduce를 실행하는 것이 대용량 입력 파일에 훨씬 더 효율적이라는 결론에 도달했다.

그림 3의 그래프에서는 다양한 노드에서 실행한 성능 결과를 보여 준다.


그림 3. 클러스터에서 더욱 효율적으로 작동되는 MapReduce 로드 밸런싱
클러스터에서 더욱 효율적으로 작동되는 MapReduce 로드 밸런싱

결론

Hadoop MapReduce 및 로드 밸런싱에 대한 실험을 통해 다음과 같은 두 가지 명백한 결론이 도출되었다.

  • 클라우드 환경에서 MapReduce 구조는 대용량 데이터 세트에 대한 처리 효율을 높여 준다. 이와는 반대로 비클라우드 시스템에서는 그러한 성능 향상이 발생하지 않는다.
  • 데이터 세트가 작을 경우에는 MapReduce 및 로드 밸런싱으로 인한 클라우드 시스템의 처리 효율이 기대 만큼 향상되지 않는다.

따라서 클라우드 시스템에서 대용량 데이터를 처리할 계획이 있다면 MapReduce 스타일 병렬 처리와 로드 밸런싱의 조합을 고려하는 것이 좋다.


참고자료

교육

제품 및 기술 얻기

토론

  • My developerWorks의 Developer Cloud group은 Smart Business Development and Test on the IBM Cloud를 위한 커뮤니티이다.

  • 연결, 공유 및 협업을 위한 전문가 네트워크이자 통합 커뮤니티 도구 세트인 My developerWorks를 통해 developerWorks 커뮤니티(개발자 블로그, 그룹, 포럼, 팟 캐스트, 프로파일, 뉴스레터, 위키 및 커뮤니티 주제)에 참여하자.

필자소개

Kirpal A. Venkatesh is a System Engineer for Global Business Service at IBM, a practitioner in Microsoft technologies, and an enthusiastic adopter and innovator of cloud computing technology.

Kishorekumar is an IT Architect for Global Business Service at IBM. He brings more than 13 years of software development experience with a strong focus on integrating software into the Rational platform. A passionate evangelist on cloud, Kishore is a frequent participant on developerWorks. You can follow his activities through his MydW profile and blog.

R. Revathy is a final-year student at the College of Engineering, Guindy, Anna University, Chennai, India.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=, 오픈 소스, 자바
ArticleID=570391
ArticleTitle=클라우드에서 MapReduce 및 로드 밸런싱 사용하기
publish-date=07192010
author1-email=kirpal.a.v@in.ibm.com
author1-email-cc=
author2-email=kineelam@in.ibm.com
author2-email-cc=
author3-email=revathy.ceg@gmail.com
author3-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.