하둡이란?
- 하둡이란 간단한 프로그래밍 인터페이스를 통해 대용량 데이터에 대한 분산처리를 하는 소프트웨어 라이브러리 이다. 하둡의 시작은 '데이터를 읽고 처리하는 속도가 데이터의 양을 따라잡지 못한다.' 라는 문제에서 출발했다.
하둡의 두가지 키워드
1. scalable : 확장 가능함
- 자원을 추가하더라도 코드의 수정 등을 할 필요 없이 동일한 방법으로 프로세싱을 할 수 있다는 의미
2. distributed computing : 분산 컴퓨팅
- Job을 적절한 크기로 쪼갠 후, 분산된 자원원을 통해 계산하고 결과를 합치는 작업
맵 리듀스(Map-Reduce)
맵 리듀스란?
- distributed computing 을 위한 프레임워크로, 하둡의 서브 프로젝트라고 볼 수 있다.
- 맵리듀스는 Job의 스케쥴링, 모니터링, 에러 핸들링 등을 수행한다. 또한 Input data를 독립적인 청크로 나누고 이를 병렬적으로 처리한다. 또한 하둡 파일 시스템 HDFS (Hadoop Distributed File System) 으로부터 데이터를 불러오고 저장할 수 있다.
EX) 100개의 문서가 있고, 그 문서에서 단어의 빈도수의 수를 세서 결과를 보여주는 프로그램을 작성하라. 100개 이상의 컴퓨터를 보유하고 있다. 문서의 크기가 다 다르고 메모리 문제로 한 컴퓨터에서는 평균 1개의 문서만 로드할 수 있다.
- 간단하게 생각해보면 100개의 컴퓨터에 각각 1개의 문서를 할당해 빈도수를 세고, 이를 합치면 된다. 하지만 이렇게 간단한 문제는 아니다. 실행도중 몇몇 컴퓨터에서 오류가 날 수 도 있고, 각각 컴퓨터에서 계산한 단어 빈도수를 한 컴퓨터에서 합산해서 보여주고자 할 때, 컴퓨팅 자원의 문제로 합산이 불가능 할 수도 있다. 즉 다양한 상황을 고려한 하나의 분산 컴퓨팅 프레임워크가 필요하다.
Map : 빅데이터에서 쪼개진 데이터를 어떻게 처리할 것인지 작성하는 함수
Shuffle and Sort : Map에서 데이터를 처리한 결과물을 나눠주는 것(hadoop엔진이 함)
Reduce : 최종 집계해서 결과를 내는 함수
* 개발자는 결국 Map함수와 Reduce함수를 정의하면 된다.
맵 리듀스 분산 병렬 처리 방식
1. 시스템(하둡)이 map() 함수들을 데이터에 배포
2. map() 함수는 데이터를 읽고 <key, value>를 출력함
3. 시스템(하둡)이 <key, value> 데이터를 그룹핑(shuffle and sort)
4. 시스템(하둡)이 그룹핑된 데이터를 reduce() 함수들에 배포
5. reduce() 함수는 <key, value>를 읽고 결과를 출력
- 맵 리듀스는 '분산 컴퓨팅을 실제로 어떻게 할 것인가?' 에 대한 잘 알려진 답변이다. 크게 Map(맵)과 Reduce(리듀스)로
맵에서는 리듀스를 위한 키-값 쌍을 만들어 낸다. 이 때 키-값 쌍은 사용자에 의해 정의될 수 있다. 리듀스는 맵의 아웃풋 키-값 쌍을 인풋으로 받아 최종 결과를 출력한다.
- 위 문제의 진행순서 예시
1. Input에서 빅데이터가 들어옴
2. Splitting에서 데이터를 조각으로 나눔 (데이터가 쪼개져서 작업노드 3개에 나눠져 있다 라고 가정)
3. map함수 동작 (파일 조각을 각각 입력으로 받아서 단어의 공백을 기준으로 자르는 함수를 수행)
4. <key, value>로 되어있는 map()함수의 결과물을 하둡이 (알파벳순으로) 셔플링을 해준다.
- Bear는 첫번째 작업노드로 이동해라 / Car는 두번째 작업노드로 이동해라~ 이런 식으로 진행
5. key와 <value,value> 의 리스트 쌍으로 전송이 되면 reduce()함수는 (value안에 있는 숫자를 계산 함수를 수행) 한 뒤
결과를 <key, value> 형태로 낸다.
* 즉, 굉장히 많은 단어들이 있는 빅데이터를 쪼개서 해당하는 단어가 몇개나 나올까? 하는 문제를 map()과, shuffle, reduce()관계를 통해서 분산 병렬처리를 해서 중간에 중간집계, 최종결과물을 모아서 해당하는 단어가 몇개가 나오는지에 대한 답을 얻을 수 있다.
'빅데이터' 카테고리의 다른 글
[Hadoop] localhost:9000 failed on connection 에러 해결하기 (0) | 2022.02.24 |
---|
댓글