Yarn
얀의 이름은 Yet Another Resource Negotiator의 약자이다. 얀은 한마디로 하둡의 리소스를 관리하고 관장하는 시스템이다. 얀의 등장에 의해 하둡은 큰 아키텍쳐의 변화가 생겼다. 1.0에서는 HDFS와 MapReduce만 있는 구조였지만, 얀의 리소스 매니저가 다른 어플리케이션도 지원하면서, 여러 어플리케이션이 HDFS를 접근할 수 있게 되었다. 이 때문에 하둡 위에 Spark나 Hbase와 같은 시스템들이 올라갈 수 있는것이다.
HDFS의 일이 파일을 읽고 쓰는 일이었다면, 얀의 일은 자원을 요청하고 할당하는 일이다. 하지만 이는 사용자(개발자)가 해주지 않고, 시스템이 알아서 해주는 것이다.
얀 어플리케이션은 클라이언트로부터 요청을 받으면 먼저 리소스매니저에게 전달 된다. 그리고 그 요청은 노드매니저에게 전달이 돼서 컨테이너를 실행한다. 이 때 컨테이너는 하나의 자원(cpu, disk space 등) 덩어리이다. 컨테이너가 할당 되면 리소스 매니저에게 할당 요청을 한다 (heartbeat). 만약 해당 노드에 자원이 부족하다면 얀이 다른 노드매니저에게 요창을 해서 자원을 더 요청하게 된다.
리소스매니저
얀은 모든 어플리케이션에게 할당되는 리소스를 리소스매니저를 통해 관리한다. 이 리소스매니저는 기본적으로 데이터의 지역성을 고려해 자원을 할당한다. 그리고 이 지역성은 명시적으로 설정해줄 수 있다. 하지만 그 지역성이 보장되지 않는 상황이면 (지정한 기기나 같은 랙에 자원이 부족할 경우) 충족이 되지 않을 수도 있다.
스파크도 리소스매니저를 가지고있는데, 스파크는 프로세스가 시작할 때 (보통 맵이나 리듀스와 비슷한 작업이 중첩) 지정된 숫자의 엑시큐터가 클러스터에서 돌아가는 방식이다. 하지만 맵리듀스, 즉 얀은 먼저 맵태스크에 리소스를 지정하고, 다시 리듀스에 리소스를 지정하게 된다.
얀의 장점
얀은 먼저 더 큰 확장성을 지원한다. 맵리듀스는 4000노드에 40000태스크를 지원하지만, 얀은 10000노드에 100000개의 태스크를 지원할 수 있게 된다.
그리고 많은 어플리케이션을 지원할 수 있게 되었다. 하둡의 단점을 보완해줄 수 있는 Spark나 하둡을 더 잘 사용할 수 있게 해주는 다른 에코시스템의 컴포넌트들을 hdfs위에서 사용할 수 있게 해준다.