How Hadoop Works (Storage)
숭실대학교 컴퓨터학부 박영택 교수님의 <빅데이터 분산 컴퓨팅> 강의를 듣고 정리했다.
HDFS Basic Concepts
*HDFS는 JAVA로 작성된 파일 시스템
-google의 GFS 기반
*기존 파일 시스템의 상위에서 동작
-ext3, ext4 or xfs
HDFS의 file 저장 방식
- file 은 block 단위로 분할 (각 block은 기본적으로 64MB 또는 128MB 크기) 그런데 file이 이 block의 크기보다 작을 때, block 크기 전체를 사용하지는 않는다.
- 데이터가 로드 될 때 여러 machine에 분산되어 저장됨(같은 file의 다른 block들은 서로 다른 machine에 저장됨, 이를 통해 효율적인 MapReduce 가능)
- block들은 여러 machine에 복제되어 data node에 저장됨(기본 replication 은 3개-> 각 block은 서로 다른 3개의 machine에 저장되어 있음)
- name node 로 불리는 master node는 어떤 block들이 file을 구성하고 있고, 어느 위치에 저장되어 있는지에 대한 정보를 meta data로 관리
지금 사용하고 있는 컴퓨터 안에 CDH를 설치했다. 그렇게 virtual machine 을 만들어서 local, HDFS로 나눈다.
local에서 데이터를 세 block으로 나눠서 HDFS로 저장한다.
local에서 HDFS로 데이터를 저장할 때, 세 개로 copy를 해서 data node에 저장한다.
왜?
->hadoop은 google의 GFS를 보고 만들었는데, google이 GFS를 만들 당시 벤쳐회사였기 때문에 돈이 많지 않았다.
그래서 가격이 저렴한 legacy PC를 여러 대를 구입해서 대용량 데이터를 저장했다. 근데 이 때 PC중 몇 대가 고장이 나면 데이터가 유실되기 때문에 이것을 막기 위해서 세 개로 데이터를 copy해서 여러 대에 저장을 한 것이다. (partial failure에 대비)
그렇다면 이 데이터들을 copy해서 저장하면 어디에 있는지 어떻게 알까? 이것은 name node가 관리를 한다.
(meta data 저장, meta data는 data에 대한 data라고 할 수 있음. data(block이 어디 컴퓨터에 있는지) about data(file의 block))
name node는 master node라고 하고, data를 저장하는 data node는 worker(slave) 노드라고 한다.
*name node의 metadata를 사용하지 않으면, HDFS에 접근할 수 있는 방법이 존재하지 않는다.
-namenode와 통신하여 file을 구성하고 있는 block들의 정보와 datanode의 block의 위치 정보를 제공받는다.
-이후 데이터를 읽기 위해 data node 와 직접 통신한다
- name node 는 bottleneck이 되지 않는다.
- ex) hadoop fs -get --- 하면 name node한테 파일 위치 물어봐서 가져온다.
HDFS 접근 방법?
shell 커맨드 라인을 사용한다 (hadoop fs)
JAVA API
Ecosystem 프로젝트
-ex) Hue
client가 hadoop fs -get -- 를 하면 name node가 위치를 데이터의 위치를 찾는다.
이후 쉬고 있는 node, 즉 가장 사용하기 쉬운 node에서 데이터를 가져온다. 이 결정은 hadoop 이 함.
그래서 name node는 중요하다. name node가 고장날 것을 대비해 stanby node를 하나 더 두자는 이야기도 나왔다.
지금 본 것은 오른쪽 가지에 있는 data storage jobs다.
왼쪽 가지에 job tracker라는 것이 있고, 각각의 slave에 있는 것을 task tracker라고 한다.
master node는 모든 slave node를 관장한다. 이 각각의 slave node에서는 데이터에 관한 작업을 하는데 이것을 task tracker라고 한다. 이 task들이 어떻게 수행되는지 알고 있어야 하는데 이것을 job tracker가 한다.
정리하자면 아래와 같다(Hadoop 의 구성요소)