하둡 분산 파일시스템(HDFS)와 함께 핵심 구성 요소인 MapReduce에 관해 알아본다.

하둡이란?

developer-woong.tistory.com/7

 

(하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem)

하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경 데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터

developer-woong.tistory.com

하둡 분산 파일시스템이란(HDFS:Hadoop distributed FileSystem)?:

developer-woong.tistory.com/8

 

(하둡가이드) ep03_하둡 분산 처리 파일시스템(HDFS:Hadoop Distributed FileSystem)

하둡의 주요 구성 중 핵심 프레임워크 중 하나인 HDFS에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! devel..

developer-woong.tistory.com

 

맵리듀스(MapReduce):

대용량 데이터를 분산 처리하기 위한 목적으로 개발된 프로그래밍 모델로서 구글에 의해 개발되었다. 대표적인 데이터 처리를 위한 병럴 처리 기법의 하나로 최근까지 많은 주목을 받고있다.

맵리듀스는 임의의 순서로 정렬된 데이터를 분산 처리(Map)하고 이를 다시 합치는(Reduce) 과정을 거친다.

 

필요성:

100개의 문서가 있고, 이 문서들에서 단어의 빈도수를 세는 프로그램을 개발한다 가정해보자. 각 문서의 크기가 1TB여서 500GB 램을 가지는 하나의 컴퓨터에서는 실행 할 수 없을 때, 분산 컴퓨팅이 없다면, 한 컴퓨터에서 저장 용량의 문제로 문서의 일부만 불러와 단어수를 세고, 결과를 어딘가에 저장한 후 메모리에서 지운 뒤, 다시 문서의 다른 일부분을 불러와 빈도수를 세는 과정을 거쳐야한다. 이 과정이 틀렸다고는 말 할 수 없지만 시간이 오래 걸린다는 단점이 존재한다. 이에 100개의 문서의 크기는 100TB이고, 500GB의 메모리를 가지는 컴퓨터 200개를 활용하여 한 번에 분산처리하는 것이 분산컴퓨팅이고 여기에 사용되는 유명한 처리 방식이 맵리듀스이다.

 


 

[맵리듀스 과정]

이미지 출저 https://songsunbi.tistory.com/5

 

Input: 말 그대로 데이터를 입력하는 과정(한 문서를 예시)

ex) We hold these truths to be self-evident. Governments long established should not. Such has been the patient. .....

 

Splitting(<k1, v1>, key, value 값): 데이터를 쪼개어 HDFS에 저장, 나눠진 문서는 각 노드에 정해진 양만큼 할당

ex) (0, We hold these truths to be self-evident, ..)
     (138, Governments long established should not ...)
     (256, Such has been the patient ...) 

(* 한 문서를 문장별로 나누고 key값을 부여)

 

Mapping(list (<k2, v2>): 맵 태스크는 위 과정의 output인 키-값(key-value)쌍을 input으로 받아 다음과 같은 리스트를 만듬, 100개의 문장이라면 100개의 리스트를 생성

ex) ('We' : 1, 'hold' : 1 ...) 
     ('Government' : 1, 'long' : 1 ...)
     ('Such' : 1, 'has', 1 ...)

(* Splitting의 output인 전체 문서에서 쪼개진 각각의 문장들을 다시 단어별로 쪼개어 결과를 리스트 형식으로 생성,

이 과정에서 한 문장 중 같은 단어가 여러 번 나오더라도 value값은 1, 예를 들어 'We'라는 단어가 3번 나와도

'We':1, 'We':1, 'We':1)

 

Shuffling(<k2, list(v2)>): 각 문장별 단어의 맵 함수의 결과를 취합(맵 태스크의 결과를 키-값 쌍으로 변환)하고 리듀스 함수로 데이터를 전달

ex) ('We' : [1,1,1])
     ('Government : [1,1,1])
     ('Such' : [1,1,1])

(* 매핑과정의 output, 각 단어별로 문장 내에서 찾은 빈도수 리스트)

 

Reducing(list (<k3, v3>)): 모든 값을 합쳐 원하는 값을 추출

ex) ('We' : 100)
     ('Government' : 10)

 

Map-Reduce Input/Output

  Input Output
Split 텍스트 <k1, v1>
Map <k1, v1> list (<k2, v2>)
Shuffle list (<k2, v2>) <k2, list(v2)>
Reduce <k2, list(v2)> list (<k3, v3>)

 

 


[맵리듀스 구조 (하둡 1.0 기준)]

이미지 출저 https://dabingk.tistory.com/8

클라이언트: 사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API, 사용자는 맵리듀스 API로 맵리듀스 프로그램을 개발하고 하둡에서 실행 할 수 있다.

 

잡트래커(Job Tracker)의 역할:

- 잡(job): 클라이언트가 하둡에 실행 요청 시 발생되는 맵리듀스 프로그램은 job이라는 단위로 관리된다.

 

- 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링 한다.

(* 스케줄링 관리: 잡을 처리하기 위해 맵과 리듀스의 실행 갯수를 계산, 계산된 맵과 리슈스를 어떤 태스크 트래커에서 실행할 지 결정 후 잡을 나눈다.)

 

(* 스케줄링 모니터링: 하트비트(제대로 작동하고 있는지 확인, Heart Beat)로 태스크트래커와 통신하면서 상태와 작업 정보를 받는다.

태스크트래커에 장애 발생 시 다른 대기중에 있는 태스크트래커에게 태스크를 실행한다.

하둡 클러스터 전체에서 하나만 실행된다.")

 

태스크트래커(Task Tracker)의 역할:

- 하둡의 데이터노드 서버에서 실행되는 데몬(사용자가 직접 제어하지 않는 백그라운드에서 여러 작업을 수행하는 프로그램)

 

- 사용자가 설정한 맵리듀스 프로그램을 실행한다.

 

- 잡트래커가 명령 시, 요청 받은 맵과 리듀스의 수만큼 맵 태스크, 리듀스 태스크를 생성한다.

(= 사용자가 만든 맵과 리듀스 프로그램이 맵 태스크, 리듀스 태스크)


하둡1.0 맵리듀스의 문제점:

- 하둡1.0의 맵리듀스 프레임워크는 무조건 맵리듀스 API로 만든 프로그램만 실행 가능했다.

 

- 맵리듀스 SPOF(Single Point Of Failure, 단일 고장점): 잡트래커에 문제가 생기면 태스크트래커가 작동하고 있어도 맵류드스를 전체 사용할 수 없게 된다.

 

- 잡트래커의 메모리 부족 시, 잡의 상태 모니터링, 새로운 잡 실행 요청 등을 못하게 된다.

 

- 맵리듀스는 슬롯이란 개념으로 클러스터에서 실행할 수 있는 태스크의 개수, 즉, 태스크 수행 단위로 관리하는데 실행중인 잡이 맵 슬롯만 사용하고 있거나 리듀스 슬롯만 사용한다면 다른 슬롯은 잉여자원이 되어 리소스가 낭비된다.

(* 슬롯: 한 번에 실행되는 태스크들의 묶음)

 

- 맵리듀스 리소스는 맵리듀스 기반의 프레임워크만 자원을 공유하기 때문에 다른 에코시스템은 자원 공유 불가

 

- 맵과 리듀스로 정해진 구조 외에 다른 알고리즘의 지원 한계

 

- 맵리듀스 잡을 실행하는 클라이언트와 맵리듀스 클러스터 버전이 반드시 동일해야한다는 점

 

하둡 2.0 YARN의 등장:

- 위 문제를 해결하고 효율적인 관리를 위해 하둡 2.0버전부터 YARN이 도입되었다.

 

[하둡의 버전 업그레이드(+YARN)]

이미지 출저 https://dabingk.tistory.com/8

 

YARN의 목표:

- 잡트래커의 주요 기능을 추상화한다.

 

- 잡트래커의 핵심 기능인 클러스터 자원관리와 애플리케이션 라이프 사이클 관리를 분리하고 담당하며 부하를 줄인다.

 

- 다양한 데이터 처리 애플리케이션이 수용 가능하다.

 

- 기존 맵리듀스가 반드시 맵리듀스 API로 구현된 프로그램만 실행할 수 있었다면, 얀(YARN)에서의 맵리듀스는 실행되는 여러 애플리케이션들 중 하나

 

얀(YARN)이란?

developer-woong.tistory.com/9

 

(하둡가이드) ep04_YARN이란?

하둡의 구성 요소 중 핵심 프레임워크인 Yarn에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woo..

developer-woong.tistory.com

필요 지식:

 

주키퍼(Zookeeper)란?

developer-woong.tistory.com/11

 

(하둡 기초) ep06_주키퍼(Zookeeper)란?

효과적인 분산 코디네이션 시스템을 위한 주키퍼(Zookeeper)에 대해 알아본다. 하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! d..

developer-woong.tistory.com

고가용성(HA:High Availability)이란?

developer-woong.tistory.com/12

 

(하둡 기초) ep07_하둡 고가용성(HA:High Availability)이란?

하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등..

developer-woong.tistory.com

 

[참고1]m.blog.naver.com/PostView.nhn?blogId=builton70&logNo=221217088757&categoryNo=6&proxyReferer=https:%2F%2Fwww.google.com%2F

[참고2]songsunbi.tistory.com/5

[참고3]3months.tistory.com/521

[참고4]dabingk.tistory.com/8

 

감사합니다!!

반응형

하둡의 구성 요소 중 핵심 프레임워크인 Yarn에 대해 알아본다.

하둡이란?

developer-woong.tistory.com/7

 

(하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem)

하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경 데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터

developer-woong.tistory.com

HDFS(Hadoop Distributed FileSystem)란?

developer-woong.tistory.com/8

 

(하둡 기초) ep03_하둡 분산 처리 파일시스템(HDFS:Hadoop Distributed FileSystem)

하둡의 주요 구성 중 핵심 프레임워크 중 하나인 HDFS에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! devel..

developer-woong.tistory.com

맵리듀스(MapReduce)란?

developer-woong.tistory.com/10

 

(하둡 기초) ep04_ MapReduce 맵리듀스란?

하둡 분산 파일시스템(HDFS)와 함께 핵심 구성 요소인 MapReduce에 관해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다..

developer-woong.tistory.com

 

얀(yarn):

리소스 관리와 컴포넌트 처리를 분리한 하둡 2.0에 도입된 아파치 재단의 서브 프로젝트

MapReduce의 차세대 기술로서 MapReduce의 확장성과 속도 문제를 해소하기 위한 프로젝트

기존 MapReduce에서는 4000개 이상의 노드 클러스터에서 확장에 대한 이슈가 발생하여 야후(Yahoo)에서 새롭게 설계

 

초기 하둡1에서는 잡트래커가 애플리케이션의 라이프 사이클 관리, 클러스터 리소스 관리를 모두 담당하여 병목현상이 발생하였다. 잡트래커 한 대가 모든 클러스터의 노드들, 애플리케이션들을 관리하여야 했기 때문에 잡트래커에 많은 메모리를 할당 해야 했고, 최대 4000대의 노드까지만 관리할 수 있었다. 또한 잡트래커의 애플리케이션은 맵리듀스 작업만 처리 가능하여 유연성이 부족하였고 SQL기반 작업, 인메모리 기반 작업 처리에 어려움이 있었다.

이러한 단점을 극복하기 위하여 얀(Yarn) 아키텍처가 도입된다.

 

얀(Yarn)은 하둡 분산 파일시스템(HDFS)의 상단에서 대규모 데이터 처리 어플리케이션들을 실행하는 운영체제 역할을 수행한다. 잡트래커의 기능을 분리하여 자원 관리는 리소스 매니저와 노드매니저, 애플리케이션 라이프 사이클 관리는 애플리케이션 마스터와 컨테이너가 담당한다.

얀(Yarn)을 이용하면 안정적인 배치 작업과 양방향 실시간 작업 수행이 가능해지고 하둡 클러스터의 전사적인

자원, 라이프 사이클 관리, 다양한 애플리케이션 실행 등을 지원하고 최대 1만개의 노드 관리가 가능하다.

(* 아파치 재단은 얀(Yarn)을 맵-리듀스 버전2로 명명함.)

 

 

[얀(Yarn) 2.0 스택]

이미지 출저 https://m.blog.naver.com/PostView.nhn?blogId=gkenq&logNo=10187292348&proxyReferer=https:%2F%2Fwww.google.com%2F

 


얀(Yarn)의 구조:

   
리소스 매니저(Resouce Manager) - 스케줄러, 애플리케이션 매니저, 리소스 트랙커로 구성

(* 스케줄러(Scheduler): 노드 매니저들의 자원 상태를 관리하며 부족한 리소  스들을 배정, 프로그램 상태를 검사하거나 모니터링 하지 않고, 순수하게 스케줄링 작업만 담당

* 스케줄링(Scheduling): 자원 상태에 따라 태스크(task)단위의 작업들의 실행여부를 허가해주는 역할을 담당, 그 이상의 책임은 X

*애플리케이션 매니저(Application Manager): 노드매니저에서 특정 작업을 위해 애플리케이션 마스터를 실행, 상태 관리

* 리소스 트랙커(Resource Tracker): 컨테이너가 아직 살아 있는지 확인 하기 위해 애플리케이션 마스터 재 시도 최대 횟수, 노드매니저가 죽은 것으로 간주 될 때까지의 대기 시간 추출 등과 같은 설정 정보를 가짐)

- 자원 분배 시 스케줄러(Scheduler)에 설정된 규칙에 따라 효율적 자원 분배

- 노드매니저로부터 전달받은 정보를 활용, 클러스터 전체를 관리하는 마스터 서버 역할

- 자원 사용 상태의 모니터링

- 애플리케이션 마스터에서 자원요청 시 비어있는 자원 사용 가능하도록 처리
노드 매니저(Node Manager) - 각 노드당 하나씩 존재

- 애플리케이션 마스터(Application Master)와 애플리케이션 컨테이너(Application Container)로 구성

(* 애플리케이션 마스터: 하나의 프로그램, 작업(task)에 대한 마스터역할 수행 스케줄러로부터 적절한 애플리케이션 컨테이너를 할당받고, 프로그램 실행 상태를 모니터링 및 관리

* 애플리케이션 컨테이너: 프로그램에 할당된 자원을 나타냄)

- 현재 노드의 자원 상태를 관리, 리소스매니저에게 현재 자원상태 보고

- 노드매니저는 리소스 매니저의 지시를 받아 작업 요구사항에 따라서 컨테이너를 생성
애플리케이션 마스터 (Application Master) - 노드매니저와 함께 번들로 재공, 작업당 하나씩 생성

- 컨테이너를 사용하여 작업 모니터링과 실행을 관리

- 리소스매니저와 작업 자원 요구사항 협상, 작업 완료를 위한 책임
컨테이너 (Container) - CPU, 디스크, 메모리 등과 같은 속성으로 정의

- 모든 작업(job)은 여러 개의 태스크(task)으로 세분화되고 각 태스크(task)은 하나의 컨테이너(container) 안에서 실행이 된다.

- 필요 자원 요청은 애플리케이선 마스터가 담당

- 승인 여부는 리소스매니저가 담당

- 컨테이너 안에서 실행 가능한 프로그램은 자바 프로그램뿐만 아닌, 커맨드 라인에서 실행 가능한 프로그램이면 모두 실행 가능 

 

[얀(Yarn) 구성도]

이미지 출저 https://m.blog.naver.com/PostView.nhn?blogId=gkenq&logNo=10187292348&proxyReferer=https:%2F%2Fwww.google.com%2F

라이프 사이클(Life Cycle)관리:

애플리케이션의 라이프 사이클 관리는 애플리케이션 마스터와 컨테이너를 이용하여 처리한다.

 

- 클라이언트가 리소스 매니저에 애플리케이션을 제출

 

- 리소스 매니저는 비어있는 노드에서 애플리케이션 마스터를 실행

 

- 애플리케이션 마스터는 작업 실행을 위한 자원을 리소스 매니저에 요청 후 자원을 할당받고 각 노드에 컨테이너 실행 및 실제 작업을 진행 (* 컨테이너는 실제 작업이 실행되는 단위)

 

- 컨테이너에서 작업 종료 시 결과를 애플리케이션 마스터에게 알리고 애플리케이션 마스터는 모든 작업이 종료되면 리소스매니저에게 알린 후 자원을 해제

 

 

[얀(Yarn) 라이프 사이클(Life Cycle)]

이미지 출저 https://wikidocs.net/22899

 

다양한 애플리케이션:

얀(Yarn)은 맵리듀스 API로 구현된 프로그램 외 다양한 애플리케이션을 실행 가능

맵리듀스, 피그, 스톰, 스파크 등 하둡 에코시스템의 다양한 데이터 처리기술을 이용할 수 있다.

이미지 출저 https://wikidocs.net/22899

하둡 에코시스템이란?

developer-woong.tistory.com/7

 

(하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem)

하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경 데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터

developer-woong.tistory.com

얀(Yarn)의 작업 순서:

 

이미지 출저 https://m.blog.naver.com/PostView.nhn?blogId=gkenq&logNo=10187292348&proxyReferer=https:%2F%2Fwww.google.com%2F

 

1. 클라이언트가 새 응용 프로그램의 요청을 위해 리소스 매니저에 접근

 

2. 리소스매니저는 애플리케이션 아이디를 클라이언트에게 전송

 

3. 클라이언트는 메모리, CPU, 우선 순위 등과 같은 세부적인 요구 사항들을 요청하는 Application Submission Request 생성

 

4. 애플리케이션 매니저가 클라이언트의 요청을 받고 노드 매니저에게 작업(job)당 한 하나의 애플리케이션 마스터를 생성 요청

 

5. 이에 노드매니저가 애플리케이션 마스터 생성

 

6. 애플리케이션 마스터는 리소스 매니저에게 리소스 할당에 대한 요청을 생성하고 작업(job)이 종료될 때까지 작업에 대한 책임을 짐

 

7. 리소스 매니저는 컨테이너의 리스트를 반환

 

8. 애플리케이션 마스터는 노드 매니저에게 특정 작업 컨테이너 시작을 요청

 

9. 노드매니저는 컨테이너를 생성하고 컨테이너는 클라이언트의 특정 코드를 실행

 

10. 애플리케이션 매니저는 작업(job)이 완료될때까지의 작업 실행을 관리

 

11. 클라이언트는 응용 프로그램의 상태 보고서 요청

 

필요 지식:

 

주키퍼(Zookeeper)란?

developer-woong.tistory.com/11

 

(하둡 기초) ep06_주키퍼(Zookeeper)란?

효과적인 분산 코디네이션 시스템을 위한 주키퍼(Zookeeper)에 대해 알아본다. 하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! d..

developer-woong.tistory.com

 

고가용성(HA:High Availability)이란?

developer-woong.tistory.com/12

 

(하둡 기초) ep07_하둡 고가용성(HA:High Availability)이란?

하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등..

developer-woong.tistory.com

 

 

 

[참고1]m.blog.naver.com/PostView.nhn?blogId=gkenq&logNo=10187292348&proxyReferer=https:%2F%2Fwww.google.com%2F

[참고2]wikidocs.net/22899

 

감사합니다!!


 

 

반응형

하둡의 주요 구성 중 핵심 프레임워크 중 하나인 HDFS에 대해 알아본다.

하둡이란?

developer-woong.tistory.com/7

 

(하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem)

하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경 데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터

developer-woong.tistory.com

 

분산 파일 시스템:

데이터가 단일 물리 머신의 저장용량을 초과하게 되면 전체 데이터셋을 분리된 여러 머신에 나눠서 저장할 필요가 있다. 이에 네트워크로 연결된 여러 머신의 스토리지를 관리하는 파일시스템을 분산 파일 시스템이라한다.

 

하둡은 HDFS라는 분산 파일 시스템을 제공한다.

 

(* 본 내용은 하둡 1버전에서의 HDFS구조에 관한 설명이다. 하둡 2.x 릴리즈 버전부터 HDFS 고가용성(HA)지원을 위해 구조가 변경되었다. 우선 초기의 구조를 살펴보고 문제점과 고가용성의 필요성을 숙지한 후 다른 포스팅에서 깊게 다루겠다.)

 

이미지 출저 https://www.slideshare.net/madvirus/hdfs-28871456
이미지 출저 https://dabingk.tistory.com/2


HDFS설계:

 

 

매우 큰 파일

- 매우 크다는 의미는 수백 메가바이트, 기가바이트 또는 테라 바이트 크기의 파일을 의미
스트리밍 방식의 데이터 접근 - HDFS의 시작 아이디어는 '가장 효율적인 데이터 처리 패턴은 한 번 쓰고 여러 번 읽는 것'이라는 것이다. 데이터셋은 새롭게 생성되거나 원본으로부터 복제된다. 후에 시간이 지남에 따라 다양한 분석이 가능한데 분석이 전부는 아니지만 첫 번째 레코드를 읽는 데 걸리는 지연 시간보다 전체 데이터셋을 모두 읽을 때 걸리는 시간이 더 중요하다
범용 하드웨어 - 하둡은 고가의 하드웨어만을 고집하지는 않는다. 하둡은 노드 장애가 발생할 확률이 높은 범용 하드웨어로 구성된 대형 클러스터에서도 문제없이 실행되도록 설계되었다.
데이터 무결성 - 하둡에서는 데이터를 한 번 저장하였을 때, 그 데이터 파일 끝에 데이터를 덧붙이는 것(append)은 가능하지만 파일 중간의 데이터를 수정하는 것은 불가능하다.
장애 복구 - 디스크 오류로 인한 데이터 저장 실패 및 유실과 같은 장애를 빠르게 감지하고 대처한다.

- 분산 서버 간 주기적으로 상태를 체크한다.(Heart Beat)
데이터 복제 (Replication) - 내고장성과 가용성을 위해 데이터를 복제하여 저장

- 오류데 대응하기 위해 각 블록들을 서로 다른 노드에 복제하여 저장한다. 기본적으로 3개를 복제

HDFS개념:

 

   
블록(Block) - 파일시스템에서 사용하는 블록의 개념과 같다.
  (한 번에 읽고 쓸 수 있는 데이터의 최대량)
  (사용자는 파일의 크기와 무관하게 파일을 읽고 쓸 수 있고,    특정 파일에 구애받지 않는다.)

- 파일시스템 블록의 크기는 보통 수 킬로바이트이고, 디스크 블록의 크기는 기본적으로 512바이트이다. HDFS블록은 기본적으로 128MB와 같이 큰 단위이고, 단일 디스크를 위한 파일시스템처럼 특정 블록 크기의 청크(chunk)로 쪼개지고 각 청크는 독립적으로 저장된다.

- 단일 디스크를 위한 파일시스템은 디스크 블록 크기보다 작은 데이터라도 한 블록 전체를 점유 BUT HDFS는 블록 크기보다 작은 데이터일 경우 전체 블록 크기에 해당하는 하위 디스크를 모두 점유하지는 않는다.
ex) 기존 파일시스템 1MB 저장 -> 128MB 사용
     HDFS               1MB 저장 -> 1MB사용

네임 노드(Name Node) - 파일시스템 내의 네임스페이스를 관리

- 파일, 디렉토리에 대한 메타데이터 유지

- HDFS의 파일 시스템에 접근하기 위해서는 네임노드에 먼저 접급하고 데이터의 위치를 파악한 후 데이터 노드로 접근하여 데이터 추출

- 네임노드에 장애 발생시 HDFS의 데이터를 읽어오지 못한다. 이를 방지하기위해 보조네임노드 사용

- 보조네임노드는 네임노드의 데이터를 온전하게 가지는 것이 아닌 시간차를 두고 저장, 네임노드에서 관리 데이터를 백업 후 보조네임노드와 같이 사용하는 것이 좋은 방법
데이터 노드 (Data Node) - 파일 시스템의 실질적인 일꾼

- 클라이언트나 네임노드의 요청이 있을 시, 블록을 저장, 탐색하며 저장하고 있는 블록의 목록을 주기적으로 네임노드에 보고

문제점:

고가용성이란 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다.

 

데이터의 손실을 방지하기위해 네임노드의 메타데이터를 다수의 파일시스템에 복제, 보조 네임노드를 활용하여 체크포인스트를 생성하는 방식을 활용했지만 궁극적인 파일시스템의 고가용성의 지원은 어려웠다.

 

이유는 네임노드가 단일 고장점(SPOF:Single Point Of Failure)이기 때문이다.

네임노드는 메타데이터와 파일 블록의 매핑 정보를 보관하는 유일한 저장소이기 때문에 네임노드에 장애가 발생하면 맵리듀스 잡을 포함, 모든 클라이언트가 파일의 읽기, 쓰기, 조회가 모두 불가능해진다.

 

이러한 문제의 해결을 위해 하둡 2.x 릴리즈부터 HDFS 고가용성(HA:High Availability)를 지원한다.

고가용성은 활성대기(active-standby)상태로 설정된 한 쌍의 네임노드로 구성되는데 활성 네임노드(active namenode)에 장애 발생 시 대기 네임노드(standby namenode)가 역할을 이어 받아 중단 없이 클라이언트의 요청을 처리한다.

 

고가용성(HA:High Availability)이란?

developer-woong.tistory.com/12

 

(하둡 기초) ep07_하둡 고가용성(HA:High Availability)이란?

하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등..

developer-woong.tistory.com

필요 지식:

 

얀(YARN)이란?

developer-woong.tistory.com/9

 

(하둡 기초) ep05_YARN이란?

하둡의 구성 요소 중 핵심 프레임워크인 Yarn에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woo..

developer-woong.tistory.com

맵리듀스(MapReduce)란?

developer-woong.tistory.com/10

 

(하둡 기초) ep04_ MapReduce 맵리듀스란?

하둡 분산 파일시스템(HDFS)와 함께 핵심 구성 요소인 MapReduce에 관해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다..

developer-woong.tistory.com

주키퍼(Zookeeper)란?

developer-woong.tistory.com/11

 

(하둡 기초) ep06_주키퍼(Zookeeper)란?

효과적인 분산 코디네이션 시스템을 위한 주키퍼(Zookeeper)에 대해 알아본다. 하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! d..

developer-woong.tistory.com

 

[참고1] Hadoop The Dfinitive Guide (하둡 완벽가이드 4판) - 톰 화이트 지음, 장형석, 장정호, 임상배, 김훈동 옮김

[참고2]dydwnsekd.tistory.com/15

[참고3]ko.wikipedia.org/wiki/%EA%B3%A0%EA%B0%80%EC%9A%A9%EC%84%B1

 

감사합니다!!

반응형

하둡의 역사에 대해 궁금하다면?!

developer-woong.tistory.com/6

 

(하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경

데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터가 발생 페이스북은 2,400억개의 사진을 보유, 매달 7페타바이트 증가하는 등 우리는 데이터 시대에 살아가고

developer-woong.tistory.com


하둡(Hadoop):

하나의 대형 컴퓨터를 사용하여 데이터를 처리하는 대신, 적당한 성능의 범용 컴퓨터를 클러스터화 하고, 방대한 크기의 데이터를 클러스터에서 병렬 처리하여 속도를 높이는 자바 기반의 오픈소스 프레임워크.

오늘날 빅데이터의 수집, 처리, 분석에 빼놓을 수 없는 프레임워크이다.

 

이미지출저  https://hadoop.apache.org/


하둡 에코시스템(Hadoop EcoSystem):

하둡의 코어 프로젝트는 HDFS와 MapReduce이다.

이 외에도 다양한 서브 프로젝트들이 있는데, 하둡 에코시스템은 그 프레임워크를 이루고 있는

다양한 서브 프로젝트들의 모임으로 하둡의 활용성을 높여주는 생태계이다.

 

 

[하둡 생태계]

이미지출처 : https://1004jonghee.tistory.com/m/entry/1004jonghee-%ED%95%98%EB%91%A1%EC%97%90%EC%BD%94%EC%8B %9C%EC%8A%A4%ED%85%9CHadoop-Eco-System-Ver-10?category=419383

 

[하둡에코시스템]

이미지출처 : 시작하세요! 하둡 프로그래밍(위키북스)

 

- 코어 프로젝트: HDFS(Hadoop Distributed FileSystem, 하둡 분산 파일 저장 시스템), MapReduce(분산 처리)

- 서브 프로젝트: 워크플로우 관리, 데이터 수집, 분석, 워크플로우 관리 등등 아래 설명 참조


Hadoop Framework

   
Zookeeper (분산 코디네이터) - 분산 환경에서 서버들간의 상호 조정이 필요한 다양한 서비스 제공

- 한 서버의 처리 결과를 다른 서버들에게도 전송, 동기화 - 데이터의 안전성

- 활동중인 서버(active)에서 문제 발생 시 대기 중인 서버(standby)를 운영 서버로      바꾸어 서비스를 중지 없이 제공

- 한 서버에만 서비스의 부하를 막기 위해 서비스를 알맞게 분산

- 중앙 집중식 서비스, 분산환경을 구성하는 서버 설정을 통합 관리
Ooozie
(워크플로우 및 코디네이터 시스템)
- 하둡의 작업을 관리하는 워크플로우 및 코디네이터 시스템

- Java servlet 컨테이너에서 실행되는 자바 웹 어플리케이션 서버

- MapReduce, Pig 작업 같은 워크플로우 제어
Avro (데이터 직렬화) - RPC (Remote Procedure Call)과 데이터 직렬화를 지원하는 프레임워크

- JSON 형식의 데이터와 프로토콜을 정의

- 작고 빠른 Binary 포맷으로 데이터 직렬화
YARN (분산 리소스 관리) - 작업 스케줄링, 클러스터 리소스 관리 프레임워크

- MapReduce, Hive, Impala, Spark 등의 어플리케이션들을 YARN 에서 작업
Mesos (Cloude 환경 리소스 관리) - 리눅스 커널과 동일한 원칙

- 컴퓨터에 API를 제공 (Hadoop, Spark, Kafka, Elasticsearch)
HCatalog (테이블, 스토리지 관리) - 하둡 기반으로 생성된 데이터를 위한 테이블, 스토리지 관리
HBase (분산 Data Base) - HDFS의 컬럼 기반 DB

- Hadoop 및 HDFS 위에 Bigtable과 같은 기능을 제공
HDFS (분산 파일 저장) - 하둡의 핵심 저장소

- 하둡 네트워크에 연결된 기기에 데이터를 복제, 저장하는 분산형 파일 시스템
Kudu (컬럼 기반 스토리지) - 속성 기반 스토리지, 하둡에코시스템에 새로이 추가됨

- 데이터의 빠른 변화에 대한 빠른 분석을 위함
Tajo (데이터웨어하우스 시스템) - 고려대학교 정보통신대학 컴퓨터학과 DB연구실 박사 과정 학생들의 주도하여 개    발한 하둡 기반의 DW 시스템

- 데이터의 저장소는 HDFS 그대로 사용하고 SQL을 통해 실시간으로 데이터 조회

- Hive보다 2~3배 빠름, 클라우데라의 Impala와 비슷한 속도

- Impala는 클라우데라의 하둡을 써야하지만, Tajo는 특정 업체의 솔루션에 종속되    지 않음
Chukwa (분산 환경 데이터 수집) - 분산 환경으로 부터 생성된 데이터를 안전하게 HDFS에 저장하는 플랫폼

- 대규모 분산 시스템의 모니터링
Flume (분산 환경 데이터 수집, 관리) - 많은 양의 데이터를 수집, 집계, 이동하기 위한 분산형 서비스

- 전체 데이터의 흐름을 관리
Scribe (데이터 수집 플랫폼) - 페이스북에서 개발한 데이터 수집 플랫폼

- 쉬운 설치와 구성, 다양한 프로그래밍 언어 지원
Kafka (분산 스트리밍 플랫폼) - 데이터의 파이프라인을 구축 할 때 주로 사용

- 데이터의 흐름을 실시간으로 관리

- 데이터의 유실을 방지하고 안전한 전달을 목적으로 하는 대용량 실시간 로그처리    솔루션 
Sqoop (대용량 데이터 전송 솔루션) - HDFS, RDBMS, DW, NoSQL 등의 다양한 종류의 저장소에 대용량 데이터를 빠르    게 전송하는 방법을 제공
Hiho (대용량 데이터 전송 솔루션) - Sqoop과 마찬가지로 대용량 데이터를 전송하기 위한 솔루션

- 하둡 데이터 수집을 위한 SQL과 JDBC 인터페이스 지원
Pig (데이터 처리) - 하둡에 저장된 대이터를 맵리듀스 플랫폼을 사용하지 않고 SQL과 같은 스크립트    를 활용하여 데이터를 처리

- MapReduce 프로그래밍 대체 Pig Latin이라는 자체 언어 제공
Mahout
(하둡 기반 데이터 마이닝 알고리즘)
- 분석 머신러닝에 필요 알고리즘의 구축을 위한 오픈소스 프레임워크
Spark (대규모 데이터 처리 엔진) - 대규모 데이터를 빠른 속도로 처리하고 실행시켜주는 엔진

- R, Python 등 대화형 인터프린터로 사용 가능
Impala (실시간 SQL 질의 시스템) - 클라우데라에서 개발한 하둡 기반의 실시간 SQL 질의 시스템

- MapReduce를 사용하지 않고, 자체 개발한 엔진(C++ 기반 인메모리 엔진)을 사용

- 데이터 조회를 위한 인터페이스(HiveQL사용, HBase와 연동 가능)
Hive (데이터 웨어하우징 솔루션) - 하둡 기반의 데이터 웨어하우징용 솔루션 (페이스북 개발)

- HiveQL이라는 언어로 쉬운 데이터 분석을 지원
MapReduce (대용량 데이터 분산처리) - 정렬된 데이터를 분산 처리(Map)한 후 다시 합치는(Reduce)과정을 수행

- 하둡의 대용량 처리 핵심 기술

 

익숙해지기:

하둡 생태계를 모두 외울 필요까지는 없다. 우선 기본적인 하둡의 클러스터 구축에 먼저 익숙해져야 하고,

상황마다 필요한 프레임워크들을 사용하는 것이 좋다.

우선 HDFS, YARN, MapReduce, Zookeeper에 대해 기본 지식을 습득한다면

현재 우선적인 목표인 고가용성(HA) 하둡 클러스터 구축에 큰 도움이 될 것이다.

 

HDFS란?

developer-woong.tistory.com/8

 

(하둡 기초) ep03_하둡 분산 처리 파일시스템(HDFS:Hadoop Distributed FileSystem)

하둡의 주요 구성 중 핵심 프레임워크 중 하나인 HDFS에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! devel..

developer-woong.tistory.com

YARN이란?

developer-woong.tistory.com/9

 

(하둡 기초) ep05_YARN이란?

하둡의 구성 요소 중 핵심 프레임워크인 Yarn에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woo..

developer-woong.tistory.com

MapReduce란?

developer-woong.tistory.com/10

 

 

(하둡 기초) ep04_ MapReduce 맵리듀스란?

하둡 분산 파일시스템(HDFS)와 함께 핵심 구성 요소인 MapReduce에 관해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다..

developer-woong.tistory.com

Zookeeper란?

developer-woong.tistory.com/11

 

(하둡 기초) ep06_주키퍼(Zookeeper)란?

효과적인 분산 코디네이션 시스템을 위한 주키퍼(Zookeeper)에 대해 알아본다. 하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! d..

developer-woong.tistory.com

고가용성(HA:High Availability)이란?

developer-woong.tistory.com/12

 

(하둡 기초) ep07_하둡 고가용성(HA:High Availability)이란?

하둡이란?: developer-woong.tistory.com/7 (하둡 기초) ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등..

developer-woong.tistory.com

 

[참고1]velog.io/@kimdukbae/Hadoop-Eco-System-%ED%95%98%EB%91%A1-%EC%97%90%EC%BD%94-%EC%8B%9C%EC%8A%A4%ED%85%9C

[참고2]butter-shower.tistory.com/73

 

감사합니다!!

반응형

데이터 시대

2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터가 발생

페이스북은 2,400억개의 사진을 보유, 매달 7페타바이트 증가하는 등 우리는 데이터 시대에 살아가고 있다.

 

개인이 만들어내는 데이터의 족적도 계속 증가하고, 사물인터넷의 일부인 기계에서 생산되는 데이터의 양도

매우 방대하다. 공개 데이터의 크기 또한 매년 증가하고 있는데, 조직은 더 이상 자신의 데이터만 관리해서는 안되고, 미래의 성공은 다른 조직의 데이터에서 가치를 추출하는 능력에 달려있다.

 

이미지출저https://www.sciencetimes.co.kr/news/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4%EA%B0%80-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B6%94%EC%9B%94/


저장소와 분석의 문제

디스크의 용량에 비해 데이터를 읽는 속도는 그에 미치지 못했다. 단일 디스크의 데이터를 읽는 데 너무 많은 시간이 걸리고, 심지어 쓰는 것은 더 느리다. 이에 시간을 줄이기 위한 방법으로 여러 개의 디스크에서 동시에 데이터를 읽는 방식이 출현했다. 100개의 디스크에서 각 디스크 별로 100분의 1씩 데이터가 있으며 병렬적으로 작업 시 그 속도는 매우 빨라질 것이다. 디스크에 100분의 1만 활용, 사용하는 것은 물론 낭비이다. 하지만 1테라바이트의 데이터셋 100개를 디스크에 나눠 저장하고 서로 공유가 가능하다면 이야기가 달라진다. 이러한 병렬, 분산처리시스템은 사용자에게 매우 빠른 분석을 지원하고 고르게 분산되어 서로 큰 방해도 없을 것이다.

 

 

하둡(Hadoop)이란?

대용량의 데이터를 분산처리 할 수 있는 자바 기반의 오픈 소스 프레임워크.하나의 대형 컴퓨터를 활용하여 데이터를 수집, 처리하는 대신, 하둡 서버가 설치된 다른 상용 하드웨어와 함께 클러스터링 하여 대규모의 데이터 세트를 병렬적으로 분석할 수 있다.

 

이미지출저 https://hadoop.apache.org/

(* 하둡에 관한 구성과 원리는 다음 글에서 자세히 다룬다.)

 

하둡은 분산처리, 분산저장의 결합이다.

기본적으로 하둡은 HDFS와 MapReduce, 두 프레임워크로 구성되어있고,이에 하둡의 활용성을 높여 주는 서브 프로젝트들의 모임을 하둡 에코시스템이라고 한다.

developer-woong.tistory.com/7

 

(하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem)

하둡의 역사에 대해 궁금하다면?! developer-woong.tistory.com/6 (하둡완벽설치!) ep01_하둡(Hadoop)의 역사, 등장 배경 데이터 시대 2013, 2014년 기준으로 뉴욕증권거래소에서는 하루 4.5테라바이트의 데이터

developer-woong.tistory.com


하둡의 특징:

 

선형적 확장(Scale out): 기존의 시스템의 용량이 부족하면 용량을 늘리는 것이 아닌 노드를 더 추가함으로서 용량 부족문제를 해결한다.

 

오픈 소스 기반이다.

 

HDFS(Hadoop Distributed FileSystem):

분산 파일처리시스템이란 전체 데이터셋을 여러 대의 머신에서 나누어 저장하는 방식으로

하둡에서는 HDFS라는 분산 파일처리시스템을 제공한다.

 

developer-woong.tistory.com/8

 

(하둡가이드) ep03_하둡 분산 처리 파일시스템(HDFS:Hadoop Distributed FileSystem)

하둡의 주요 구성 중 핵심 프레임워크 중 하나인 HDFS에 대해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다면?! devel..

developer-woong.tistory.com

분산저장

하둡 파일시스템(HDFS)을 이용, 파일을 적당한 블록 사이즈로 나눈 후 각 노드(각각의 컴퓨터)에 저장한다.하물며, 데이터의 유실, 부하 방지를 위해 각 블록의 복사본을 만든다. 

 

분산처리

MapReduce라는 프레임워크를 활용,  map함수에서 데이터 처리, reduce함수에서 원하는 결과를 추출한다.

 

MapReduce란?

developer-woong.tistory.com/10

 

(하둡 기초) ep04_ MapReduce 맵리듀스란?

하둡 분산 파일시스템(HDFS)와 함께 핵심 구성 요소인 MapReduce에 관해 알아본다. 하둡이란? developer-woong.tistory.com/7 (하둡완벽설치!)ep02_하둡에코시스템(Hadoop EcoSystem) 하둡의 역사에 대해 궁금하다..

developer-woong.tistory.com

 

장애 허용 시스템(Fault-toleran):

하나 이상의 컴퓨터가 고장나는 경우에도 시스템이 정상 동작

 

 

RDBMS와 맵리듀스 비교:

  RDBMS 맵리듀스
데이터 크기 기가바이트 페타바이트
접근 방식 대화형과 일괄 처리 방식 일괄 처리 방식
변경 여러 번 읽고 쓰기 한 번 쓰고 여러 번 읽기
트랜잭션 ACID 없음
구조 쓰기 기준 스키마 읽기 기준 스키마
무결성 높음 낮음
확장성 비선형 선형

 


아파치 하둡의 역사

아파치 루씬(Apache Lucene, 텍스트 검색 라이브러리)의 창시자인 더그 커팅(Doug Cutting)이 개발하였고,

하둡은 루씬 프로젝트의 일환으로 개발된 오픈 소스 웹 검색 엔진인 아파치 너치(Apache Nutch)의 하부 프로젝트로 시작했다. (하둡이라는 이름은 약어가 아닌 조어, 하둡 프로젝트의 창시자인 더그 커팅의 아이가 봉제 인형인 노란 코끼리에 지어준 이름이라 한다.) 너치 프로젝트는 2002년에 시작되었고 크롤러와 검색 시스템이 금방 만들어졌지만, 그들이 가지고 있는 아키텍처는 수십억 웹 페이지로 확장할 수 없었다. 2003년 구글에서 실제로 운영되는 GFS라는 구글 분산 파일시스템의 아키텍처 논문이 발표되고, 이는 매우 큰 파일에 대한 저장소 문제를 해결할 수 있었다. 이에 2004년 NDFS(Nutch Distributed FileSystem)라는 너치 분산 파일시스템을 오픈 소스로 구현하는 작업에 들어간다.

 

같은 해, 구글은 맵리듀스를 소개하는 논문을 발표하였고 2005년 너치 개발자들은 너치 내부에 맵리듀스를 구현하며 2006년, NDFS와 맵리듀스는 하둡이라는 이름으로 너치에서 독립하여 분리되었다. 비슷한 시기에 더그 커팅은 야후에 합류하였고 야후는 10,000개의 코어를 가진 하둡 클러스터에서 검색 색인을 만들었다는 사실을 2008년 발표하였다.

 

뉴욕타임즈는 웹 서비스를 위해 아마존 EC2 컴퓨트 클라우드에서 신문에서 스캔한 4TB의 분량의 문서를 PDF로 변환하였고, 처리 작업에 100대의 컴퓨터, 24시간이 조금 덜 걸렸다. 이는 짧은 시간에 많은 컴퓨터를 집중적으로 사용할 수 있는 아마존의 시간 기준 지불(pay-by-the-hour)모델과 하둡의 편리한 병렬 프로그래밍 모델이 조합되어 가능한 결과였다.

 

하둡은 개발 성공과 다양성 및 활발한 커뮤니티의 공로를 인정받아 아파치의 최상위 프로젝트로 등극하였으며, 이 시기에 야후를 비롯, Last.tm, 페이스북, 뉴욕타임즈와 같은 수 많은 회사에서 실제로 사용되고 있다.

2008년 4월, 하둡은 테라바이트 데이터 정렬 세계 신기록을 세운 가장 빠른 시스템이 되었고 오늘날 하둡은 주요 기업에서 널리 사용되고 있으며, 빅데이터를 위한 범용 저장소 및 분석 플랫폼으로 업계에서 인정받고있다.

 

 

[하둡의 창시자, 더그 커팅]

이미지출저 http://m.ddaily.co.kr/m/m_article/?no=142384

 

[참고1] Hadoop The Dfinitive Guide (하둡 완벽가이드 4판) - 톰 화이트 지음, 장형석, 장정호, 임상배, 김훈동 옮김

[참고2]wikidocs.net/22654

[참고3]eehoeskrap.tistory.com/219

[참고4]rachelsdotcom.tistory.com/75

[참고5]www.incodom.kr/%ED%95%98%EB%91%A1

 

감사합니다!!

반응형

4차 산업혁명의 핵심기술로 AI, 빅데이터가 근래 굉장히 주목을 받고 있습니다.

저도 그에 맞춰 빅데이터 분석 인턴십을 수료하고, 빅데이터 플랫폼 컨설팅 분야에

몸담으며 급변하는 시대에 따라가고 있는데요.

 

 

전 세계적으로 가장 널리 쓰이는 하둡!

회사에서 고객사에게 빅데이터 플랫폼 기술(하둡 클러스터)을 컨설팅 해주는 업무를 위해

열심히.. 매우 열심히! 하둡의 기초부터 여러 상황에서의 구축까지 공부중에 있습니다!

 

 

그 과정에서 새롭게 배운 것들, 특히나..!

하둡의 설치 과정은 꽤 어렵고, 양도 방대해서 오류 추적도 많이 힘듭니다..

저도 아직 공부 중인 입장이지만, 구축 시에 직면했던 오류들, 노하우 등을

서로 공유하고, 또 까먹지 않기 위해 하둡완벽가이드라는 카테고리를 만들고

계속해서 글을 작성할 계획입니다!

 

 

한 가지 확신을 드리는건 하둡 클러스터를 확실히 구축하고 워드카운트 예제까지!

실행 시킬 수 있다는 점입니다.

저도 했으니 여러분들도 분명히 구현하실거에요!

하둡이 어떤거고 실제 예제를 실행했을 때, 어떤 화면이 나오는지

구조와 결과를 보기위한 입문용 가이드입니다!

 

 

 

글에 대해 오류 정정은 언제나 감사드리고 서로의 노하우를 공유하며

모든 분석의 밑바탕이 되는 데이터의 처리를 담당하고 인프라를 설계하는 유능한 빅데이터 엔지니어가 되보자구요!!

 

그럼 시작해보겠습니다!

화이팅 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ

감사합니다!!

 

반응형

Anaconda3가 설치되어있는 것을 전제로 한 포스팅입니다.

아나콘다가 설치되어있지 않다면 아래 링크를 참조해주세요!

developer-woong.tistory.com/3

 

(Anaconda3 & Python evironment settings) 아나콘다3, 파이썬 환경 설정

이번 시간엔 아나콘다3를 설치해서 기본적인 파이썬 환경을 구축해보겠습니다. www.anaconda.com/products/individual Anaconda | Individual Edition Anaconda's open-source Individual Edition is the easiest..

developer-woong.tistory.com

 

이번 포스팅에서는 tensorflow cpu기반으로 Mask-RCNN구동 환경을 구축해보도록 하겠습니다.

이미지 딥러닝같은 분야는 GPU기반으로 구동하는 것이 더 많고 빠르게 할 수 있지만,

이번엔 이미지의 양이 많지 않고 우선 MaskRCNN의 기본지식을 알기위해 CPU기반으로 구축하게 되었습니다!

 

www.tensorflow.org/install/source_windows#tested_build_configurations

 

Windows의 소스에서 빌드  |  TensorFlow

소스에서 TensorFlow pip 패키지를 빌드하고 Windows에 설치합니다. 참고: 잘 테스트되고 사전 빌드된 Windows 시스템용 TensorFlow 패키지가 이미 제공되고 있습니다. Windows용 설정 다음 빌드 도구를 설치

www.tensorflow.org

tensorflow 윈도우기반 공식 문서입니다. 

 

스크롤을 내리시다보면 CPU기반 버전 호환 표가 나타납니다.

이번 시간에는 tensorflow-1.5.0으로 구축해보겠습니다.

호환되지 않는 버전을 설치하면 오류발생율이 높아지니 유의해주세요!

 

우선 첫 번째로 visual studio installer를 설치하겠습니다.

 

visualstudio.microsoft.com/ko/downloads/

 

Download Visual Studio 2019 for Windows & Mac

Download Visual Studio Community, Professional, and Enterprise. Try Visual Studio IDE, Code or Mac for free today.

visualstudio.microsoft.com

위 링크에 접속해주세요!

 

스크롤을 내리시면 모든 다운로드라는 카테고리가 나옵니다.

그 중 Tools for Visual Studio 2019 클릭!

 

클릭 후 맨 아래에 있는 Visual Studio 2019용 Build Tools를 다운로드 해줍니다!

 

설치 완료 후 실행화면입니다.

Visual C++ 빌드 도구 오른편 박스에 체크해주시면 설치 세부 정보가 오른쪽에 나타납니다.

보시는 것과 같이 체크해주시고 설치버튼을 눌러주세요!

(이렇게 많이는 안해도 될 거 같은데 전 그냥 했습니다..)

 

자! 그럼 이번엔 아나콘다 프롬포트를 이용해 가상환경을 생성하고,

그 곳에서 작업을 해보겠습니다!

(아나콘다3 설치시 파이썬 버전이 3.8.3으로 자동 설치되었고, tensorflow 1.5버전은

python 3.5~3.6버전 호환이여서 가상환경을 python 3.6버전으로 생성해보겠습니다!)

 

윈도우 탐색창에 anaconda 입력 후 Anaconda Prompt (Anaconda3) 실행!

conda create -n MaskRCNN python=3.6 pip

python 3.6버전의 MaskRCNN이라는 이름으로 가상환경을 생성하는 명령어입니다.

위 명령어를 입력하고 엔터를 눌러주세요!!

 

conda info --envs

확인해보니 가상환경이 정상적으로 생성되었네요ㅎㅎ

 

activate MaskRCNN
python --version

생성된 MaskRCNN가상환경으로 접속합니다.

python도 버전에 맞게 잘 설치되었음을 확인!

 

pip install tensorflow==1.5
pip install keras==2.2.0
pip install cython matplotlib scikit-image Pillow jupyter pandas numpy scipy
pip install h5py==2.7.0
pip install opencv-python ipython

 

현재 경로에서 위 명령어들을 한 줄씩 실행해주세요!

CPU기반이기때문에 tensorflow-gpu가 아닌 tensorflow를 설치하였습니다.

(tensorflow-gpu로도 시도해보니 결과는 같았음.. tensorflow-gpu내에

tensorflow가 내장되어있는건가...)

 

cd Desktop
mkdir Mask_RCNN
cd Mask_RCNN

설치가 완료되었다면 위 코드들도 한 줄씩 실행해주세요!

바탕화면으로 경로 이동 -> Mask_RCNN이라는 폴더 생성 -> Mask_RCNN으로 경로 이동

 

#git을 통해 데이터 및 모듈들을 가져올 것입니다.
conda install -c anaconda git
#Mask_RCNN파일 설치
git clone https://github.com/matterport/Mask_RCNN.git
#cocotools 설치
git clone https://github.com/philferriere/cocoapi.git

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=pythonAPI

git clone https://github.com/aleju/imgaug.git

pip install imgaug

현재 경로입니다.

위 경로에서 코드들을 한 줄씩 실행시켜주세요!

 

https://github.com/matterport/Mask_RCNN/releases

 

Releases · matterport/Mask_RCNN

Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow - matterport/Mask_RCNN

github.com

위 링크에 접속해주세요!

 

mask_rcnn__coco.h5 폴더를 다운로드 받은 후 압축을 풀어줍니다.

(중간쯤 Mask R-CNN 2.0에 위치한 폴더를 다운로드 받았습니다.)

 

압축 해제한 mask_rcnn.coco폴더 내에 mask_rcnn_coco.h5파일을

가상환경에서 생성했던 바탕화면의 Mask_RCNN폴더로 옮겨주세요!

 

Mask_RCNN폴더의 구조입니다.

 

cd Mask_RCNN\samples
jupyter notebook

samples 폴더로 경로를 위치시킨 후 주피터 노트북 실행!

 

demo.ipynb 클릭!

 

위에서부터 하나씩 실행해보니 잘 실행되는군요!

코드를 보니 Mask_RCNN폴더 내에 images 폴더의 여러 .jpg파일 중

랜덤으로 하나를 골라 분석을 했네요!

그럼 구글에서 고양이 사진을 하나 다운로드 받아 images폴더에

넣은 후 분석해보도록 하겠습니다ㅎㅎ

# Load a random image from the images folder

# 기존 랜덤으로 이미지를 선택하여 분석하는 코드
# file_names = next(os.walk(IMAGE_DIR))[2]
# image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))

#다운받은 고양이 사진을 분석
file_names = os.path.join(IMAGE_DIR, 'cat.jpg')
image = skimage.io.imread(file_names)


# Run detection
results = model.detect([image], verbose=1)

# Visualize results
r = results[0]
visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                            class_names, r['scores'])

네! 정상적으로 구동되고 cat이라는 라벨링까지 잘 되는군요 ㅎㅎㅎ

 

꽃, 잎, 줄기등을 구분지어 라벨링해주는 결과가 필요한데,

그러기위해서 데이터셋을 모으고 파인튜닝을 통해서 구조에 맞게 코딩을 해야할 것 같아요.

ㅎㅎㅎ 어렵지만 재밌고 뿌듯하군요

 

다른 에러가 나타나시거나 혹은 글에 잘못된 내용, 빠진 내용들을 지적해주시면

감사히 받고 수정하도록 하겠습니다!

많이 추워지는데 감기 조심하세요! 이번 포스팅은 여기서 마치겠습니다. 감사합니다:)

 

(정말 많은 도움받았습니다! 감사합니다!) 참조:

ultrakid.tistory.com/21

 

[Keras] Mask R-CNN 환경 구성 및 Object Detection 예제 실행

이번 게시물은 Windows10 에서 Anaconda 가상환경에 Mask R-CNN 을 세팅하여 간단한 사진 예제를 돌려보겠습니다. 우선 Mask R-CNN이란 무엇인가? Mask R-CNN : Mask Region-based Convolutional Network  Mask..

ultrakid.tistory.com

 

반응형

이번 시간엔 아나콘다3를 설치해서 기본적인 파이썬 환경을 구축해보겠습니다.

 

www.anaconda.com/products/individual

 

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

위 링크에 접속해주세요!

첫 화면입니다. Download버튼을 클릭!

 

Download 버튼을 클릭하시면 자동으로 스크롤이 내려옵니다.

자신의 PC 사양에 맞는 버전을 클릭하여 다운로드 받습니다.

저는 Window10 x64기반 프로세서 64 bit입니다.

 

Next 클릭

 

Next 클릭

 

Just me 와 All User의 차이는 현재 PC에 계정이 여러 개 있을 경우,

모든 계정에 대해 아나콘다를 설치하는지에 대한 여부입니다.

저는 Just me로 선택하여 설치하겠습니다.

 

Next 클릭 (지정된 설치 경로 확인!)

 

아나콘다를 어느 경로에서든 사용하기 위해 환경 변수를 추가하는 옵션입니다.

체크하시면 자동으로 PATH에 추가되어 어디서든 사용가능하게됩니다.

체크 후 Install

 

Next 클릭

 

위 항목들은 아나콘다의 기본 사용법과 정보들을 모아둔 웹 사이트를

띄울지의 여부를 묻는 것입니다.

체크여부는 무관하니 편하신 방법으로 진행해주세요!

Finish 클릭!

 

환경 변수 추가 옵션을 선택 설치하니 자동으로 잘 추가되어있습니다!

 

윈도우 탐색기에 anaconda라고 검색하니 수 많은 유용한 앱들이 설치가 되었네요!

파이썬이 잘 설치되어있는지와 앞으로 많이 사용하게될 주피터 노트북을 실행시키기 위해

Anaconda Prompt(Anaconda3)를 클릭하여 아나콘다 명령어 창을 실행해보겠습니다.

 

명령어 창에 들어오셔서

python --version

을 타이핑 후 엔터 키를 눌러주세요!

곧바로 밑에 Python '버전'이 출력되었다면 파이썬까지 정상 설치완료된 것입니다!

 

그럼 이제 매우 유용한 주피터 노트북을 실행시켜볼게요!

파이썬 구문을 실행하기 위해선 보이시는 이러한 명령어 커맨드 창에서 실행하거나,

pyCharm 등 여러가지 방법이 있는데요!

주피터 노트북은 파이썬의 실행환경을 웹 기반으로 제공해줍니다.

로컬로 실행되기때문에 인터넷 연결유무에 무관하게 실행할 수 있지만,

깃허브에서 데이터를 가져오거나 인터넷 연결이 필요한 모듈 설치시에는

인터넷이 연결되어있어야합니다.

jupyter notebook

타이핑 후 실행!

 

네, 이렇게 아나콘다 프롬포트 창으로 주피터 노트북을 실행시켜보았습니다!

명령어를 치지 않고 클릭만으로 주피터 노트북을 실행시킬수도 있습니다.

 

Anaconda Navigator(Anaconda3) 아나콘다 네비게이터를 클릭합니다!

 

이 화면이 나오실 건데요 주피터 노트북 하단에 Launch버튼 클릭!

 

아나콘다 프롬포트 창으로 실행했을 때와 같은 결과가 나옵니다!

 

작업할 폴더를 생성할게요!

저는 바탕화면에 pythonwork라는 작업 중이었던 폴더가 있습니다.

 

아나콘다 네비게이터로 실행한 주피터 노트북에서 바탕화면의 pythonwork까지 클릭으로 가시거나,

아나콘다 프롬포트 창에서 pythonwork폴더로 경로 지정 후 jupyter notebook을 실행시켜주세요!

프롬포트 창에서 경로 지정 후 실행 시 root폴더가 pythonwork가 됩니다!

왼 쪽 New 버튼을 클릭 후 Python3 버튼을 클릭!

 

간단한 별 찍기 코드입니다.

잘 실행되니 모두 정상 설치가 완료되었네요!

 

이 것으로 아나콘다3, 파이썬 환경세팅을 마치겠습니다. 감사합니다!!

반응형

'Analysis > Anaconda, Python' 카테고리의 다른 글

(Mask-RCNN) CPU Opencv 기반 Mask-RCNN 환경구축  (0) 2020.11.04

+ Recent posts