본문 바로가기
대학원 공부/computer science

Big Data : Hadoop : lecture_1 : Overview of Hadoop

by 월곡동로봇팔 2019. 10. 25.

Hadoop 이란?

hadoop 이란 distributed file system을 의미한다. 흔히 HDFS라 한다. 우리는 hadoop을 이용하여

  1. Big data를 분산저장하고
  2. 분산 저장한 data를 MapReduce나 다른 함수를 통해 분석하여 dataset을 생성한다.

우린 그 전에 Big Data가 뭔지 알아야한다.

 

배경에는 하드디스크는 엄청나게 발전을 하였지만, 실제 연산속도는 하드디스크 발전을 따라가지 못하였다.

따라서 우리가 single drive에서 읽는 속도가 엄청나게 느리고, 또한 쓰는 속도도 느리다.

->

이를 해결하기 위해 data를 split해서 여러 disk에 분산 저장한다.

 

이렇게 분산 저장하면 문제점이 또한 발생한다.

 

  1. hadoop은 comodity hardware로 이루어져있다. 이는 자주 failure를 일으키기 때문에 -> 이러한 fail을 보완하기 위해 hadoop은 분산저장을 한다.
  2. 여러 output을 어떻게 하나의 output으로 합칠까? -> MapReduce

 

MapReduce
HDFS

HDFS에 파일을 나눠서 저장, MapReduce라는 모델을 기본으로 쓴다.

 


Mapper, Reducer 파이썬 파일 예시

Hadoop을 왜 쓰는지!!

script에서 실행하는 것 vs hadoop

script에서 실행을 하면, single machine에 local drive 하나이기 때문에, data가 클 경우 부하가 많이 걸린다.

But!! 

hadoop에서 실행을 한다면, 여러개의 node와 drive에서 실행을 하기 때문에 (Data분할, 저장, 복사) 부하가 적게 걸리고, 시간도 단축할 수 있게 된다.

 

Hadoop MapReduce Model

hadoop은 기본적으로 위와 같은 모델을 가지고 있다.

한 Node 안에 split 되어있는 data들이 저장되어있고, 이들은 비슷한 속성을 가진 data들끼리 모여있게 된다.

이러한 특성을 locality라고 부른다. locality 때문에 연산속도가 더욱 더 빠르게 된다.

 

또한 MapReduce는 Batch processing system을 쓰고 있다.

batch는 한 번에 data를 모은 후 분석하는 시스템을 말한다. 이는 trade-off를 가지고 있다.

한 번에 모은 후 분석을 하기 때문에 내가 원할 때 마다 실시간 분석은 하기가 힘들다.


Hadoop 연계 시스템

hadoop은 여러 연계 시스템을 사용한다. (요거는 내가 쓰려고 포스팅)

 

HBase는 column-oriented, sparse store가 특징이다. batch-random access 이기 때문에 Google Bigtable에 사용

Pig는 Procedural SQL-inspired lang.

Hive는 SQL-like query language이다. HBase or Pig를 연결해주는 언어이다.


MapReduce

Mapreduce의 interface

다음은 MapReduce의 Mapper의 interface를 java로 코드화 한 것이다. 

MapReduce는 다음과 같은 구조를 가지며

1. void configure에서 job을 configure를 해준다. Mapper는 K1, V1, K2, V2를 입력파라미터로 가진다.

2. void map 함수는 

Mapper, Reducer

Mapper에게 들어간 data는 는 Partition을 진행한다.

Partition은 여기서 입력받은 k1,v1을 Partition 하여 나눠둔다. 그 후에 뒤에 int count를 붙여준다.

그래서 (k1,v1) -> (k2, v2[ ]) 로 output을 준다.

Combiner는 Mapper에서 나온 output을 그대로 이어받아서 k2,v2 형태를 취합해서 뒤에 int count [ ] 를 int counts로 변환해준다. 그래서 (k2, v2[ ]) -> (k3, v3)[ ] 로 output을 Reducer에게 준다.

Reducer는 k3, v3 [ ] 를 받아서 최종적으로 같은 key, value 끼리 모은 후, 그 counts들을 취합한다.

 

나중에 MapReduce의 단계적인 설명은 뒤에서 자세히 설명할 계획이다.

 

 


HDFS & MapReduce Model

HDFS & MapReduce 모델이다.

HDFS 는 Datanode와 Namenode로 구성이 되어있고, Namenode는 Datanode를 관리하는 역할을 한다.

Datanode는 Data를 분산 저장하고 여기서 연산을 한다.

 

Hadoop 1.x- 은 JobTracker와 TaskTracker 로 구성이 되어있고, 

Hadoop 2.x- 은 NodeManger와 ResourceManager 로 구성이 되어있다.

 

JobTracker가 Job을 관리하고 TaskTracker가 Job을 실행한다.

 

이 부분도 뒤에 슬롯에서 제대로 다룰 예정이다.

 


HBase

MapReduce & HBase

MapReduce & HDFS HBase
분산저장 + 컴퓨팅 Random-access read & write operation으로 추가
Batch-Processing Powerset으로 발전 (멱집합) , Column Oriented database
개별적으로 update 불가 Google's Bigtable을 근간으로 함

HBase Model

다음은 HBase Model이다. 

HBase는 Hadoop Database를 줄임말로, Hadoop에서 실제로 쓰는 Database System이다.

실제로 우리는 HBase 와 RDMS를 비교하곤 한다.

 

RDMS HBase
Row-oriented Column-oriented
Fixed Schema Free Schema (data를 저장할 때 fix X) = No real indexes
ACID = (원자성, 일관성, 고립성, 지속성) Atomic row writes -> Batch processing $ Fault Tolerance

RDMS는 Row-oriented이기 때문에 특정 index에서의 값을 찾으려면 row를 하나 하나 열어봐야하기 때문에

적은 data에서는 금방 찾지만, 만약 data가 엄청나게 크다면, 이는 비효율적이다.

 

따라서 Big Data를 다루는 Hadoop에서는 HBase를 도입, Column-Oriented를 지향하면서 내가 찾고자 하는 Column을

들어가 특정 값을 찾고 출력하게 된다. 그만큼 accessing이 빠르다.

또한 Column 집합에 따라서 data들이 모여있어, 비슷한 속성들이 모여있는 data locality가 보장이 된다. (column family)

 


Hive

 

Framework Design

Hive 는 SQL-query language 로써 Database를 관리하는 일종의 언어이다.

Hive를 이용해 query를 진행, Job을 launching을 하여 처리로 가능하다.

또한 JOIN, Multi GROUP BY, Multi-table insert, Sampling이 가능하다.

 

Data는 table에 속해있다. 그렇지만 이미 존재하는 데이터를 써야한다.

 

Hive는 Partitioning Columns 되어있다. 이는 HDFS directories와 연결되어있다. 

ex) datadir / 2009-03-12 / 18_30_00 (date, time) 

또한 HDFS file 안에 Data Column이 저장되어있다.

HDFS가 Column으로 분리가 되어있기 때문에 = partition이 잘 되어있어 바로 data 처리를 할 수 있다.

 

Hive는 일반적인 data type을 지원하고, 어디에나 도입이 가능한 serialization을 지원한다.

 

시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장 (이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.

오브젝트를 직렬화하는 과정은 오브젝트를 마샬링한다고도 한다. 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화 또는 디시리얼라이제이션(deserialization)이라고 한다.

 

 

댓글