ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [빅데이터 전문가의 하둡관리] 5. 클러스터에서 애플리케이션 실행하기
    Software Development/Big Data 2022. 10. 10. 00:00

    http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788931555752

     

    빅데이터 전문가의 하둡 관리 - 교보문고

    스파크 얀 HDFS 관리, 튜닝 및 보안 비법 대공개! | 빅데이터 전문가의 하둡 관리 데이터 양이 많은 페이스북같은 기업에서 서버의 트래픽이 몰리지 않고 사용자가 빠른 피드백을 받도록 하려면?

    www.kyobobook.co.kr

    위 책의 내용을 읽으며 공부한 내용을 요약 및 정리한 글입니다. 자세한 내용은 위 책에서 알 수 있습니다.

    맵리듀스 프레임워크

    맵리듀스가 스파크와 같은 프로세싱 프레임워크로 대체되기는 하겠지만, 대부분의 하둡 클러스터에서는 아직도 수많은 맵리듀스와 피그/하이브 코드가 실행되고 있다.

    맵리듀스 모델

    • 맵 단계: 입력 파일을 병렬 처리 방식으로 처리해 중간 결과로 출력.
    • 리듀스 단계: 이 단계는 모든 관련 레코드를 통합시키는 단계.

    애플리케이션 개발자들은 맵리듀스 프로그램 모델을 사용하기 위해 4개의 클래스를 만든다.

    • 입력 파일을 읽어 들이고 입력 레코드를 키/값 쌍으로 변경하는 클래스
    • 맵퍼 클래스
    • 리듀서 클래스
    • 리듀서 클래스에서 생성한 키/값 쌍을 변경해 최종 출력 레코드로 변형하는 클래스

    맵과 리듀스가 컴퓨팅하는 방식이다.

    • 맵 프로세스는 커다란 파일을 여러 개의 청크로 쪼갠다. 각 청크들은 동시에 다수의 맵퍼 프로세스들로 처리된다. 각각의 청크에서 나온 결과가 정렬돼 파티션을 이룬다.
    • 리듀스 태스크들이 정렬된 청크들 각각을 가져와서 프로세싱하고 최종 결과 파일을 만든다.

    맵리듀스가 동작하는 방식

    맵리듀스가 하둡 환경에서 어떻게 동작하게 되는지 주요 콘셉트들을 정리한다.

    • 각 맵퍼는 HDFS 파일 시스템에 있는 파일의 한 부분을 처리한다. 보통 이 입력 파일의 한 부분의 크기는 HDFS 블록 사이즈다.
    • 하둡은 한 번에 하나의 레코드를 맵퍼로 보낸다. 이때 각 레코드는 키와 값을 가진다.
    • 맵퍼는 한 번에 하나의 레코드만 처리하고 중간 결과 데이터를 디스크에 기록한다.
    • 리듀서는 맵퍼가 만들어 낸 중간 키들을 이용해 결과를 종합한다.
    • 동일한 중간 키와 관련된 모든 값들은 동일한 리듀서로 보내진다.
    • 리듀서는 HDFS 파일 시스템에 최종 결과를 기록한다.

    입력과 출력

    맵리듀스는 오직 <키, 값> 쌍을 이용해 작업한다.

    하둡(맵리듀스) 입출력 과정

    맵리듀스가 얼마나 많은 양의 데이터를 효과적으로 처리하는지 이해하려면 맵리듀스가 I/O 프로세스를 처리하는 방법을 알아야 한다. CPU를 많이 사용하는 하둡 시스템은 흔한 케이스가 아니다. 보통 I/O가 중요한 병목 지점이 된다. 다음 내용은 맵리듀스 잡이 사용하는 I/O과정을 간단히 설명한 것이다.

    • 맵퍼 프로세스들은 HDFS 파일을 입력으로 읽어 들인다.
    • 맵 단계에서 입력을 입력 부분(split)이나 청크라는 단위로 나눠진다. 하둡은 독립적인 맵 태스크들을 만들어 각각의 데이터 청크들을 처리하게 한다.
    • 각 맵 태스크들은 할당된 데이터 청크에서 키/값 쌍을 처리하고 중간 단계의 키/값 쌍들을 만들어 낸다.
    • 중간 단계의 데이터는 키를 이용해 정렬된다. 그리고 이 데이터는 파티션으로 나뉘므로 리듀서 태스크 수와 동일한 수의 청크로 나뉘게 된다.
    • 리듀서를 실행하는 노드들은 맵퍼에게서 받는 데이터를 정렬한 후, 로컬 디스크에 있는 데이터를 머지한다.
    • 리듀서는 결과를 HDFS에 기록한다.

    데이터 압축

    클러스터의 처리량을 높이려면 디스크 I/O 및 네트워크 I/O를 줄이는 방법에 초점을 맞춰야 한다. 데이터를 압축이 기본 전략이다.

    맵리듀스 잡 프로세싱

    맵리듀스 잡을 실행하면 내부적으로 다음과 같은 일들이 일어난다.

    • 다수의 맵 프로세스들은 동시에 시작되고, 가각은 HDFS 디렉토리로부터 입력 스플릿을 읽어 들이고 데이터를 처리해 중간 키/값 쌍을 만든다.
    • 리듀서 프로세스는 동일한 키를 갖는 모든 키/값 쌍을 처리하고, 다음 단계를 수행한다.
    • 리듀서 프로세스는 키/값 쌍으로 된 최종 결과를 출력 디렉토리에 저장한다.

    각 맵리듀스 태스크는 입력 스플릿 하나를 처리한다. 클라이언트가 클러스터에 잡을 서밋하기 전에 입력 스플릿의 크기가 계산된다.

    맵리듀스는 하둡 클러스터에 분산해 저장돼 있는 데이터의 이점을 최대한 이용할 수 있도록 디자인됐다. 방대한 데이터는 클러스터에 여러 데이터 노드에 처리할 수 있을 만큼씩 나뉘어 저장돼 있다. 맵리듀스는 이 데이터를 병렬 처리 방식으로 처리한다.

    다음은 맵리듀스 애플리케이션이 일하는 방법을 간단히 설명한 것이다.

    • 입력 스플릿을 결정한다.
    • 맵 태스크의 도움을 받아 입력 스플릿에 있는 각각의 레코드를 처리한다.
    • 각 맵 태스크들의 출력을 합친다.
    • 각 맵퍼 결과에서 정렬된 데이터를 그룹짓는다.
    • 리듀스 태스크를 사용한다. 리듀서는 맵퍼의 처리 결과를 종합해 하나의 결과를 HDFS에 저장하는 일을 한다.

    아파치 하이브

    SQL 인터페이스를 이용해 맵리듀스를 사용한 프로그램 없이도 HDFS 데이터를 처리할 수 있다. 하이브는 HBase와 달리, 데이터베이스가 아니다. 하이브는 단순히 우리가 HDFS에 저장한 데이터에 데이터베이스 구조를 투사하기 위한 메커니즘을 제공하고,  SQL과 비슷한 언어인 HiveQL을 사용해 데이터에 쿼리할 수 있도록 해주는 기능을 제공한다.

    하이브는 SQL 타입의 쿼리와 테이블의 컨셉을 사용하지만, 하이브 자체가 데이터베이스는 아니다. 하이브는 HDFS 디렉토리를 테이블에 매핑한 것뿐이다.

    하이브는 업데이트와 삭제를 지원하지 않는다. 하이브는 SQL로 작성하기 때문에 맵리듀스를 작성하는 것보다 훨씬 시간을 절약할 수 있다.

    BI툴과 잘 통합될 수 있다.

    하이브는 확장성과 장애 허용이라는 하둡의 장점 위에 세워진 데이터 웨어하우스 인프라스트럭처라고 할 수 있다.

     

    하이브의 데이터 구성

    Hive는 전통적인 관계형 데이터베이스처럼 데이터를 여러 단위로 분류하는 방식을 사용한다.

    • 데이터베이스: 다른 데이터 그룹과 구분짓는 네임스페이스
    • 테이블: 이 데이터 단위는 동일한 스키마를 갖고 있다.
    • 파티션: 테이블을 청크 단위로 나눌 수 있다.
    • 버킷: 파티션을 더 작은 단위로 나눌 수 있도록 해준다. 테이블 컬럼에 대해 해시 함수를 적용한 값이 동일한 것들이다.

     

     

     

     

    댓글

Designed by Tistory.