인프런 커뮤니티 질문&답변

odark님의 프로필 이미지
odark

작성한 질문수

Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기

하둡 아키텍쳐 핵심 요소[4]- Read/Write Architecture

블럭이 데이타노드를 가지고있다는게 무슨뜻일까요?

작성

·

446

1

write Architecture 그림에서 Block #1 , #2 ...

각각 블럭마다 데이타노드 3개를 가지고 ip를 세개를 가지고 있다는게 이상합니다.

그림에서 Block #1~6까지 6개 블록은 데이타블록 즉, 128M 기본 용량의 데이타블록을 얘기하시는거 아닌가요?

그건 데이터를 저장하는 가장 작은 데이타 블록 단위인데...즉, 노드안에 블록들이 존재한다고 생각하는데

오히려 반대로 그림에서 각각의 블록이 어떻게 데이터 노드를 3개를 가지고 ip를 가지는건지...

그리고 ip는 데이타 노드 즉, 서버 마다 ip를 갖는거 아닌가요? 그럼 rack은 또 ip를 어떻게 갖나요?

사이즈로 치면 블럭 < 데이타 노드 < rack 형태로 커지는거 아닌가요? 여기에서 ip를 할당받을수있는게 rack인지, 데이타노드인지..

물리적 서버(인스턴스)는 데이타노드, rack중 어느것에 해당되나요?

그리고 write pipeline에서 보이는 그림과 처음그림과 차이는 뭔가요? 도무지 연결고리가 맺어지질 않네요..

첫그림은 랙도 안보이더니..두번째 그림에서는 랙을 추가하고 첫 그림은 block만 보이고 데이타노드는 안보이고 그러니.

도무지 어떤 연관이 있는지.. 그리고 동일한 랙안에 싱글블럭 2개이상의 replica를 갖을수없다.라고 rack awareness설명때 얘기하셨는데 두번째 그림에서는 동일한 랙에 4,번 6번이 같이 들어가 있네요...

답변 3

1

Billy Lee님의 프로필 이미지
Billy Lee
지식공유자

odark님에게

우선 님께서는 노드 개념을 먼저 확실히 잡아야 할 듯 합니다. 노드는 한대의 서버를 의미합니다. 한 대의 서버를 말할 때는 한대의 IP Address 주소를 가지고 있게 되죠. 

"그림에서 Block #1~6까지 6개 블록은 데이타블록 즉, 128M 기본 용량의 데이타블록을 얘기하시는거 아닌가요?" 

질문의 의도는 이해하지만 블럭을 128M로만 보시면 큰일입니다. 데이터 블럭은 128M 하나의 파일만을 만하는게 아니라 한 예제로서 데이터 블럭을 128M로 보거나 그 이상이기도 하며 작게는 1kb로도 가능하겠죠. 다만 블럭을 하나의 고유 아이피가 존재하는 머신으로도 이해해야 하둡의 아키텍쳐를 이해하게 됩니다. 128M는 하나의 예일 뿐입니다. 128M는 단순히 블럭 사이즈를 말하지만 블럭이 용량이 커지면 여러대의 서버로 분산 처리하게 됩니다. 곧 한 블럭이 한 노드에 저장할 수 있게 되고, 또 다른 파일의 한 블럭이 같은 노드로 들어가기도 하며 다양한 노드들에 분산 처리되는 큰 그림을 그리셔야 이해하게 됩니다. 
다시 말씀드리면 한 서버가 한 블럭이 될 수 있으며 한 서버에 여러 블럭들이 존재할 수도 있습니다. 그 한 서버를 말할 때 한 노드를 말합니다. 그래서 한 노드는 고유한 IP Address 주소 (숫자로 된)를 가지고 있고, 다양한 블럭들이 그 한 노드에 존재하게 되죠.  반대로 한 고유 아이피에 다양한 블럭들이 들어 있어도 되지 않겠습니다. 그래서 한 블럭을 말할 때 어느 노드 곧 어느 IP 주소를 가르켜야 됩니다. 만약 어느 블럭이 다른 IP 주소인 다른 노드에 있다고 정보가 입력되면 회사는 부도 날 겁니다. 데이터 분실이죠.

또한 데이터 노드들은 하나의 아이피로 된 독립 서버로 된다고 생각하셔야 합니다. 그 독립 서버에는 여러 가지의 형태의 블럭들이 존재하고 있기에 과히 복잡한 구조라고도 보시면 됩니다. 

"첫그림은 랙도 안보이더니..두번째 그림에서는 랙을 추가하고 첫 그림은 block만 보이고 데이타노드는 안보이고 그러니."

아래 그림을 잘 그려보시기 바랍니다. 첫 그림의 렉은 안보이는게 아니고 Datanode #1, #2, #3가 렉 #1이라는 점을 이해하셔야 합니다. 그림을 자세히 보시지 않으신 듯(^.^)...

클러스트 내에 여러 개의 렉 서버들이 존재합니다 그 렉 서버들은 네임노드 한 대 이상과 데이터 노드들이 각각 들어 있죠. 다양한 데이터노드들에는 블럭A 뿐만 아니라 B C 이상의 데이터들이 존재합니다. 렉들은 데이터 노드들이 한 개 이상 중복이 안됩니다. 그럼 레프리카도 중복 처리 안되고요..  데이터 노드 #1에 블럭 A만이 있는 것은 아닙니다. 여러 개가 있을 수 있죠. 그저 한 예제 입니다.  

렉 인지 정책에 따라 아래 렉 세 개를 보시면 압니다. 순서대로 보라색인 Rack #1, #2, #3 에는 다양한 블럭들(1,2,3,4, .....11)이 존재하는 것을 봅니다. 그런데 Block 11이 두 번이 들어가게 되면 블럭 11의 고유한 레프리카가 중복되지 않겠습니까? 

저의 강의 의도를 이해하셨으면 합니다. 다시 말씀드리면
Rack #1 (block 1, 2,3, 4)
Rack #2 (block 5,6,7,8)
Rack #3 (block 9, 10, 11, 11) --> x  한 렉 안에 같은 블럭 중복처리 불가입니다. 
Rack #3 (block 9, 10, 11, 12)  ---> 0 정상입니다.

왜냐하면 블릭 11에는 한 개의 고유 레프리카들이 있는데 만약 블럭 11을 렉에 두 개 두면 고유키가 아니라 중복이라 데이터 충돌이 생기며 이는 데이터 손상이거나 중복 허용이 되어 회사 입장에서는 큰 대형사고 입니다. 고객이 두 명이 생기는 결과이기도 하고요.. 데이터 중복현상은 어떤 기업에서도 허용되지 않습니다.

뿐만 아니라 렉 안에 블럭들이 3개뿐 아니라 10개 100개가 들어 있을 수 있죠? 만약 중복되면 이제 데이터는 엉망이 됩니다. 렉 서버 안에는 데이터 노드들이 여러 개(여러 머신들) 있다는 것과 블럭들이 분산 처리되면서 중복은 결코 허용되지 못합니다. 회사는 치명적인 데이터 손실과 중복 결과를 초래하고 말겠죠.. 

답이 되었으면 합니다.

토론토에서 빌리 올림.

 

0

Billy Lee님의 프로필 이미지
Billy Lee
지식공유자

안녕하세요. odark님

여전히 하둡강의에 대한 깊은 열정과 이해력을 찬사드립니다.

1. "하나의 데이터 파일이 있다면 이건 데이터 블럭으로 쪼개지고 각각 쪼개진 데이터 블럭은 네임노드의 Rack Awareness를 통해서 여러 랙에 있는 데이터 노드에 해당 블럭들을 분산 저장하는 구조라 파악이 됩니다."

    잘 이해하신 듯 합니다. 우선 왜 쪼개야 하는지 먼저 알아야 합니다. 100M 사이즈를 쪼갤 필요는 없지만, 1TB 데이터를 한 순간 데이터과학에서의 결과물을 추줄하기 힘듭 작업입니다. 시간도 오래걸리고요.. 그러나 여러 대의 서버에 분산처리하는 작업이 쉽다는 것은 이해가 될 것입니다. Rack Awareness 정책에 입각하여 하둡은 1TB 혹은 수천억 단위의 데이터를 잘개쪼개지 않고서는 수 시간 혹은 짧은 시간에 원하는 양의 데이터를 처리하도록 돕습니다.

그때 여러 대의 서버 처리하는 데 중복되면 안된다고 분명히 말씀 드렸습니다. 

10TB  (네임노드 )-- 2TB (데이터 노드 1)  
                                  2TB
(데이터 노드 2) 
                                  2TB (데이터 노드 3) 
                                  2TB (데이터 노드 4) 
                                  2TB (데이터 노드 5) 

2. 렉과 노드의 차이점에 대해 궁금하여 지난 번 2021.08.03 날짜에 올려드렸습니다. 그림과 함께요.

한 렉 안에 여러 대의 데이터 노드에 여러 대 렉들을 잘 개 쪼개었다고 생각하세요.. 빅데이터 센터가 있는 구글이나 야후 대학교는 다들 빅데이터 센터를 가지고 있죠.. 그들은 렉들을 가지고 있고, 일반 회사들은 한 노드를 서버로 생각하여 렉들을 사용하지 않을 수도 있고요 (그림처럼 물리적 렉보다는 컴퓨터 한 대 서버로 여러 하드 드라이브를 나누어 분산 처리하기도 합니다). 그래서 데이터 노드들은 한 개이상의 물리적 서버로 구성되었다는 점도 올바른 해석입니다. 

이 그림을 보시면 여러 렉들에는 다양한 다른 데이터노드들이 고유한 번호를 가지고 있습니다. 그 데이터 노드들의 번호는 중복이 허용이 안되다는 의미입니다. 
그 데이터 노드들 (DataNode n) 모두는  1 ~~ n개 까지 중복되면 안됩니다. 또한 그들 내부에는 메타데이터가 숨겨 있습니다.

네임노드는 메타데이터 정보를 가지고 있습니다. 메타데이터에는 이런 메타데이터 정보대로 데이터노드들의 정보대로 각각 데이터 노드들 안에 물리적 혹은 논리적으로 파일네임과 패스명, 데이터블럭들의 데이터 정보도 숨겨 있죠. 레프리카들도 있습니다. 데이터블럭을 제외하고는 이들 모두가 고유한 유니크 키 형식입니다. 그래서 중복이 안된다는 의미입니다. 

3. 슬라이드 내용에 대한 이해

네 말씀 해주신 대로 보라색이 렉이며, 그럼으로 렉 1, 렉 2, 렉 3 이라고 생각하시면 됩니다.
노란색들이 바로 데이터노들들입니다. 그 안에는 메타데이터 정보들의 기준에 의거하여 
1, 2, 3, 4 들은 데이터노드들 고유 넘버들이라고 생각하세요. 또한 고유한 레프리카를 가지고 있습니다.  그래서 렉들 사이로 11이 두개 들어 있다고 한다면 하둡은 지원하지 않는 일을 개발자나 회사에서 치명적인 렉 인지 정책의 중복을 위배하게 된 것이죠.
다만 B1, B2, 들은 블럭 1 과 블럭 2 를 가리키고 있으며,  이들은 중복 저장이 됩니다. 데이터을 잃지 않고자 
중복허용을 하고 있죠. 데이터 노드 중 하나가 원인불명 혹은 치명적인 실수로 죽어도 다른 데이터 노드들이 데이터들의 내용들을 가지고 있기에 복구가 가능하구요..

4. 데이터 노드 중복에 대한 렉과 레프리카 또한 블럭 중복에 대한 오해.

이 오해는 제가 지난 번에 보내드린 답변 중 예제 1 처럼 보내드렸는데 아마 이해가 안갔을 거라고 생각되네요.

======================

저의 강의 의도를 이해하셨으면 합니다. 다시 말씀드리면
Rack #1 (block 1, 2,3, 4)
Rack #2 (block 5,6,7,8)
Rack #3 (block 9, 10, 11, 11) --> x  한 렉 안에 같은 블럭 중복처리 불가입니다. 
Rack #3 (block 9, 10, 11, 12)  ---> 0 정상입니다.

================= 

[예제 1]

예제 2와 예제 3을 함께 보시면 이제 이해가 가실 겁니다. 위에 보내준 예제를 다시 
나누어 설명드리죠.

숫자 (1,2 ...11)만 표시한 블럭들의 넘버는 중복 처리로 사용하지 못합니다. 
만약 하둡을 예제 2처럼 사용하면 에러를 발생하여 Unique 에러를 발생시킬 겁니다.
왜냐고요? 

10TB  (네임노드 )-- 2TB (데이터 노드 1)  
                                  2TB 
(데이터 노드 2) 
                                  2TB (데이터 노드 3) 
                                  2TB (데이터 노드 4) 
                                  2TB (데이터 노드 4) 

[예제 2]

만약 10TB 네엄노드를 나누어 5개로 쪼개어 분산처리한다고 가정하면 예제 2처럼 데이터 노드 4 가 두 개가 중복 저장되었다면 이들은 10TB가 아니라 8TB이며 데이터노드 4와 데이터 노드5가 같은 파일로 되어 있기 때문이죠.. 결국 데이터 중복으로 마지막 2TB는 사라지고 데이터 노드 4만 중복되어 데이터 유실이 된 것입니다.

예제 3처럼 데이터 노드 1,2,3,4,5 각각 2TB가 다르게 쪼개져 분산처리 되어야 데이터 중복이 없어지고, 데이터가 골고루 나누어져 분산처리하게 되죠. 데이터 중복이나 분실이 없는 것이죠.

10TB  (네임노드 )-- 2TB (데이터 노드 1)  
                                  2TB 
(데이터 노드 2) 
                                  2TB (데이터 노드 3) 
                                  2TB (데이터 노드 4) 
                                  2TB (데이터 노드 5) 

[예제 3]


그래서 아래 예제 4, 5  중 예제 5와 같이 사용한다면 블럭의 중복 넘버가 없기에 하둡파일시스템 내에 사용하도록 돕습니다. 예제 4는 예제 5와 달리 블럭 12가 유실된 사례가 되며 회사는 손실이 어마하겠죠? 2TB 분실은 회사의 존폐 위기에 놓인 예제입니다.

Rack #1 (block 1, 2,3, 4)
Rack #2 (block 5,6,7,8)
Rack #3 (block 9, 10, 11, 11) --> x  한 렉 안에 같은 블럭 중복처리 불가입니다. 

[예제 4]

Rack #1 (block 1, 2,3, 4)
Rack #2 (block 5,6,7,8)
Rack #3 (block 9, 10, 11, 12)  ---> 0 정상입니다.

[예제 5]

이제 이해를 하셨다면 하둡 전문가 반열에 들어 온 것 입니다.

토론토에 응원하겠습니다.
빌리 올림

0

odark님의 프로필 이미지
odark
질문자

답변안주셔도 좋습니다. 계속 저희 부족한 이해력때문에 괴롭혀 드리고 싶지 않네요..

다만...강사님의 답변으로 더 저 머리는 괴로울 뿐이고....그런마음에 글을쓰는거 뿐입니다.

진짜..여기저기 검색해서 이해를 했는데 그 이해내용을 토대로 위의 강사님의 답변을 보면 솔직히 도무지 매치가 안되고 이해가 안됩니다.

하나의 데이터 파일이 있다면 이건 데이터 블럭으로 쪼개지고 각각 쪼개진 데이터 블럭은 네임노드의 Rack Awareness를 통해서 여러 랙에 있는 데이터 노드에 해당 블럭들을 분산 저장하는 구조라 파악이 됩니다.

랙을 여러번 여쭤봤음에도 꼬집어서 설명을 안주셨는데...랙은 데이터노드라고 하는 여러대의 물리적 서버들을

일정갯수만큼 품고있는 어떤 프레임(?) 같은거란 생각이 들고 각 랙들은 스위치라는걸 통해서 연결되어 있다고 알게되었습니다. 

그리고 랙마다 여러대의 서버(데이터노드)들을 가지고 있는데 ...이 데이터노드들 각각에는 블럭사이즈에 따라서 여러 데이터 블럭들이 들어가 있거나...하나의 데이터블럭만 존재하거나 할수있겠죠. 

데이터파일이 A,B,C 세개의 데이터 블록으로 쪼개진다고 가정할때 A데이터 블럭은 #1 랙안에 있는 데이터노드 1, 2 에 중복저장되고 다른 #2랙안의 데이터노드안에 마지막 중복저장되어 총 replica 3개념으로 데이터 블록 A가 분산저장될것이라 생각합니다.

그런데 강사님은 위에서 설명하신거 보면 특히 올려주신 2번째그림과 함께 설명을 보면

위에 이해한 저희 개념을 너무 헷갈리게 만듭니다.

보라색은 랙이고 그안에 바로 블럭이 존재 하는게 아니라 노란색인 데이터노드가 존재하고

그 안에 데이터블럭(파란색) 을 그려놓으신건가요?

한 랙안에 여러개의 데이터 노드가 있고 그 데이터노드각각에 11의 블럭이 나뉘어져 있는게 왜 중복인지 도무지 이해가 안가네요...하나의 랙안에 각 데이터 노드의 분산저장되어야 하는건데...말입니다..그리고 1,2,3~11 이 숫자는 대체 왜 나왔고...대체 뭔가요...블럭이면 그림에서처럼 Block,1,2,3이라고 해놓고 B1,B2,B3 이게 블럭이지 왜 1,2,3~11으로 순서대로 숫자를 써놓고 블럭이라 표현한것도 도무지 이해가 안가네요.하나의 파일이 block1, block2, block3으로 쪼개놓은거 아니세요? 그 앞에 1,2,3~11 이거는  순서 나열한 숫자일뿐이란 생각이 드는데...느닺없이 그림에 숫자를 앞에 써놓고 그걸 중복 블럭이라 표현하시니....

도대체 왜 11이 중복저장인지...바로 위그림에는 하나의 랙안에 Block A가 각 데이터노드에 들어가 있고 즉, 하나의 랙안에 중복저장되어있는거 아닌가요????  그림을 잘 그려놓고선 밑에 그림에는 하나의 렉안에 중복저장될수 없다고 하신부분...여기서 엄청 혼란을 줍니다. 렉에는 여러 다양한 데이터노드각 있고 각 데이터노드에 하나의 데이터블럭은 얼마든지 중복저장되는게 분산저장 개념아닌가요? 도무지...저희 이해를 흔드시네요 ㅠㅠ~~~아래 빨간표시부분 ...정말이지 이해안됩니다. 렉안에 데이타 노드들이 존재하고 하나의 렉안에 가령 데이타 노드가 3개라면 그중에 2개의 데이타 노드 각각에는 데이터블럭 A를 각각 중복저장할수있는 개념아닌가요? ㅡㅡ

==================

클러스트 내에 여러 개의 렉 서버들이 존재합니다 그 렉 서버들은 네임노드 한 대 이상과 데이터 노드들이 각각 들어 있죠. 다양한 데이터노드들에는 블럭A 뿐만 아니라 B C 이상의 데이터들이 존재합니다. 렉들은 데이터 노드들이 한 개 이상 중복이 안됩니다. 그럼 레프리카도 중복 처리 안되고요..

저의 강의 의도를 이해하셨으면 합니다. 다시 말씀드리면
Rack #1 (block 1, 2,3, 4)
Rack #2 (block 5,6,7,8)
Rack #3 (block 9, 10, 11, 11) --> x  한 렉 안에 같은 블럭 중복처리 불가입니다. 
Rack #3 (block 9, 10, 11, 12)  ---> 0 정상입니다.

========

odark님의 프로필 이미지
odark

작성한 질문수

질문하기