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 파일 확인

2016년 1월 19일 화요일

올해목표 한달에 한권이상

작년에도 한달에 한권 독서하기 계획을 세웠던거같은데 책만 사고 읽지는 않았네요..^^;
올해는 꼭 한달에 한권읽기를 하려고 합니다.
그리고 계독이라는 것을 알았는데요.
계독도 도전해보려구요.
일단 책을 읽으면서 제가 좀더 알아보고 싶은 분야라던가 관심이 생기면 계독을 해보려구요.
아직 자세한 계획을 세우진 않았지만, 한달에 한권이상! 독서후 블로그에 독후감(?) 형식으로 느낀점, 제 생각을 정리할겁니다.
작년보다 더 나은 올해가 되길 바라며
하나하나씩 목표를 세우고 실천해보겠습니다^^


(아이폰으로 blogger앱을 설치해서 글을 써보았는데요.
제 폰이 6+인데 고해상도를 지원을 아직 안하네보네요..
블로그 관리기능도 거의 없는 수준이고요..ㅠ
PC에서 다양한 기능들이 많은데 아쉽네요)

2016년 1월 18일 월요일

컴퓨터 하드웨어 사양 비교하기

최근 사무용&개발용 노트북을 바꾸려고 알아보고 있습니다.
현재 회사에서 쓰고있는 맥북이 밧데리가 수명이 다하고, 2012년 모델이어서 너무 무거워요ㅠㅠ
가볍고 성능좋은 노트북으로 바꾸려고 하는데요. (레티나면 더 좋구요)
맥북 레티나를 사면 좋겠지만 자금상황이 좋지 않으므로... 100만원 초반대로 알아보고 있어요.

하지만.. 전 하드웨어 무식자이기 때문에 노트북알아보기가 쉽지가 않네요. ㅠ
그래서 오늘은 컴퓨터 하드웨어 사양을 자세히 알아보려구요.

 현재 사용중인 맥북 스펙을 알아보고, 다른 노트북들과 비교해보겠습니다.


  • 현재 사용중인 맥북 스펙 (사무용)
    • CPU : i5-2435M(2.4GHz)
    • RAM : 4GB 
    • 저장공간 : 500GB HDD
    • 해상도 : 1280x800
    • 무게 : 2.04kg
    • VGA : HD 3000
    • 사이즈 : 13.3인치

  • 현재 사용중인 맥북 스펙 (개발용)
    • CPU : Intel Core i5 (2.4GHz) 
    • RAM : 8GB 1600 MHz DDR3 
    • 저장공간 : 500GB HDD
    • 해상도 : 2560x1600
    • 무게 : 2.04kg
    • VGA : HD 3000
    • 사이즈 : 13.3인치



Gram 13ZD940/i7-4500U/8GB/256GB/HD4400 새제품 (그래.. 이정도는 되야지)
Gram 14Z950/i7-5500U/8GB/256GB/HD5500 i7-5500U(2.4GHz) CPU 비교

  • CPU
    CPU의 성능을 나타내는 단위는 Hz(헤르츠)입니다. 1Hz는 1초에 1번 작동함을 나타냅니다. kHz=10^3, MHz=10^6, GHz=10^9 입니다. 예를 들면, 2.4GHz는 1초에 2,400,000,000번 동작한다는 것입니다. (24억이라는 수가 어느정도인지 가늠이 안가시죠^^;)
    또한 CPU 성능은 코어, 클럭, 캐시메모리 순으로 비교해 볼 수가 있습니다. 코어는 싱글코어(1), 더블코어(2), 트리플코어(3), 쿼드코어(4), 헥사코어(6) 등이 있습니다. 멀티코어 프로세서는 2개 이상의 느린 프로세서를 하나의 칩에 결합시켜 열 발생과 전략 소모를 줄였구요. 관리할 시스템 수가 줄어들기 때문에 유지, 보수 비용이 적게 듭니다.

    i3, i5, i7 Intel의 브랜드
    i3는 듀얼코어, i5, i7 쿼드코어





http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=101&docId=187393485&qb=aTctNDUwMFU=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=SpxT2spySEZssaDUnL0sssssstl-180633&sid=nBgSovFKRIhaIFTfDGwufA%3D%3D

2016년 1월 13일 수요일

첫 블로그 개시!

입사 후 이것저것 많은 것들을 공부하고 있는데 정리가 안되어서..
정리할겸 많은 분들과 지식을 공유하고 싶어서 블로그를 만들게 되었습니다.

원래는 네이버 블로그를 이용해서 간간이 글을 스크랩하는 수준으로 글을 올렸었는데요
이제는 더 많은 내용을 찾아보고 체계적으로 글을 작성하여 공유하려고 합니다. ^^


여러 블로그 솔루션(?)들 중에 고민을 많이 했는데요..
워드프레스, 티스토리, 블로거..

일단 요 녀석으로 결정했습니다..^^
(방문자 통계라든지 광고기능이 끌렸습니다...ㅎㅎ)


그럼 양질의 콘텐츠들 많이 올릴게요~~