• Hadoop과 Spark Storm 정리하기

    2019. 3. 6. 17:49

    by. 위지원

    마음을 가다듬기 위해 오랜만에 플랫폼 특징이나 구경하자.


    관련 이미지


    빅데이터 처리/저장 자바 기반 오픈 소스 프레임 워크 현재 hadoop 3까지 나와있음 버전별 특징은 https://118k.tistory.com/542


    1.Map-Reduce

    - Map: key,value의 형태로 데이터를 담아두는 자료구조중의 하나

    - Reduce: Map 결과 데이터를 사용하여 필요한 연산을 수행하여 데이터를 합치는 방법 key를 기준으로 value를 sum,average등의 결과를 얻을 수 있음

    - 맵리듀스 프로그램의 하나의 작업 단위를 job이라고 함.


    2.HDFS(Hadoop File System)

    - 데이터를 다수의 노드에 복제하여 저장해서 : 데이터 유실 방지

    - 한번 저장한 데이터는 수정할 수 없고 읽기만 가능하여 : 데이터 무결성 유지 *Hadoop 2.0은 append 가능

    - 파일 이동,삭제, 복사 할 수 있는 인터페이스 제공


    구성

    - 네임 노드(master) : 

    - Job Tracker가 존재 : 전체 job의 스케쥴링을 관리하고 모니터링을 수행 (꼭 네임노드에 있진 않음)

    - 파일 시스템의 메타데이터 관리

    - 네임노드 관리 ex) 주기적으로 네임노드에게 하트비트를 전송

    - 클라이언트 요청 접수

    - 데이터 노드(slave) :

    - Task Tracker가 존재 :  사용자가 설정한 맵리듀스 프로그램을 실행, jpb tracker의 작업 요청을 받고 요청 개수만큼 map과 reduce task를 생성 및 실행

    - Client가 HDFS에 저장하는 파일을 local Disk에 유지

    - 하트비트를 통해 정상 작동여부 확인

    - 보조네임노드(Secondary Name Node)

    - 서버 리부팅씨 데이터 손실을 방지하기 위해 editslog,fsimage라는 파일을 생성하는데,editslog는 변경이력을 저장하고 fsimage는 메모리에 저장된 메타 데이터의 파일 시스템 이미지를 저장한다. 근데 당연히 editslog가 커지면 fsimage 만드는데 시간 소요가 클 것이다. 이걸 해결하려고 보조네임노드는 fsimage를 갱신해주는 도우미 역할을 한다.



     3. Yarn(Yet Another Resource Negotiator)

    - Resource Managemnet를 위한 것으로 각 어플리케이션(Hbase,Storm...등)에 필요한 리소스를 할당 및 모니터링 해준다. Hadoop 2.0에 등장함

    - 하둡1.0에서 JobTracker와 TaskTrakcer의 기능을 분할한건데

    - JobTrakcer가 하던걸 Resource Manager(클러스터의 전반적인 자원관리와 스케쥴러,Application Master실행), Application Master(노드 메니저들의 자원상태를 관리하고 부족한 리소스 할당) 의 두가지 프로세스로

    - TaskTracker가 하던걸 NodeManager(리소스 사용량 모니터링하고 Resource manager에게 정보를 알림)


    => Job tracker가 맵리듀스 실행 요청을 받고 스케쥴리 리소스관리까지 다하다 보니까 많은 메모리를 유지해야한다. 가 문제점이여서 해결하려 한것.

    => yarn때문에 map-reduce말고 다른 spark과 같은 분산 처리 모델도 수행이 가능해졌음


    장점 

    단점

    - 오픈소스이고, 저렴한 구축 비용과 비용대비 빠른 데이터 처리

    - 시스템을 중단치 않고 장비를 추가할 수 있음

    - 오프라인 배치 프로세싱에 최적화

    - 실시간 데이터 처리에 부적합

    - 설정이 어려움




    spark에 대한 이미지 검색결과



    빅데이터 분산처리시스템 오픈소스 메모리 하둡이라고도 불리며 빠른 성능을 위해 인 메모리 캐싱과 최적화 된 실행을 제공함 또한 spark streaming,sparkML,spark graphX등 다양한 tool을 지원

    하둡은 데이터를 매번 disk에서 가져오는데에 비해 메모리에 데이터를 유지해서 속도를 개선시켰다.(인-메모리일땐 하둡보다 무려 100배나 빠름)


    RDD(Resilient Distributed Datasets)라고 불리는 immutable JVM 객체들의 집합.

    - job들이 매우 빠르게 연산을 수행할 수 있도록 해주며 메모리상에서 캐시되고 저장되고 계산되어짐.

    -새로운 RDD를 리턴하는 트랜스포메이션과 연산 하고 값을 리턴하는 action의 두가지 종류의 연산이 있음



    Spark driver(master)에서 Executor(slave)에게 일을 나누어줌

    - Driver Program은 SparkContext를 생성

    - 중간에 Cluster Manager는 Mesos,Yarn과 같은 클러스터 매니저 또는 그냥 spark에서 사용하는 manager일 수 있음

    - Driver는 Cluster Manager를 통해서 사용할 수 있는 Executor를 알아내고 그 executor(프로세스)에게 작업을 전송


    - Cluster Manager : 자원관리


    - Worker Node에서는 Executor가 Task를 수행함

    - 작업 결과는 Driver에게 돌려줌

    - 각 executor 안에는 Block Manager라는 서비스가 존재하며 사용자 프로그램에서 캐시하는 RDD를 저장하기 위한 메모리 저장소를 제공함





    *여기서 driver라는 뜻은 프로그램의 main() 메서드가 실행되는 process를 의미해서 SparkContext를 생성하고 RDD를 만들고 트랜스포메이션, 액션을 실행하는 사용자 코드를 실행하는 하나의 프로세스임

    1. 사용자 프로그램을 Task로 변환해줌

    2. Executor에서 Task들의 스케쥴링을 함


    실행 순서

    1. 사용자는 spark-submit으로 어플리케이션을 제출

    2. spark-submit은 Driver를 생성하고 main()메서드 호출

    3. Driver는 Cluster 매니저한테 Executor 실행을 위해 요청

    4. Cluster Manager가 Executor 실행시켜줌

    5. Driver가 RDD연산을 보고 job->task단위로 나누고 executor에게 나눔을 함

    6. executor는 받은 일을 다하고 결과를 driver한테 줌


    장점

    단점

    - 인-메모리 처리로 인한 hadoop에 비해 월등해진 속도

    - 사용자 편의를 위한 다양한 API 제공

    - 다양한 언어 사용 가능

    - 대화형 콘솔 spark-shell을 지원

    - 다양한 유형의 Cluster Manager 사용 가능

    - 일괄처리, 온라인 분석 처리에 유용

     - 데이터 셋이 작으면 오히려 분산 작업으로 하면 성능이 떨어질 수 있음

    - 대량의 트랜잭션을 빠르게 처리하는 어플리케이션에 적합하지 않음

    (염두해두고 설계하지 않았다함)



    Spark Stack


    Spark Core

    - 스파크 job과 다른 spark component(spark sql,spark streaming등)에 필요한 기본 기능을 제공

    - RDD로 다양한 연산 및 변환 메서드 제공

    - 다양한 파일 시스템에 접근 가능

    - 공유 변수, 누적변수를 사용해 컴퓨팅 노드간 정보 공유

    - 네트워킹, 보안, 스케쥴링등의 기본 기능 제공


    Spark Streming

    - 실시간 스트리밍 데이터를 처리하는 프레임 워크

    - 이상 스트림(Discretized STream,Dstream)방식으로 스트리밍 데이터를 표현하여 가장 마지막 타임 윈도우 안에 유입된 데이터를 RDD로 구성해 주기적으로 재생성


    Spark MLlib

    - 머신 런닝 알고리즘 라이브러리

    - RDD 또는 DataFrame을 가지고 머신 런닝 모델을 구현 할 수 있음


    GraphX

    - 스파크의 서브 모듈로써 대용량 데이터의 분산 및 병렬 그래프 처리 기능을 지원


    Cluster Manager

    리소스를 관리하고 할당 및 제거하는 역할을 함

    - 타입은 세가지다

    1. StandAlone : 가장 단순

    2. Apache Mesos : Hadoop의 MapReduce와 서비스 응용프로그램을 실행할 수 있는 일반적인 클러스터 관리자

    3. YARN : 하둡2.0의 리소스 매니저



    apache storm logo에 대한 이미지 검색결과



    Spout와 Bolt의 연결을 이용한 실시간 Streaming 처리 엔진.데이터는 key,value형태로 tuple형태로 입력된다.

    -Spout은 Storm의 데이타를 읽어들이는 데이터 소스 이며 Bolt에게 데이터를 전달한다

    -Bolt는 데이터를 받아서 처리한다.

    spot과 bolt는 여러개가 존재할 수 있다.


    Topology

    토폴로지는 spout과 bolt간의 연결 관계를 정의해서 데이터의 흐름을 정의하는 것을 이야기한다(어디로 들어와서 어디로 나갈지를)


    Storm의 Cluster

    1. Nimbus : 마스터 노드로 주요 설정 정보를 가지고 있으며 프로그래밍 된 토폴로지를 Supervisor 노드로 배포한다(하나만 있음)

    2. Supervisor : 워커 노드로 작업을 실제로 실행한다.

    3. Zookeeper : 여러개의 Supervisor를 관리하기 위해 Zookeeper를 가지고 각 노드의 상태를 모니터링하고 작업의 상태들을 공유한다.



    storm cluster에 대한 이미지 검색결과


    장점 

    단점

    - 실시간 처리에 적합

    - 마이크로 배치 처리도 지원함

    - 스트림 처리의 스타일을 사용자가 지정할 수 있음

    - 다양한 언어 지원

     - 실행중인 토폴로지를 업데이트 하려면 현재 토폴로지를 종료하고 다시 제출해야 함