랙 인식(Rack Awareness)

하둡에는 랙 인식(Rack Awareness)이라는 개념이 있습니다하둡의 관리자가 수동으로 클러스터의 각 슬레이브 데이터 노드의 랙 번호(Rack number)를 정의할 수 있습니다데이터 복제시 랙을 선택하는 문제는 데이터의 손실을 방지하는 것과 네트워크의 성능을 높이는 측면에서 아주 밀접한 관계가 있습니다.

 

우리가 다시 기억해야 될 사항은 데이터를 여러곳에 복제해 놓지 않으면데이터를 가지고 있는 노드가 고장날 경우에 서비스가 중단이 됩니다또한 데이터의 복사본들이 동일한 랙에 저장이 되면스위치(Switch) 장비의 고장이나 정전으로 인하여 복제를 했는데도 마찬가지로 서비스를 받지 못하게 됩니다이러한 문제를 미연에 방지하기 위해서 데이터 복제본이 클러스터의 어느 장소에 위치시켜야 하는지에 대한 지적인 결정(Intelligent decision)을 해야 하는데바로 네임 노드(Name Node)에서 담당을 합니다.

 

네트워크 성능면에서 비교를 하면동일한 랙안에 존재하는 두 노드가 서로 다른 랙에 각각 존재하는 두 노드보다 대역폭(Bandwidth)이 크고낮은 지연시간(Lower latency)을 가집니다이러한 사실을 토대로 네트워크 성능만을 고려한다면데이터 손실로 인한 지속적인 서비스 제공이 어렵게 됩니다.

 

복사본들이 어떤 랙의 어느 위치에 저장되는 것이 네트워크 성능 측면과 데이터 손실 측면에서 가장 합리적인지에 대한 결정을 해야 되는데, 이은 네임 노드(Name node)의 역할이며, 클라우드에 있는 전체 데이터 노드(Data Node)에서 서비스 가능한 데이터 노드들에 대한 정보를 최신으로 유지해야 가능합니다. 더욱 흥미로운 사항은 오픈플로우(OpenFlow)를 사용할 경우에는 오픈플로우 컨트롤러(Controller)에게 물어본 후에 결정할 수도 있으며언제든지 컴퓨터를 통해서 수동으로 정보를 갱신할 수도 있습니다.

 

 

Preparing HDFS writes

클라이언트(Client)는 'File.txt'를 여러 개의 블록으로 나누고, 블록들을 저장하기 위해서 네임 노드(Name Node)에게 블록들이 저장될 데이터 노드(Data Node)들의 위치를 묻습니다. 네임 노드는 'Rack Awareness' 데이터를 사용하여 합리적인 데이터 노드의 리스트를 클라이언트에게 보냅니다. 네임 노드(Name Node)에서 데이터를 저장할 데이터 노드(Data Node)를 선택하는 가장 중요한 규칙은 하나의 랙(Rack)안에 두개의 복사본을 저장하고, 다른 랙에 나머지 복사본을 저장하는 방법입니다.

 

[ Preparing HDFS Writes ]

 

클라이언트는 File.txt에서 분할된 블록들을 클러스터로 복사하기전에 관련된 모든 데이터 노드들에게 블록을 받을 준비가 되었는지 확인하는 작업을 진행합니다먼저 클라이언트는 ‘Data Node 1’ 에게 TCP 50010(Port)를 통해서 블록을 받을 준비가 되었는지 물어봅니다마찬가지로 ‘Data Node 1’  TCP를 통해서 ‘Data Node 5’에게 데이터를 수신할 준비가 되었는지 물어봅니다동일한 방법으로 ‘Data Node 5’ 역시 ‘Data Node 6’에게 물어봅니다.

 

준비 요청에 대한 승인 여부는 마지막 노드에서 처음 노드로 역순으로 ‘Ready’ 메시지를 보내줍니다. ‘Data Node 6’에서 ‘Data Node 5’와 연결되어 있는 TCP의 파이프라인을 통해서 ‘Ready’ 메시지를 보내고, ‘Data Node 5’는 ‘Data Node 1’에게 보내고최종적으로 ‘Data Node 1’은 클라이언트에게 ‘Ready’ 메시지를 보내면 블록을 복사할 준비가 끝나게 됩니다.

 

 

HDFS Write Pipeline

블록을 클러스터에 복사하기 위해서 이미 데이터 노드들간에 연결된 TCP 통신을 통해서 이루어집니다데이터 노드가 블록을 받자 마자 다음 데이터 노드에게 블록을 바로 전송한다는 말입니다다음 그림은 클러스터 성능을 향상시키기 위해서 네임 노드가 ‘Rack Awareness’ 데이터를 활용하는 방법을 나타낸 것입니다.

 

‘Data Node 5’와 ‘Data Node 6’은 같은 ‘Rack 5’에 위치하고 있습니다이 말은 ‘Data Node 1’이 ‘Data Node 5’로 데이터를 전송하기 위해서는 하나의 스위치(Switch)만 거치면 되며, 두개의 데이터 노드들이 동일한 랙을 횡단할 필요가 없으며동일한 랙에 있기 때문에 높은 대역폭과 낮은 대기 시간으로 네트워크 성능을 높일 수 있습니다또한 현재 블록의 복사 작업이 완료가 되지 않으면 다음 블록에 대한 작업은 시작하지 않습니다.

 

 

[ HDFS Write Pipeline ]

 

 

Pipelined Write

세개의 데이터 노드들이 성공적으로 블록을 받게 되면메시지를 성공적으로 받았다고 네임 노드에게 ‘Block Received” 메시지를 보냅니다마찬가지로 “Success” 메시지를 TCP 통신을 통해서 클라이언트에게도 보낸후에 기존에 연결된 TCP 세션을 닫습니다클라이언트는 “Success” 메시지를 받으면 네임 노드에게도 “Success” 메시지를 보냅니다네임 노드는 “Success” 메시지를 받으면 블록의 노드 위치와 정보를 자신의 메타 데이터에 반영합니다이러한 절차가 완료가 되면 클라이언트는 다음 블록에 대한 작업을 진행합니다.

 

 

[ HDFS Pipeline Write Success ]

 

 

Multi-block Replication Pipeline

하둡은 빅데이터와 같은 대규모의 데이터를 저장하는데 사용되며이 때문에 네트워크 대역폭 또한 많이 사용합니다.일반적으로 테라 바이트(TB, Tera Byte) 크기의 파일들을 다루고 있으며기본적으로 3번의 복제가 이루어집니다만약1TB의 파일이 있는 경우에는 3TB의 네트워크 대역폭과 3TB의 디스크 공간이 필요합니다.

 

 

[ HDFS Multi-block Replication Pipeline ]

 

 

Name Node

네임 노드는 클러스터의 모든 파일 시스템 메타데이터(File System metadata)를 보유하고데이터 노드를 관리하며데이터에 대한 접근을 조정합니다네임 노드는 하둡 분산 파일 시스템(HDFS)의 중앙 컨트롤러(Central Controller) 입니다이 말은 네임 노드가 정상적으로 동작하지 않으면하둡 분산 파일 시스템은 서비스를 멈추게 됩니다네임 노드는 파일들이 어떤 블록들로 구성되어져 있고그 블록들이 클러스터의 어느 위치에 저장되어 있는지에 대한 정보를 알고 있습니다.

 

데이터 노드는 네임 노드에게 TCP 핸드쉐이크(handshake)를 통해서 매 3초마다 ‘heartbeat’를 보냅니다. TCP 핸드쉐이크는 보통 9000포트를 사용합니다매번 10번째 ‘heartbeat’는 데이터 노드들이 보유한 블록들의 정보를 네임 노드에게 보고합니다네임 노드는 이를 통해서 메타 데이터를 구축하고블록들의 사본들이 저장되어 있는 랙(Rack)과 노드(Node) 정보를 수집합니다.

 

네임 노드는 하둡 분산 파일 시스템의 핵심 컴포넌트입니다네임 노드가 없으면 하둡 분산 파일 시스템에 블록을 작성하거나 읽을 수 없으며스케쥴(Schedule)이 불가능하며-리듀스 작업을 할 수 없습니다이 때문에 네임 노드는 엔터프라이즈급(Enterprise class) 서버에 구성하는 것이 좋습니다.

 

 

[ Name Node ]

 

 

Re-replicating missing replicas

네임 노드는 데이터 노드에서 ‘heartbeat’를 수신받지 못하면그 데이터 노드는 죽은것으로 가정합니다네임 노드는 죽은 데이터 노드가 이전에 보냈던 블록 리포트(Block Report) 정보를 참조하여 다른 데이터 노드에 복제를 결정할 수 있습니다.

 

네임 노드는 블록의 사본을 새로운 데이터 노드에 복제하기 위해서 ‘Rack Awareness’ 데이터를 참조하여 결정을 합니다결정시하나의 랙(Rack)에 두개의 복사본을 저장하고또 다른 랙에 나머지 하나의 복사본을 복제해야 하며랙 스위치의 장애 또는 전원 장애로 인한 문제시에도 시스템이 정상적으로 작동되도록 고려합니다.

 

[ Re-replicating Missing Replicas ]

 

 

Secondary Name Node

하둡은 보조 네임 노드(Secondary Name Node)라는 서버를 가지고 있습니다보조 네임 노드에 대해서 오해하는 사항은 네임 노드에 대한 고 가용성 백업(High availability backup) 기능을 수행한다는 것인데이것은 사실이 아닙니다보조 네임 노드는 네임 노드에 접속을 해서 네임 노드의 메모리에 있는 메타데이터와 파일들의 사본을 주기적((기본 1시간 간격으로 가져옵니다.

 

보조 네임 노드는 자체적으로 복사본을 유지하면서파일 집합의 정보를 통합하여 네임 노드에게 다시 제공합니다네임 노드가 죽을 경우에 보조 네임 노드에 남아 있는 파일들을 통해서 네임 노드를 복구하는데 사용할 수 있습니다.

 

[ Secondary Name Node ]



Client reading files from HDFS

클라이언트가 하둡 분산 파일 시스템으로부터 파일을 가져올 때네임 노드와 상담하고 파일의 블록 위치를 요청합니다네임 노드는 파일의 블록을 가지고 있는 데이터 노드의 리스트를 반환합니다클라이언트는 블록 리스트로부터 데이터 노드를 선택하고, TCP 50010 포트를 통해서 한번에 하나의 블록을 읽습니다이전 블록의 작업이 완료되기 전까지 다음 블록의 작업은 진행되지 않습니다.

 

[ Client Read from HDFS ]

+ Recent posts