[컴] HDFS 와 YARN

hdfs와 yarn 의 관계

HDFS 와 YARN

HDFS

  1. Name Node 는 file 에 대한 meta 정보만 기록한다. 실제 data 는 data node 에 저장된다.
  2. name node 와 data node 모두 process 다.
  3. data 를 저장할 때는 깔려있는 OS의 file system 을 이용한다.
  4. HDFS client 를 이용해서 HDFS 와 interact 해야 한다. hdfs client들은 Name Node 에게 meta info 를 요청한다. 그리고 나서 data node에 read/write 관련 요청을 한다. Name Node 를 통해서 data IO 가 일어나지 않는다.
  5. HDFS client 는 Name Node 에 data 를 보내지 않는다. 그렇기 때문에 Name Node 는 Data IO 의 bottleneck 이 되지 않는다.
  6. HDFS client 는 ‘short-circuit’ 기능을 활성화 하기 때문에, 만약 client 가 Data Node를 hosting 하고 있는 Node에서 실행되고 있으면, hdfs client 는 file 을 Data Node 로 부터 file 을 읽는다. read/write 을 네트워크를 통해서가 아니라 local 로 수행한다.
  7. HDFS client 가 web client 고 HDFS 는 web service 400MB file 100MB 의 block size 를 가진 hdfs 에 어떻게 저장될까?

    복사(replication) 의 경우, 다른 data node 3개에 각 block 은 저장된다. meta info 는 name node에 저장된다. Replication factor 가 3이면, 각 block 은 3번씩 저장된다.(저장하는 방법은 block 위치 전략을 참고하자.)

block 위치 전략

  • 첫번째 복사본(replica)을 어딘가에 둔다.
  • 2번째 replica를 1번째 replica와 다른 rack 에 둔다.(한개의 rack의 power가 나가도, 다른 rack의 data를 사용할 수 있다.)
  • 3번째 replica를 2번째 replica와 같은 rack 에 둔다.(이렇게 하면 yarn container가 host에 할당되는 경우에, 같은 rack에 있는 host 에서 data를 제공받을 수 있다. 다른 rack에서 data 를 가져오는 것보단 같은 rack에서 가져오는 것이 빠르다. )
    • me: 최대한 같은 rack에서 hosting 될 확률을 높이는 듯 하다.
  • 더많은 replica들이 있으면, 나머지 rack들에 뿌린다.

YARN

  • YARN은 분산된 application 들을 관리하기 위한 system 이다.
  • YARN은 모든 가능한 cluster 의 resource 들을 중재하는 (arbitrate) 중앙의 Resource Manager(RM) 과 RM 으로 부터 지시를 받는 node마다 있는 Node Manager(NM) 으로 되어 있다.
  • RM 과 NM 은 둘다 process들이다.
  • YARN 은 전 cluster 에 걸쳐있는 scheduling container 이다. 그런이유로 cluster 의 CPU, RAM 이 필요한 end user 는 YARN 과 interact 할 필요가 있다.
    • CPU, RAM 을 요청할 때 필요한 Host 를 정의할 수 있다.
    • YARN 과 interact 하기위해 yarn-client 을 사용할 필요가 있다.

Resource Manager(RM) 은

  • 어떤 job 들이 현재 어떤 Node Manager 위에서 실행되고 있는지(running), 메모리는 얼마나 사용하는지, CPU 는 얼마나 사용되고 있는지 등에 대한 meta info 를 가지고 있다.
  • 그렇기 때문에 전 cluster 에 대한 총 CPU, RAM 사용의 전체적인 view 를 가지고 있다.
  • job들은 Node Manager 에서 실행되고, RM 위에서 실행될 일이 없다. 그런이유로 RM 은 절대 특정 job 수행에 대한 bottleneck 이 되지 않는다.

Node manager 는

  • single node 에서 가능한 resource들을 관리(manage) 한다.(자기가 설치된 곳의 resource를 관리한다.)

hdfs 와 yarn

host 는 하나의 machine 또는 EC2 instance같은 container로 보면 된다.

  • Name Node 와 Resource Manager process 는 그들이 key meta 정보 를 가졌기 때문에 2개의 다른 host 위에서 host 된다.
  • Data Node 와 Node Manager process들은 같은 host 에 위치한다.

file 은 HDFS(Data Nodes) 위에 저장되고, 분산의 방법으로 file 에 access 를 하려면 누군가 YARN client 를 이용해서 YARN application 을 만들어야 한다. data 를 읽기 위해서는 HDFS client 를 이용하자.

분산 application 은 file location 을 가져올 수 있다.(Name Node 로 부터 meta info 를) 분산 application 은 RM에게 물어보고 ‘file block 들을 갖고 있는 host’ 에 있는 container들을 제공받게 된다.

HDFS 에 의해 제공되는 short-circuit 최적화를 기억하자. 그렇기에 만약 분산 job 이 ‘file block 을 host 하는 host’ 에서 container 를 얻고, 그것을 읽으려고 시도하면 read 는 local 이 될 것이고, network 를 이용하지 않을 것이다.(me: 분산job 이 현재 작업하는 container 가 돌아가고 있는 machine 이 있고, 그 machine 에 원하는 file block 을 가지고 있는 data node 가 있다면, 굳이 network 를 거쳐서 file block 을 가져오지 않고, 바로 local 로 read 를 한다.)

seqential 하게 file 을 읽을때 4 초 (100MB/s 속도) 정도 걸리던 것을 1초에 읽을 수 있다. 다른 YARN container(Node Manager) 에서 분산 process 가 병렬로 돌고 있고, 4개가 1초에 100 MB/s 를 읽으면 된다.

See Also

  1. 쿠…sal: [컴] docker 로 hdfs 설치

References

  1. Understanding basics of HDFS and YARN - Cloudera Community - 248860

댓글 없음:

댓글 쓰기