728x90
반응형

3부로 넘어왔다.

 

1부와 2부에서는 요청과 응답, 질의와 결과에 대한 내용을 주로 다뤘다.

시스템은 세가지 유형으로 구분 가능하다.

  • 서비스(온라인 시스템)
  • 일괄 처리 시스템(오프라인 시스템)
  • 스트림 처리 시스템(준실시간 시스템)

이번 장에서는 일괄처리 알고리즘인 맵리듀스를 알아보고 다른 일괄 처리 알고리즘과 프레임워크도 살펴볼 것이다.

 

단순 로그 분석

유닉스 셸(웹사이트에서 가장 인기 높은 페이지 5개 출력)

cat 명령어 좀 공부해야겠다..!

연쇄 명령 대 맞춤형 프로그램

유닉스 연쇄 명령 대신 같은 작업을 하는 간단한 프로그램을 작성할 수도 있다.

루비로는 이렇게 작성한다고 한다.

-> 유닉스 연쇄 파이프보다 간결하지는 않지만  더 읽기 쉬우며 뭘 선택하는지는 취향의 문제이다.

정렬 대 인메모리 집계

허용 메머리보다 작업 세트가 크다면 정렬 접근법을 사용하여 디스크를 효율적으로 사용하는 것이 좋다.

유닉스 철학

연쇄 명령을 사용해 쉽게 로그파일을 분석할 수 있었던 것은 유닉스의 핵심 설계 아이디어 중 하나였다.

유닉스에서 빌려올 수 있는 아이디어에는 무엇이 더 있을까

  • 유닉스 파이프: "다른 방법으로 데이터 처리가 필요할 때 정원 호스와 같이 여러 다른 프로그램을 연결하는 방법이 필요하다. 이것은 I/O 방식이기도 하다" -> 배관 공사와 비슷한 점에 착안해 파이프로 프로그램을 연결하는 아이디어이며 이것이 지금은 유닉스 철학의 일부가 됐다.

유닉스 철학

  • 각 프로그램이 한 가지 일만 하도록 작성하라. 새 작업을 하려면 기존 프로그램을 고쳐 새로은 "기능"을 추가해 프로그램을 복잡하게 만들기보다는 새로운 프로그램을 작성하라.
  • 모든 프로그램의 출력은 아직 알려지지 않은 다른 프로그램의 입력으로 쓰일 수 있다고 생각하라. 불필요한 정보로 출력이 너저분해서는 안된다. 입력 형식으로 엄격하게 열을 맞춘다거나 이진형태를 사용하지 마라. 대화형 입력을 고집하지 마라.
  • 소프트웨어를 빠르게 써볼 수 있게 설계하고 구축하라. 심지어 운영체제도 마찬가지다. 수 주 안에 끝내는 것이 이상적이다. 거슬리는 부분은 과감히 버리고 새로 구축하라.
  • 프로그래밍 작업을 줄이려면 미숙한 도움보단 도구를 사용하라. 도구를 빌드하기 위해 한참 둘러가야 하고 게다가 사용 후 바로 버린다고 할지라도 도구를 써라.

동일 인터페이스

특정 프로그램이 다른 어떤 프로그램과도 연결 가능하려면 프로그램 모두가 같은 입출력 인터페이스를 사용해야 한다는 의미.

로직과 연결의 분리

유닉스 도구의 다른 특징으로 표준 입력과 표준 출력을 사용한다는 점이 있다.

입력은 키보드, 출력은 화면으로 설정되어 있다.

파이프는 한 프로세스의 출력을 다른 프로세스의 입력과 연결한다. 이 때 중간 데이터를 디스크에 쓰지 않고 작은 인메모리 버퍼를 사용해 프로세스 간 데이터를 전송한다.

투명성과 실험

유닉스 도구가 성공적인 이유 중 하나는 진행 사항을 파악하기가 상당히 쉽기 때문이다.

단순하지만 놀라울 정도로 유용하다.

 


 

맵리듀스와 분산 파일 시스템

맵리듀스는 유닉스 도구와 마찬가지로 상당히 불친절하고 무차별 대입 방법이지만 대신 엄청나게 효율적인 도구다.

단일 맵리듀스 작업은 하나 이상의 입력을 받아 하나 이상의 출력을 만들어 낸다는 점에서 단일 유닉스 프로세스와 유사하다.

유닉스 도구는 stdin과 stdout을 입력과 출력으로 사용하는데 맵리듀스 작업은 분산 파일 시스템상의 파일을 입력과 출력으로 사용한다.

하둡 맵리듀스 구현에서는 HDFS라고 하는 파일 시스템을 사용한다.

HDFS는 비공유 원칙을 기반으로 하며 각 장비에서 실행되는 데몬 프로세스로 구성된다.

네임노드라고 부르는 중앙 서버가 있고 파일 블록들을 여러 장비에 복제한다.

맵리듀스 작업 실행하기

맵리듀스의 분산 실행

사용자 활동 이벤트 분석 예제

728x90
반응형

+ Recent posts