2019. 12. 2. 11:15ㆍGo to 코딩천재/Big Data
Hadoop
1.
Hadoop은 Apache의 오픈소스 프로젝트이며, Java로 개발된 프레임워크이다.
여러 개의 commodity hardware(상용 컴퓨터)를 사용하여 대용량 비정형 데이터를 분산 저장 및 처리할 수 있다.
> 필요성?
>> 인터넷 보급률 증대에 따라, 빅데이터 시대를 맞이함
>> 빅데이터를 처리하기 위해 저장소가 마땅치 않음 (scale up에도 한계가 있기 때문에 scale out이 필요함)
>> 여러 저장소에 분산하여 관리할 필요가 있음
2.
Hadoop Eco-System
: Hodoop은 분산 프로그래밍 프레임워크이며, Hadoop Eco-System은 Hadoop을 이루고 있는 다양한 서브 프로젝트의 모임이다.
- 스트리밍 데이터 : 대량 데이터의 흐름 속에서 즉각적인 데이터 분석이 필요한 데이터
3.
Hadoop과 함께 사용되는 오픈소스 프로젝트에는 아래와 같은 것이 있다.
- Hbase : Hadoop 의 DB
- Hive : HDFS에 저장된 데이터의 구조를 정의, 쿼리작업을 수행하는 데이터 웨어하우스 프로그램.
SQL과 유사한 HiveQL을 사용한다.
- Spark : 범용적이면서도 빠르게 작업을 수행할 수 있도록 설계된 클러스터용 연산 플랫폼
>> 범용적 : HDFS 뿐만 아니라 Hive, HBase, PostgreSQL, MySQL, CSV 파일 등도 처리 가능함
>> 빠름 : 인메모리로 작업 수행함
>> Hadoop의 디스크 기반 데이터 처리가 매우 비효율적임에 따라, 인메모리 방식의 spark를 함께 사용하게 됨
>>비효율 : 데이터 처리 시간 외 디스크에서 read하는 시간 추가 소요 / 반복 쿼리 수행 시 중간 결과도 디스크에 read/write 반복 -> interation 작업에 부적합 / 동일 데이터 작업 시 매번 read 연산 필요)
*인메모리 : 애플리케이션 운영을 위한 데이터를 하드 디스크가 아닌 메인 메모리에 모두 올려서 서비스를 수행하는 것.
즉, 연산을 위한 영역으로만 여겨졌던 메모리 영역을 연산뿐 아니라 저장을 위한 공간으로 사용하는 것.
주로 많은 양의 트랜잭션 처리에 이용되지만, 최근 빅데이터의 실시간성을 보장하기 위한 고속 데이터 처리에 사용되고 있다.
Hadoop의 구조
1.
Hadoop은 빅데이터 처리를 위해 Cluster 구조를 이루고 있다. 이는 아래와 같이 구성되어 있다.
- Hadoop Cluster = rack + rack + ...
- rack = node + node + ... (3-40개)
- node = computer
*Cluster : 여러 대의 컴퓨터가 네트워크로 연결된 것. 이때 각 컴퓨터를 '노드'라고 부른다.
2.
Hadoop Cluster의 주요 컴포넌트로 HDFS와 MapReduce가 있다.
HDFS는 Hadoop 저장소에 파일을 저장하여 관리하는 체계를 뜻하고,
MapReduce는 HDFS의 파일 및 데이터를 이용하여 연산작업을 할 수 있는 프로그램이다.
Master Node (서버) | Slave Node (서버) | Client PC (작업자) | |
HDFS | NameNode | DataNode | |
MapReduce | Job Tracker | Task Tracker |
- HDFS (Hadoop Distributed File System)
: 분산시스템의 문제인 Fault tolerance(데이터 유실)를 해결하기 위해 HDFS에서 데이터를 복제하여 관리한다.
: 저사양의 서버를 이용해서 스토리지를 구성할 수 있어 기존의 대용량파일스시스템(NAS, DAS, SAN등)에 비해 장점을 가진다
: HDFS는 데이터를 블록 단위로 저장한다. 기본적으로 64MB, 대부분은 128MB를 블록사이즈로 지정한다.
하나의 블록은 3개(개수는 조절 가능)로 복제되며, 각각 다른 노드에 분산 저장된다.
> 이유?
>> 데이터가 디스크에 얼마나 저장 가능한지 계산하기 쉽다.
>> 데이터를 복제할 때, 부분적으로 복제하여 여러 분산 노드에 저장할 수 있다.
>> 블록은 데이터 공간을 낭비하지 않는다.
[ Node1 ] [ Node2 ]
block1 block1
block2 block3
=> 여기서 Node1이 충돌해도, Node2가 block1을 가지고 있기 때문에 데이터 처리가 유지된다.
: HDFS는 스트리밍 방식으로 데이터에 접근하기 때문에 순차적으로 데이터를 조회한다.
: 한 번 저장한 데이터는 수정 불가하며, read와 append만 가능하여, 데이터 무결성을 유지한다.
: 데이터 수정은 불가하지만, 파일 이동 & 삭제 & 복사 가능한 인터페이스를 제공한다.
: HDFS는 하나의 NameNode와 여러 개의 DataNodes를 가진다. (Secondery NameNode 가질 수 있음)
> NameNode?
>> 마스터 역할을 하는 노드로, DataNodes 에 대한 정보를 가진다.
>> filesystem의 모든 metadata(블록이 저장된 디렉토리명, 파일명 등)를 메모리에 저장하므로, 큰 메모리를 가지는 것이 좋음.
> DataNodes?
>> 실제 데이터가 저장되는 노드로, 데이터의 블록을 저장한다.
>> 여러 개의 DataNode로 구성된다.
>> 주기적으로 NameNode에게 블록 리포트를 전송한다.
- HDFS 클라이언트
: Hadoop Application은 HDFS에 파일 저장 및 조회를 위해 HDFS 클라이언트를 제공한다.
: 클라이언트는 API형태로 제공된다.
: 클라이언트는 NameNode에 접속해 원하는 파일이 저장된 블록 위치를 확인 후, 해당 DataNode에서 직접 데이터를 조회한다.
- MapReduce
: MapReduce map tasks와 reduce tasks로 나뉘어 각 노드에서 평행하게 동작하는 연산 프로그램이다.
Map/Reduce 이용한 데이터 처리
: 컴퓨터 클러스터 -> input file -> Map/Reduce Function으로 중복 제거 -> Output file (=HDFS)
3.
파일 읽기 요청에 따른 동작과정은 아래와 같다.
1) App이 HDFS 클라이언트에게 파일 읽기를 요청한다.
2) 클라이언트는 NameNode에게 해당 파일이 저장된 블록 정보를 요청한다.
3) NameNode는 메타데이터를 통해 블록 정보를 반환한다.
4) 클라이언트는 해당 DataNode에 직접 접근하여 블록 조회를 요청한다.
5) DataNode는 클라이언트에게 블록을 전송한다.
6) 클라이언트는 App에 데이터를 전달한다.
4.
파일 저장 요청에 따른 동작과정은 아래와 같다.
1) App이 HDFS 클라이언트에게 파일 저장을 요청한다.
- HDFS 클라이언트는 NameNode에 파일 블록들이 저장될 경로 생성을 요청한다.
- NameNode는 해당 경로가 없으면, 경로를 생성하고 다른 클라이언트가 접근하지 못하도록 락을 건다.
그 후, 클라이언트에게 저장할 DataNode 목록을 반환한다.
2) 클라이언트는 첫 번째 DataNode에게 데이터를 전송한다.
3) 첫 번째 DataNode는 데이터를 로컬에 저장 후, 두 번째 DataNode에 전송한다.
4) 두 번째 DataNode도 3번을 반복한다.
5, 6) 로컬에 모두 저장 후, 각 DataNode는 자신에게 데이터를 넘긴 DataNode에게 로컬 저장 완료를 알린다.
7) 첫 번째 DataNode는 클라이언트에게 파일 저장이 완료 되었음을 알린다.
5.
NameNode에 fail이 났을 경우를 대비하여, JournalNodes가 있다.
- 최소 3개, 홀수개로 존재한다.
- NameNode가 무조건 한 개의 active를 가진다.
JournalNodes는 함께 동작하는데, 만약 NameNode가 죽으면 다른 NameNode를 active시키는 역할을 한다.
[+ 부록]
Hadoop 명령어
*명령어 앞에는 언제나 [hadoop fs - ]를 붙인다
1. 데이터 복사
(1). 로컬 <-> 클러스터
클러스터 -> 로컬
>> copyToLocal 하둡경로/* 로컬경로/
>> get
로컬 -> 클러스터
>> copyFromLocal 로컬경로/* 하둡경로/
>> put
(2). 클러스터 <-> 클러스터
클러스터 -> 로컬 -> 클러스터
클러스터 -> 클러스터
>> cp
>> distcp
2. 용량 확인
df -h
3. 디렉토리 생성
mkdir 경로/새디렉토리명
참고 : https://www.opentutorials.org/course/2908/17055
하둡(Hadoop) 소개 및 기본 구성요소 설명 - 내가 아는 모든 IT ~
하둡이란? 분산 환경에서 빅 데이터를 저장하고 처리할 수 있는 자바 기반의 오픈 소스 프레임 워크. 구성요소 1. 하둡 분산형 파일시스템(Hadoop Distributed FileSystem, HDFS) 하둡 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일시스템 특징 : 1. HDFS는 데이터를 저장하면, 다수의 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지 2. HDFS에 파일을 저장하거나, 저장된 파일을 조회하려면 스트리밍
www.opentutorials.org
'Go to 코딩천재 > Big Data' 카테고리의 다른 글
[Kafka] 용어 알아가기 (0) | 2019.12.29 |
---|---|
[Kafka] Kafka 개념 및 기본사용법 (0) | 2019.12.22 |
[Spark] 스파크 개념잡기 (0) | 2019.12.15 |