Hadoop
HDFS Hadoop Distributed File System
데이터 저장을 위한 것.
NameNode(master) DataNode(slave)가 있다.
데이터노드는 여러개 있다.
데이터를 여러 블록으로 나눠서 저장한다.
기본값은 128메가인데 바꿀 수 있다.
반응속도보다는 시간당 처리량에 최적화 돼있다.
한번 쓰고 여러번 읽는 모델에 적합하다. 즉, write가 한번 있으면 수정이 없는 모델에 적합하다.
계산 할 때 자료가 워낙 크니까 자료를 옮기기 보다는 계산 작업을 자료 쪽으로 옮긴다.
데이터노드에서 직접 알고리즘을 처리하는 건가. 이걸 데이터 지역성이라 한다.
네임노드에 저장되는 메타데이터는 네임스페이스와 블록 정보가 담겨있는 Fsimage파일과, 파일의 생성, 삭제에 대한 트랜잭션 로그, 메모리에 저장하다가 주기적으로 생성되는 Edits파일이 있다.
네임노드가 구동되고 나면 Edits파일이 빠른 속도로 주기적으로 생성된다. 이 때문에 디스크 부족이 발생하고 재구동 되는 시간도 느려진다.
따라서 세컨더리 네임노드가 Fsimage와 Edits파일을 주기적으로 머지해서 Edits파일을 삭제하기 때문에 디스크 부족 문제를 해결한다.
Yarn Yet Another Resource Negotiator
Cluster resource management
노드의 뭉텅이를 관리한다.
Resource Manager(master) NodeManager(slave)가 있다.
하둡2.0부터 제공되는 리소스 관리 플랫폼으로 MapReduce의 단점을 보완한다.
하둡1.0에서는 MapReduce의 JobTracker가 두 가지 기능을 했는데 하나는 클러스터 전체의 리소스 관리이고 다른 하나는 잡 스케쥴링 및 모니터링이다. TaskTracker는 slave node에서 map reduce 작업을 수행했다.
YARN(하둡2.0)에서는 JobTracker의 기능은 ResourceManager, Application Master의 두 가지 프로세스로, TaskTracker의 기능은 NodeManager가 대신하게 되었다.
MapReduce
Data processing
빅데이터에서 Map들을 여러개 생성하고 shuffle&sort한 뒤 더 적은 reduce를 만들어낸 뒤 ouput을 만든다.
------------
Hadoop Ecosystem
원래는 하둡이라는 게 파일시스템과 맵리듀스 프레임워크를 포함하는 말이었지만 점점 하둡 생태계 전체를 포함하는 말로 확장됐다.
분산 코디네이터
- Zookeeper
분산 환경을 구성하는 서버들을 전체적으로 조정해주는 시스템이다.
분산 리소스 관리
- YARN
작업 스케쥴링 및 클러스터 리소스를 관리하는 프레임워크이다.
맵리듀스, 하이브, 임팔라, 스파크 등의 애플리케이션들이 YARN에서 실행된다.
- Mesos
리눅스 커널과 동일한 원칙을 사용하며 컴퓨터에 API를 제공한다.
데이터 저장
- HBase(분산 데이터베이스)
구글 Bigtable을 기반으로 개발된 비관계형 데이터베이스이다.
- HDFS
데이터의 높은 처리량 액세스를 제공하는 분산 파일 시스템이다.
- Kudu(컬럼기반 스토리지)
급변하는 데이터에 대한 빠른 분석을 위해 설계되었다.
데이터 수집
- Chukwa
대규모 분산 시스템을 모니터링 하기 위하 시스템으로 분산 환경에서 생산되는 데이터를 안정적으
로 HDFS에 저장하는 플랫폼이다.
- Flume
많은 양의 데이터를 수집, 집계 및 이동하기 위한 분산형 서비스이다.
- Scribe
데이터 수집 플랫폼이다. Chukwa는 다르게 데이터를 중앙 서버로 전송하는 방식이다. 최종 데이터
는 다양한 저장소로 활용할 수 있다.
- Kafka
데이터 스트림을 실시간으로 관리하기 위한 분산 시스템이다. 대용량 이벤트 처리를 위해 개발되었
다.
데이터 처리
- Pig
하둡에 저장된 데이터를 맵리듀스 프로그램을 만들지 않고 SQL과 유사한 스크립트를 이용해 데이
터를 처리, 맵리듀스 API를 매우 단순화한 형태로 설계했다.
- Mahout
분석 기계학습에 필요한 알고리즘을 구축하기 위한 오픈소스 프레임워크이다.
- Spark
대규모 데이터 처리를 빠른 속도로 실행시켜 주는 엔진이다.
- Impala
하둡기반 분산 에진으로 맵 리듀스를 사용하지 않고 C++로 개발한 인메모리 엔진을 사용해 빠른
성능을 보여준다.
- Hive
하둡 기반 데이터 솔류션으로 자바를 몰라도 데이터 분석을 할 수 있게 도와준다.
- MapReduce
대용량 데이터를 분산 처리 하기 위한 프로그램으로 정렬된 데이터를 분산처리 Map 하고 이를 다
시 합치는 Reduce 과정을 거친다.
---------------
HDFS 아키텍처
하나의 블록은 3개로 복제되며 각각 다른 노드에 분산 저장된다.
네임노드 서버 한 대와 데이터 노드 서버 여러 대가 있다.
네임노드는 모든 메타데이터를 관리하고 클라이언트는 이를 통해서 저장된 파일에 접근한다.
데이터노드는 주기적으로 노드에 저장돼 있는 블록의 정보를 전송하고(블록 리포트) 이를 통해 네임노드는 데이터노드가 정상 작동하는 지 확인한다.
네임노드는 데이터노드가 주기적으로 전달하는 하트비트(3초)와 블록리포트(6시간)를 이용해서 상태를 관리한다.
하트비트가 없으면 데이터노드가 동작하지 않는 것으로 간주하고 I/O가 발생하지 않도록 한다.
블록리포트로는 최신 정보를 유지한다.
HDFS 파일 저장 플로우
애플리케이션이 클라이언트에게 요청하면 클라이언트는 네임노드에게 저장 경로를 요청한다.
네임노드는 경로를 생성한 후 다른 클라이언트가 수정을 못하도록 락을 건 뒤 클라이언트에게 데이터노드의 목록을 준다.
클라이언트는 첫번째 노드에게 데이터를 주고, 첫 노드가 저장 후 두번째 노드에게 주고, 저장 후 두번째가 세번째에게 주고, 셋째가 저장하고 ack를 둘째에게 주고, 둘째는 ack를 첫째에게 주고 첫째는 클라이언트에게 ack를 준다.
HDFS 파일 읽기 플로우
애플리케이션이 클라이언트에게 파일 읽기를 요청하면 클라이언트는 네임노드에게 요청된 파일이 저장돼있는 블록 정보를 요청한다.
네임노드느 메타데이터를 통해 파일이 저장된 블록 리스트를 반환한다.
그러면 클라이언트는 데이터 노드에 접근해서 블록 조회를 요청하고 데이터 노드는 요청된 블록을 전송한다. 이를 클라이언트는 애플리케이션에 전달한다.
Map
흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.
key, value의 형태이다.
Reduce
Map에서 출력된 데이터를 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업이다.
MapReduce의 시스템 구성
Client, JobTracker, TaskTracker로 구성된다.
JobTracker는 NameNode에, TaskTracker는 DataNode에 위치한다.
클라이언트가 분석하고자 하는 데이터를 잡의 형태로 JobTracker에게 전달한다.
JobTracker는 하둡 클러스터에 등록된 전체 job을 스케쥴링하고 모니터링한다.
TaskTracker는 DataNode에서 실행되는 데몬이고 사용자가 설정한 맵리듀스 프로그램을 실행하며 JobTracker로부터 작업을 요청 받고 요청 받은 맵과 리듀스 개수만큼 맵 태스크와 리듀스 태스크를 생성한다.
-----------------
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220957220179&proxyReferer=https%3A%2F%2Fwww.google.com%2F
https://www.opentutorials.org/course/2908/17055
https://wikidocs.net/23582
데이터 저장을 위한 것.
NameNode(master) DataNode(slave)가 있다.
데이터노드는 여러개 있다.
데이터를 여러 블록으로 나눠서 저장한다.
기본값은 128메가인데 바꿀 수 있다.
반응속도보다는 시간당 처리량에 최적화 돼있다.
한번 쓰고 여러번 읽는 모델에 적합하다. 즉, write가 한번 있으면 수정이 없는 모델에 적합하다.
계산 할 때 자료가 워낙 크니까 자료를 옮기기 보다는 계산 작업을 자료 쪽으로 옮긴다.
데이터노드에서 직접 알고리즘을 처리하는 건가. 이걸 데이터 지역성이라 한다.
네임노드에 저장되는 메타데이터는 네임스페이스와 블록 정보가 담겨있는 Fsimage파일과, 파일의 생성, 삭제에 대한 트랜잭션 로그, 메모리에 저장하다가 주기적으로 생성되는 Edits파일이 있다.
네임노드가 구동되고 나면 Edits파일이 빠른 속도로 주기적으로 생성된다. 이 때문에 디스크 부족이 발생하고 재구동 되는 시간도 느려진다.
따라서 세컨더리 네임노드가 Fsimage와 Edits파일을 주기적으로 머지해서 Edits파일을 삭제하기 때문에 디스크 부족 문제를 해결한다.
Yarn Yet Another Resource Negotiator
Cluster resource management
노드의 뭉텅이를 관리한다.
Resource Manager(master) NodeManager(slave)가 있다.
하둡2.0부터 제공되는 리소스 관리 플랫폼으로 MapReduce의 단점을 보완한다.
하둡1.0에서는 MapReduce의 JobTracker가 두 가지 기능을 했는데 하나는 클러스터 전체의 리소스 관리이고 다른 하나는 잡 스케쥴링 및 모니터링이다. TaskTracker는 slave node에서 map reduce 작업을 수행했다.
YARN(하둡2.0)에서는 JobTracker의 기능은 ResourceManager, Application Master의 두 가지 프로세스로, TaskTracker의 기능은 NodeManager가 대신하게 되었다.
MapReduce
Data processing
빅데이터에서 Map들을 여러개 생성하고 shuffle&sort한 뒤 더 적은 reduce를 만들어낸 뒤 ouput을 만든다.
------------
Hadoop Ecosystem
원래는 하둡이라는 게 파일시스템과 맵리듀스 프레임워크를 포함하는 말이었지만 점점 하둡 생태계 전체를 포함하는 말로 확장됐다.
분산 코디네이터
- Zookeeper
분산 환경을 구성하는 서버들을 전체적으로 조정해주는 시스템이다.
분산 리소스 관리
- YARN
작업 스케쥴링 및 클러스터 리소스를 관리하는 프레임워크이다.
맵리듀스, 하이브, 임팔라, 스파크 등의 애플리케이션들이 YARN에서 실행된다.
- Mesos
리눅스 커널과 동일한 원칙을 사용하며 컴퓨터에 API를 제공한다.
데이터 저장
- HBase(분산 데이터베이스)
구글 Bigtable을 기반으로 개발된 비관계형 데이터베이스이다.
- HDFS
데이터의 높은 처리량 액세스를 제공하는 분산 파일 시스템이다.
- Kudu(컬럼기반 스토리지)
급변하는 데이터에 대한 빠른 분석을 위해 설계되었다.
데이터 수집
- Chukwa
대규모 분산 시스템을 모니터링 하기 위하 시스템으로 분산 환경에서 생산되는 데이터를 안정적으
로 HDFS에 저장하는 플랫폼이다.
- Flume
많은 양의 데이터를 수집, 집계 및 이동하기 위한 분산형 서비스이다.
- Scribe
데이터 수집 플랫폼이다. Chukwa는 다르게 데이터를 중앙 서버로 전송하는 방식이다. 최종 데이터
는 다양한 저장소로 활용할 수 있다.
- Kafka
데이터 스트림을 실시간으로 관리하기 위한 분산 시스템이다. 대용량 이벤트 처리를 위해 개발되었
다.
데이터 처리
- Pig
하둡에 저장된 데이터를 맵리듀스 프로그램을 만들지 않고 SQL과 유사한 스크립트를 이용해 데이
터를 처리, 맵리듀스 API를 매우 단순화한 형태로 설계했다.
- Mahout
분석 기계학습에 필요한 알고리즘을 구축하기 위한 오픈소스 프레임워크이다.
- Spark
대규모 데이터 처리를 빠른 속도로 실행시켜 주는 엔진이다.
- Impala
하둡기반 분산 에진으로 맵 리듀스를 사용하지 않고 C++로 개발한 인메모리 엔진을 사용해 빠른
성능을 보여준다.
- Hive
하둡 기반 데이터 솔류션으로 자바를 몰라도 데이터 분석을 할 수 있게 도와준다.
- MapReduce
대용량 데이터를 분산 처리 하기 위한 프로그램으로 정렬된 데이터를 분산처리 Map 하고 이를 다
시 합치는 Reduce 과정을 거친다.
---------------
HDFS 아키텍처
하나의 블록은 3개로 복제되며 각각 다른 노드에 분산 저장된다.
네임노드 서버 한 대와 데이터 노드 서버 여러 대가 있다.
네임노드는 모든 메타데이터를 관리하고 클라이언트는 이를 통해서 저장된 파일에 접근한다.
데이터노드는 주기적으로 노드에 저장돼 있는 블록의 정보를 전송하고(블록 리포트) 이를 통해 네임노드는 데이터노드가 정상 작동하는 지 확인한다.
네임노드는 데이터노드가 주기적으로 전달하는 하트비트(3초)와 블록리포트(6시간)를 이용해서 상태를 관리한다.
하트비트가 없으면 데이터노드가 동작하지 않는 것으로 간주하고 I/O가 발생하지 않도록 한다.
블록리포트로는 최신 정보를 유지한다.
HDFS 파일 저장 플로우
애플리케이션이 클라이언트에게 요청하면 클라이언트는 네임노드에게 저장 경로를 요청한다.
네임노드는 경로를 생성한 후 다른 클라이언트가 수정을 못하도록 락을 건 뒤 클라이언트에게 데이터노드의 목록을 준다.
클라이언트는 첫번째 노드에게 데이터를 주고, 첫 노드가 저장 후 두번째 노드에게 주고, 저장 후 두번째가 세번째에게 주고, 셋째가 저장하고 ack를 둘째에게 주고, 둘째는 ack를 첫째에게 주고 첫째는 클라이언트에게 ack를 준다.
HDFS 파일 읽기 플로우
애플리케이션이 클라이언트에게 파일 읽기를 요청하면 클라이언트는 네임노드에게 요청된 파일이 저장돼있는 블록 정보를 요청한다.
네임노드느 메타데이터를 통해 파일이 저장된 블록 리스트를 반환한다.
그러면 클라이언트는 데이터 노드에 접근해서 블록 조회를 요청하고 데이터 노드는 요청된 블록을 전송한다. 이를 클라이언트는 애플리케이션에 전달한다.
Map
흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.
key, value의 형태이다.
Reduce
Map에서 출력된 데이터를 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업이다.
MapReduce의 시스템 구성
Client, JobTracker, TaskTracker로 구성된다.
JobTracker는 NameNode에, TaskTracker는 DataNode에 위치한다.
클라이언트가 분석하고자 하는 데이터를 잡의 형태로 JobTracker에게 전달한다.
JobTracker는 하둡 클러스터에 등록된 전체 job을 스케쥴링하고 모니터링한다.
TaskTracker는 DataNode에서 실행되는 데몬이고 사용자가 설정한 맵리듀스 프로그램을 실행하며 JobTracker로부터 작업을 요청 받고 요청 받은 맵과 리듀스 개수만큼 맵 태스크와 리듀스 태스크를 생성한다.
-----------------
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220957220179&proxyReferer=https%3A%2F%2Fwww.google.com%2F
https://www.opentutorials.org/course/2908/17055
https://wikidocs.net/23582
댓글
댓글 쓰기