아카이브/빅데이터 시스템 특론

3주차 - 1

_금융덕후_ 2019. 7. 27. 16:20
728x90
반응형

하둡 스트리밍

하둡 스트리밍으로 맵리듀스를 처리할 때와의 근본적인 차이점은,

하둡 스트리밍은 맵과 리듀스 작업 중간에 워커의 로컬 디스크에 쓰기를 하지 않는다.

유닉스의 stdin stdout 중간 연산에 사용한다.

 

 

HDFS

파일시스템의 기본 연산은 file io (read/write) 이다.

하지만 hdfs 기본적으로 write once, read many 지향하는 구조이다.

데이터가 한번 쓰이면, 중간에 붙이는 것은 불가능하고, 끝에 붙이는 것만 가능하다.

따라서 저장은 한번 하고, 분석 작업을 많이 읽을 있게 하기 위한 구조라는 것이다.

 

HDFS 가장 중요한 설계 원칙 하나는 Fault-Tolerance이다.

따라서 하나의 노드에 장애가 발생했을 , 다른 노드에서 같은 데이터를 Serve해줄 있도록,

HDFS에서 Write작업이 일어날 저장되는 데이터의 Replication 자동적으로 일어나게 되어있다.

먼저는 로컬에 저장하고 나머지 두개는 다른 Rack 각기 다른 노드에 저장하게 된다.

 

마지막으로 하둡은 저비용의 하드웨어로 구성하는 구조이다.

기존 DBMS 지향하는 좋은 하드웨어적인 비용을 줄이기 위한 설계 원칙이다.

 

HDFS구조

Master노드는 네임노드라 한다.

마스터 노드는 데이터노드의 네임스페이스를 관리한다.

네임스페이스는 어떤 파일이 어떤 장소에 들어가 있는지, 그리고 몇개의 블록으로 구성되어 있는지에 대한 메타데이터를 가지고있다.

 

Slave노드는 데이터 노드라고 한다.

데이터 노드들은 실제로 데이터를 가지고 있는 노드들을 말한다.

 

HDFS 부적합한 데이터

  • 지연이 짧은 데이터 실시간의 Access 적합하지 않다.
  • 작은 파일이 많으면 적합하지 않은 데이터이다. 이는 하둡이 대용량 데이터를 대상으로 하고, 기본 데이터 블록 구조를 128메가바이트로 설정한 것과 연관이 있다. 네임노드는 네임스페이스, 파일에 대한 메타를 메모리에 관리하게 되는데, 작은 파일이 너무 많아지면 메타 정보들이 길어질 것이고 메모리에 Burden 있는 구조가 되는것이다. 파일이 100만개가 있으면 300메가의 공간이 필요하고, 10억개가 있으면 30기가정도의 메모리가 필요하게 된다.
  • 많이 수정해야하는 파일을 저장하는 구조는 적합하지 않다. 하둡은 한번 쓰게되면, append 가능하고 수정하는것은 불가능하다.

 

HDFS Block

HDFS 블록은 기본사이즈가 128메가 이다.

이렇게 크게 잡은 이유는 하둡이 블록을 찾는 Seek Time 줄이기 위함이다.

 

네임노드

네임노드는 파일들을 관리할 두가지 파일을 이용해 파일시스템의 트리와 메타를 관리한다.

네임스페이스 이미지 파일과 에디트로그 파일이다.

네임노드는 어떤 블록이 어디에 위치해 있는가를 관리하지만, 실제 블록의 위치를 파일에 저장하지는 않는다. 정보는 데이터노드가 로드되고 사라지고 재구성되기 때문에, 메모리에 로드해 놓는다.

 

클라이언트가 파일시스템에 접근을 한다면, 네임노드는 데이터노드들과 통신을 하며 클라이언트의 접근을 지원하게 된다. 접근하는 명령어들은 POSIX UNIX스타일의 명령어와 매우 유사하다.

 

네임노드가 없다면 hdfs 구성할 없다. 따라서 두가지 방법으로 Fault Tolerence 시스템을 만들 있는데, 첫번째는 파일시스템의 상태를 백업하는 방법이고, 두번째는 Secondary 네임노드를 이용하는 방법이다. 이는 네임노드의 역할을 전부 하는것은 아니고, 네임노드의 일을 도와주는 역할을 한다. 네임노드에 장애가 나면, secondary 네임노드가 메인이 되는데, 중간에 데이터손실이 일어날 있다. 따라서 하둡2버전에서는 네임노드가 Active-Standby 구성이 되는 High Availability 지원한다.

 

데이터노드

데이터노드는 실제 데이터가 저장되는 곳이기도 하고, 네임노드에게 주기적으로 저장정보를 리포트하기도 한다. 네임노드가 없다면, hdfs 사용할 없게 된다.

 

블록캐싱

하둡은 자주 사용하는 데이터 블록에 대한 캐시를 이용할 있다. 이는 보통 데이터노드의 메모리에 적재된다. 이를 통해 데이터를 분석할 처리 속도를 높여주게 된다.

 

HDFS 페더레이션

네임노드는 클러스터가 가능하다. 이는 High Availability와도 연관성이 있는데, 이렇게 클러스터가 되었을 때는 네임노드 끼리의 작업 분배가 가능하다. 예를 들면 hdfs 루트 디렉토리의 user디렉토리는 한개가 하고 share디렉토리는 다른 네임노드가 하는 구조가 있다.

 

High Availability

High Availability 고가용성이라는 뜻인데, 두개의 네임노드를 사용해 접근성과 장애에 대한 내성이 뛰어난 클러스터링을 구성하는 구조이다. 때의 구성이 Active-Standby구조로 구성하게 되어있다. 네임노드들은 에디트로그를 저널노드 시스템에 작성하게 되는데, 저널노드를 공유해서 사용한다. 또한 데이터노드들은 Active Standby 네임노드들에게 상황을 모두 보고하게 된다.

 

Zookeeper

High Availability ZooKeeper라는것을 이용해 가능하게 되는데, 이는 현재 Active 네임노드가 죽으면 다음 Active노드를 선택하는 시스템이다. 죽은 Active네임노드를 배제할때는 현재의 시스템에 영향을 주지 않아야하고, 이를 확실히 확인해야하는데, 주키퍼가 이를 확인하고, 이것을 fencing이라고 부른다.

728x90
반응형

'아카이브 > 빅데이터 시스템 특론' 카테고리의 다른 글

5주차  (0) 2019.08.05
3주차 - 2  (0) 2019.07.27
2주차  (0) 2019.07.13
1주차  (0) 2019.07.13