2016년 4월 5일 화요일

[hadoop] 하둡 기본 용어


하둡에서 사용되는 기본 용어들을 정리하였습니다.
('시작하세요! 하둡 프로그래밍' 을 참고하였습니다.)

하둡

  • 하둡(Hadoop)
    • 대용량 데이터를 분산처리할 수 있는 자바 기반의 오픈소스 프레임워크
  • HDFS(Hadoop Distributed File System)
    • 대용량 파일을 분산된 서버에 저장하고, 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템
  • 네임노드(NameNode)
    • HDFS의 모든 메타데이터를 관리하고, 클라이언트가 HDFS에 저장된 파일에 접근할 수 있게 해준다.
    • 모든 파일과 데릭터리에 대한 메타 데이터 정보인 네임스페이스를 관리한다.
    • 데이터노드와 하트비트를 유지하며, 데이터 노드의 상태를 파악하고, 블록 리포트를 이용해 블록의 위치도 파악한다. (블록 관리)
    • HDFS에 데이터를 읽고, 쓰고, 삭제하는 모든 트랜잭션과 복제 데이터에 대한 배치도 네임노드에서 관리한다.
  • 보조네임노드(SecondaryNameNode) 
    • 주기적으로 네임노드의 파일 시스템 이미지 파일을 갱신하는 역할을 수행한다.

  • 데이터노드(DataNode)
    • HDFS에 데이터를 입력하면 입력 데이터는 32MB(지정한 사이즈)의 블록으로 나눠져 여러 대의 데이터노드에 분산되어 저장된다. (블록 저장소 역할)
    • 데이터를 로컬 파일 시스템에 저장하고, 데이터에 대한 제어 요청이 왔을때만 데이터를 전송한다.
  • 파일 시스템 이미지(fsImage)
    • HDFS의 네임스페이스(디렉터리명, 파일명, 상태 정보)와 파일에 대한 블록 매핑 정보를 저장하는 파일
  • 에디트로그(editLog)
    • HDFS의 메타데이터에 대한 모든 변화를 기록하는 로그 파일
  • 잡트래커(JobTracker)
    • 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링한다.
  • 태스크트래커(TaskTracker)
    • 사용자가 설정한 맵리듀스 프로그램을 실행하며, 하둡의 데이터노드에서 실행되는 데몬이다.
    • 이때 map task와 reduce task란 사용자가 설정한 map과 reduce 프로그램이다.
  • YARN (Yet Another Resource Negotiator)
    • 하둡 2.0 버전의 가장 큰 변화
    • 차세대 맵리듀스 프레임워크. MRv2 혹은 맵리듀스2.0이라고도 한다.
    • YARN은 맵리듀스 프레임워크가 맵리듀스 애플리케이션 외에도 분산 환경에서 다양한 애플리케이션을 수용할 수 있는 애플리케이션 서버로 진화하는 모습을 보여준다.
    • YARN에서는 기존의 잡 트래커의 기능을 리소스 매니저와 애플리케이션 마스터로 분리했다.
  • 리소스 매니저(Resource Manager: RM)
    • 애플리케이션에 할당해야 하는 클러스터의 리소스를 관리
    • YARN의 마스터 역할
    • 클라이언트가 실행한 애플리케이션이 필요한 전체 클러스터의 리소스(CPU, 디스크, 네트워크)를 관리하며, 이를 위해 내부적으로 스케쥴러와 애플리케이션 매니저를 실행한다.
      • 스케쥴러(Scheduler)
        • 노드 매니저와 통신하며, 필요한 리소스에 대한 스케쥴링을 수행한다.
        • 이때 스케쥴링은 FIFO와 커패시티 스케줄러 중 하나를 선택할 수 있으며, 기본 스케줄러는 FIFO를 사용한다.
        • 참고로 페어 스케줄러는 아직 지원하지 않는다.
      • 애플리케이션 매니저(Application Manager)
        • 애플리케이션 마스터의 상태를 관리한다.
        • 애플리케이션 마스터의 실행, 모니터링, 재실행과 같은 기능을 수행한다.
  • 노드 매니저(Node Manager)
    • 애플리케이션 컨테이너를 실행하고, 서버의 리소스가 어떻게 사용되고 있는지 모니터링한다.
    • 노드 매니저는 데이터 서버가 설치되어 있는 서버에서 실행되며, 리소스 매니저와 지속적으로 통신하며 자신의 상태를 리포트해준다.
  • 애플리케이션 마스터(Application Master: AM)
    • 잡의 스케줄링과 모니터링 담당
    • 하나의 애플리케이션을 관리하는 마스터 역할을 수행한다.
    • 태스크 실행, 태스크의 진행 상태 및 모니터링, 태스크 장애 처리와 같은 기능을 제공한다.
    • 이때 태스크는 노드 매니저가 실행한 애플리케이션 컨테이너에서 실행된다.
    • 또한 리소스 매니저와 주기적으로 통신하며 필요한 리소스를 할당받는다.
    • 하둡 공식 사이트에서는 애플리케이션 ㅁ스터가 리소스 매니저와 리소스를 협상(negotiate)한다고 표현하는데, YARN의 마지막 의미인 Negotiator가 애플리케이션 마스터의 기능에서 유래된 것을 예상할 수 있다.

맵리듀스

  • 맵리듀스(MapReduce)
    • 맵리듀스 프로그래밍 모델은 과거부터 사용하던 알고리즘으로 맵(map)과 리듀스(reduce)라는 두 개의 메서드로 구성된 알고리즘이다.
    • 맵리듀스 프레임워크는 이러한 알고리즘을 이용해 개발된 프레임워크이며, 대규모 분산 컴퓨팅 혹은 단일 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석할 수 있게 한다.
  • 맵리듀스 잡(MapReduce Job)
    • 클라이언트가 하둡으로 실행을 요청하는 맵리듀스 프로그램은 잡(job)이라는 하나의 작업 단위로 관리된다.
  • 입력 스플릿(Input split)
    • 하나의 맵에서 처리해야 하는 입력 파일의 크기
  • 매퍼(Mapper)
    • 맵리듀스 프로그래밍 모델에서 맵 메서드의 역할을 수행하는 클래스
    • 매퍼는 키와 값으로 구성된 입력 데이터를 전달받아 이 데이터를 가공하고 분류해서 새로운 데이터 목록을 생성한다.
  • 리듀서(Reducer)
    • 맵리듀스 프로그래밍 모델에서 리듀스 메서드의 역할을 수행한느 클래스
    • 리듀서는 맵 태스크의 출력 데이터를 입력 데이터로 전달받아 집계 연산을 수행한다.
  • 셔플(Shuffle)
    • 맵 태스크와 리듀스 태스크 사이의 데이터 전달 과정이다.
  • 콤바이너(Combiner)
    • 콤바이너 클래스는 매퍼의 출력 데이터를 입력 데이터로 전달받아 연산을 수행한다.
    • 이러한 연산을 통해 셔플할 데이터의 크기를 줄이는데 도움을 준다.
  • 파티셔너(Partitioner)
    • 파티셔너는 맵 태스크의 출력 데이터가 어떤 리듀스 태스크로 전달될지를 결정한다.

2016년 4월 4일 월요일

[java] jar, war, ear

jar, war, ear 이 압축방식들은 압축의 해제없이 JDK에서 각 파일들을 접근하여 사용할 수 있도록 설계되어 있다.
jar, war, ear 파일들은 java jar tool을 이용하여 압축된 파일이다.
이 파일들은 각각 다른 목적을 가지고 사용된다.

단위: class < jar < war < ear

  • jar (java archive)
    • 라이브러리, 리소스, property 파일들을 포함한다.
    • JDK에서 제공하는 Java Archive Tool을 이용하여 jar 파일에 대한 작업을 할 수 있다. (Jar tool)
      • JAR 파일 생성
        jar cf jar-file input-file(s)
      • JAR 파일 콘텐츠 보기
        jar tf jar-file
      • JAR 파일 콘텐츠 추출
        jar xf jar-file
      • JAR 파일에서 특정 콘텐츠 추출
        jar xf jar-file archive-file(s)
      • JAR 파일의 애플리케이션 실행 (version 1.1)
        jre -cp app.jar MainClass
      • JAR 파일의 애플리케이션 실행
        (version 1.2 -- requires Main-Class manifest header)
        java -jar app.jar
      • java sun jar basics
        https://web.archive.org/web/20120626012843/http://java.sun.com/developer/Books/javaprogramming/JAR/basics

  • war (web archive)
    • Web container는 서블릿, jar파일과 WEB-INF폴더에 있는 web.xml 파일을 가지고 있는 war 파일로 패키징된 웹 모듈을 필요로 한다. (패키지 개념)
    • war 파일로 올리면 tomcat(was)이 알아서 압축을 해제해서 배포해준다.
    • 사용법
      • war 파일 만드는 방법
        • jar cvf 파일명.확장자(jar or war) ./상대경로
      • 만들어진 war를 tomcat에 등록하기
        • server.xml docBase 에 등록
        • war 를 등록시 확장자는 생략해도 되며, docBase에는 war 파일의 경로를 기입하고 path는 반드시 기입해야 한다.
  • ear (enterprise archive)
    • 하나의 웹 어플리케이션 단위를 넘어서 실제 서버에서 배포하기 위한 단위를 말한다.
    • 이를 위해서 jar와 war를 묶어서 각각의 기능을 지원한다.
      • jar 는 어플리케이션 레벨(business layer)
      • war는 웹어플리케이션 레벨(web layer)
    • Standalone web container(such as Tomcat, Jetty)는 EAR 파일을 지원하지 않는다.
      • 완전한 어플리케이션 서버가 아니기 때문이다.
      • 이러한 웹 어플리케이션은 war 파일로 deploy
* WAR에 대한  추가 설명
WAR는 자바 기반의 웹 프로젝트의 최종 결과 포맷이다. 이것은 기본적인 내용이지만 웹 프로젝트에서 배포를 위한 최소한의 단위가 되므로 매우 중요하다.

WAS(Web Application Server)마다 배포 방식과 설정이 조금씩 다르지만 기본적으로 WAR파일에 대한 규격은 동일하다. WAR 파일과 JAR 파일 모두 파일 시스템 측면에서는 ZIP 파일과 유사하며 JVM 위에서 실행할 수 있도록 메타 정보가 추가되어 있다. 

JAR의 경우에는 실행될 클래스(main)를 명시하며, WAR 파일의 경우에는 단독으로 실행할 수 없고 서버 컨테이너에 의해서 실행되므로 배포에 대한 메타 정보가 담겨 있다. 그래서 web.xml을 배포 서술자(DD, Deploy Description)라고 부르며, 이 파일에는 웹 프로젝트에 대한 설정 정보가 담겨 있다.

서버에서는 배포 서술자 정보를 읽어 컨텍스트를 생성한다. 컨텍스트는 기본적으로 WAR 파일명과 동일한 이름으로 생성되고, 사용자가 웹 디렉터리에 있는 자원에 접근할 수 있게 한다.

(최근에는 보안상의 이유로 사용자가 JSP에 직접적인 접근을 할 수 없게 WEB-INF 하위에 디렉터리를 만들어 사용한다.)

(엔터프라이즈 빌드 자동화를 위한 Gradle, 윤석진, 84p 참고)

2016년 4월 1일 금요일

[리눅스] tar, gz 압축

리눅스에서 압축을 하기 위해서 사용하는 tar에 대해서 알아보겠습니다.

  • tar
    • 압축이 아닌 파일만 묶어준다.
  • gzip
    • 용량을 줄여주는 압축 기능을 압축한다.
    • 하나의 파일에 대해서만 압축과 풀기가 가능하다.
    • 압축은 파일 묶기와 함께 실행되므로 tar 옵션에 gzip과 gunzip 옵션이 추가되었다.
      (파일을 하나씩 압축하고 tar로 묶거나, tar로 묶음을 해제하고 파일 하나씩 압축을 푸는 작업을 덜어줌)
    • 파일 확장자 : gz
  • 사용 예
    • tar로 파일을 묶은 후 gzip으로 압축을 해서 보냄.
      (tar 명령어와 적당한 옵션(-z)으로 한방에 처리할 수 있다.)
  • 명령어
    • tar 압축하기 (파일들을 묶어줌과 동시에 gzip을 사용하여 압축한다.)
      $ tar -zcvf 압축결과파일명.tar 압축파일및폴더1 압축파일및폴더2 ...
    • gzip 압축하기
      $ gzip 파일명.tar
    • tar.gz 파일 압축 풀기
      $ tar -zxvf 파일명.tar.gz
    • gz 파일 압축 풀기
      $ gzip -d 파일명.gz
    • tar 옵션
      -z : gzip과 관련하여 압축 또는 해제를 한번에 처리
      -c : tar 파일 생성
      -x : 압축 파일 풀기
      -v : tar 작업 진행 상황 출력
      -f : tar 파일 확인