Distributed Computing for Big Data

How Hadoop Works (Storage)

esfolio 2019. 10. 3. 23:50

 

숭실대학교 컴퓨터학부 박영택 교수님의 <빅데이터 분산 컴퓨팅> 강의를 듣고 정리했다.

 

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

 

ex

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 의 구성요소)