2월, 2020의 게시물 표시

오픈소스 프레임워크 정리(Presto, Airflow, Slider, OpenTSDB)

이미지
Presto 빅데이터 분석 도구로, 분산된 SQL 쿼리 엔진이다. 테라, 페타 바이트 단위의 데이터를 분산 쿼리를 사용하여 분석할 수 있는 툴이다. Hive나 Pig는 쿼리가 맵리듀스 잡으로 실행되는 반면 Presto는 쿼리 실행 엔진이 구현되어 있어서 단계별 결과를 디스크에 쓰지 않고 메모리에서 메모리로 데이터를 전달할 수 있다. Coordinator(master)와 Worker(slave)가 있다. Coordinator: Client로부터 요청을 받는다. SQL 구문을 parsing한다. 쿼리를 실행할 worker 노드를 조정하고 노드의 활동을 트래킹한다. Worker: Coordinator에게서 받은 태스크를 수행하고 데이터를 처리한다. 수행 결과는 바로 worker에서 client로 전달한다. 프레스토에서 connector는 데이터베이스에서의 driver와 같은 역할을 한다. 즉, 데이터 소스에서 데이터를 읽어올 수 있도록 이어주는 역할을 한다. 다양한 저장소에서 저장된 데이터를 SQL을 이용해서 조회할 수 있다. 프레스토 쿼리에서는 하나 이상의 catalog를 사용할 수 있다. 즉, 하나의 쿼리에서 여러 개의 데이터 소스를 사용할 수 있다. 프레스토 워커 프로세스가 시작하면 Coordinator의 discovery server에 등록된다. discovery server에 등록돼야 coordinator가 태스크 실행에 워커를 배정할 수 있다. 클라이언트는 HTTP로 쿼리를 coordinator에 보낸다. Coordinator는 connector plugin에 스키마 데이터를 요청한 뒤 쿼리 플랜을 작성한다. Coordinator에서 워커로 수행해야 할 태스크를 전달한다. 워커는 connector plugin을 통해서 데이터 소스로부터 데이터를 읽어온다. 워커는 메모리에서 태스크를 수행한다. 실행 결과를 바로 클라이언트에게 전달한다. < https://docs.ncloud.com/ko/hadoop/chadoop...

오픈소스 프레임워크 정리(Zeppelin, Hue, Kibana)

이미지
Zeppelin 특징 스파크를 통한 데이터 분석의 불편함을 웹 기반의 노트북을 통해서 해결하기 위한 애플리케이션이다. 웹에서 다양한 언어를 섞어가며 분석 코드를 짤 수 있고 이 결과를 바로 그래프로 시각화해서 볼 수 있다. 웹소켓을 활용하여 같은 노트북을 여러 사람이 동시에 편집할 수 있는 협업 기능을 제공한다. Spark, SparkSQL의 결과를 바로 차트로 그릴 수 있다. 자체적으로 스케줄 기능이 내장되어 있다. HTML을 표현하는 게 가능하므로 테이블에 이미지를 표시하고나 링크를 넣거나 하는 등의 동작이 가능하다. 구조 장점 아파치 스파크와 궁합이 잘 맞다. 스파크의 성능 덕분에 대부분 코드가 즉시 실행되므로 interactive한 레포트를 작성할 수 있다. Tadpole이나 airpal이라는 솔루션들도 SQL을 이용하여 실무자가 직접 쿼리를 만들거나 실행하는 GUI 도구이지만 이들에 비해 갖는 장점은 특정 사용자가 변경하거나 쿼리를 실행시키면 그에 대한 반응이 다른 사용자의 브라우저에도 자동 반영되기 때문이다. 단점 사용사례 <http://zeppelin.apache.org> Hue 특징 Hadoop User Experience의 약자로서 하둡 클러스터와 함께 사용되는 웹 기반 사용자 인터페이스이다. 데이터를 탐색, 쿼리 및 시각화를 하기 위한 analytic workbench이다. 하둡 에코시스템을 웹 인터페이스로 접근할 수 있다. 다른 하둡 에코시스템과 함께 그룹화되어 하이브 작업 및 스파크 잡 등을 수행할 수 있다. Hue에 저장한 워크플로우, 쿼리, 스크립트 파일을 볼 수 있다. HDFS에 저장된 파일을 볼 수 있다. S3 버킷에 저장된 파일을 볼 수 있다. 하이브 웨어하우스에 저장된 테이블을 볼 수 있다. 실행한 우지의 잡 상태 로그를 볼 수 있다. 하이브 쿼리, spark-shell과 같은 interactive한 구문, 우지 워크플로우를 통한 jar와 Distcp와 .sh파일과...

오픈소스 프레임워크 정리(ElasticSearch, Docker, Kerberos, Ansible)

이미지
ElasticSearch 특징 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 루씬 기반의 분산형 오픈 소스 검색 및 분석 엔진이다. 자바로 개발되었다. 로그스태시라는 데이터 수집 및 로그 파싱 엔진과, 키바나라는 분석 및 시각화 플랫폼과 함께 개발되었다. 이 세 가지를 ELK 스택으로 부른다. 로그스태시로부터 받은 데이터를 검색 및 집계를 해서 필요한 관심 있는 정보를 획득한다. 클러스터는 하나 이상의 노드들로 이루어진 집합니다. 서로 다른 클러스터는 데이터를 교환할 수 없는 독립적인 시스템으로 유지된다. 여러 서버가 한 클러스터를 구성할 수도 있고 한 서버에 여러 클러스터가 존재할 수도 있다. 노드는 엘라스틱서치를 구성하는 하나의 단위 프로세스이다. Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있다. Master-eligible node: 마스터로 선택할 수 있는 노드이다. 마스터는 인덱스 생성/삭제, 클러스터 노드들의 추적/관리, 데이터 입력 시 할당될 샤드 선택 등을 한다. Data node: 데이터 CRUD 작업이 관련된 노드이다. 자원을 많이 소비하므로 모니터링이 필요하다. Ingest node: 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할이다. Coordination only node: 로드 밸런서와 비슷한 역할을 한다. 샤딩: 데이터를 분산해서 저장하는 방법 레플리카: 또 다른 형태의 샤드라 볼 수 있다. 노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드를 복제한다. 테이블과 스키마 대신 문서 구조로 된 데이터를 사용한다. Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없고 자동으로 인덱싱해준다. 데이터 CRUD 작업은 HTTP Restful API를 통해 수행된다. 샤드를 통해 규모가 수평적으로 scale out할 수 있다. multi-tenancy: 하나의 엘라스틱서버에 여러 인덱스를 저장하고 여러 인덱스의 데이터를 하나의 쿼리로...

오픈소스 프레임워크 정리(Spark, Oozie, Kafka, Storm)

이미지
하둡의 한계: 맵리듀스 잡의 결과를 다른 잡에서 사용하려면 이 결과를 HDFS에 저장해야 하기 때문에 이전 잡의 결과가 다음 잡의 입력이 되는 반복 알고리즘에는 맞지 않다. 하둡은 low-level 프레임워크다보니 데이터를 조작하는 high-level 프레임워크나 도구가 많아 환경이 복잡해졌다. Spark 특징 빅데이터 처리를 위해 대량의 데이터를 고속 처리하는 오픈소스 병렬 분산 처리 플랫폼이다. 데이터셋을 추상적으로 다루기 위한 RDD라는 데이터셋이 있다. RDD(Resilient Distributed Dataset)은 노드에 장애가 발생해도 데이터셋을 재구성할 수 있는 복원성을 갖는다. 배치 처리, 스트림 처리, SQL 처리와 같은 서로 다른 형태의 애플리케이션을 하나의 환경에서 통합적으로 다룰 수 있다. HDFS만 읽는 것이 아니라 Hive, Hbase, PostgreSQL, Mysql, Maria, CSV 등의 DB도 읽을 수 있다. 스톰보다는 범용 분산형 컴퓨팅 플랫폼에 가깝다. 하둡에서 맵리듀스의 기능성을 대체할 수 있고 자원 스케줄링에는 얀을 이용한다. 하둡과 같이 사용하지 않을 경우 NFS, AFS 등 네트워크/분산형 파일 시스템을 이용해야 클러스터에서 실행시킬 수 있다. 그래야만 각 노드가 기반이 되는 데이터에 접속할 수 있기 때문이다. 구조 스파크 코어: 병렬분산처리 엔진 스파크 SQL: SQL 담당 스파크 스트리밍: 스트림 처리 담당 MLlib: 머신 러닝 담당 그래프X: 그래프 처리 담당 장점 메모리 효율을 높여서 하둡의 맵리듀스보다 빠르게 설계되었다. 맵리듀스처럼 잡에 필요한 데이터를 디스크에 매번 가져오는 대신 데이터를 메모리에 캐시로 저장하는 인메모리 실행 모델을 쓴다. 이런 변화는 머신 러닝, 그래프 알고리즘 등 반복 알고리즘에 유리하다. 맵리듀스는 기본적으로 메인, 매퍼, 리듀스 클래스 세 가지를 만들어야 하지만 스파크는 간단한 코드로 짤 수 있다. 일괄 처리 작업이나 데이터...

오픈소스 프레임워크 정리(Ambari, Zookeeper, Hive, HBase)

이미지
Ambari 특징 하둡 클러스터를 관리하는 웹 기반 관리 툴이다. 하둡 클러스터의 상태를 모니터링해서 대쉬보드에 보여준다. 암바리를 이용해서 서비스를 시작이나 중지 시킬 수 있고 클러스터에 호스트를 추가할 수 있고 서비스 설정을 업데이트 할 수 있다. Kerberos 기반의 하둡 클러스터를 설치함으로써 authentication, authorization, auditing 등을 제공한다. 호스트에 하둡 서비스를 설치하는 것을 도와준다. 각 호스트는 암바리 에이전트의 복사본을 갖고 있어서 암바리 서버의 통제를 받을 수 있다. 아파치 애플리케이션에 단순히 뷰를 추가함으로써 기능성을 확장할 수 있다. active directory에서 LDAP과 sync할 수 있다. 써드파티 업체들이 쉽게 암바리에 기능을 추가할 수 있도록 stack이나 view의 기능을 제공한다. 구조 암바리 서버: 관리하는 모든 동작들이 들어오는 곳이다. ambari-server.py라는 파이썬 코드에 의해 동작한다. 암바리 에이전트: 암바리로 관리하고 싶은 모든 노드들에 있다. 하트비트를 마스터로 보낸다. 이 에이전트를 통해서 서버는 여러 작업들을 한다. 암바리 스택: 암바리가 제공하는 설치/배포 기능에 다른 eco들도 쉽게 추가할 수 있도록 한다. 암바리 뷰: 새로 개발된 기능의 UI를 쉽게 추가할 수 있도록 API를 지원한다. 암바리 컨테이너 안에 넣을 수 있는 애플리케이션과 같은 것이다. 자바로 쓰여있는 server-side resource는 외부 시스템과 integrate할 수 있다. HTML, JavaScript와 같은 client-side assets는 암바리 웹에서 보여지는 것을 제공한다. 장점 하둡 클러스터를 설치, 설정, 관리하기 쉽다. 보안이나 애플리케이션 관리를 중앙화한다. 단점 사용사례 Zookeeper 특징 분산 코디네이션 서비스 시스템으로서 분산 시스템 내에서 중요한 상태 정보나 설정 정보등을 유지한다. 분산 코디네이션 시...

오픈소스 프레임워크 정리(YARN, HDFS, MapReduce)

MapReduce 특징 페타바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해 개발되었다. 맵리듀스 작업이 시작될 때 HDFS에서 데이터를 갖고 오고 작업이 끝나면 HDFS에 데이터를 쓴다. 2 phases: map & reduce. 그 사이에 sort와 shuffle이 있다. 맵과 리듀스의 input, output은 기본적으로 key, value 쌍이다. 슬롯이라는 개념으로 클러스터에서 실행할 수 있는 태스크 갯수를 관리한다. 맵 슬롯과 리듀스 슬롯이 있다. 맵리듀스 클러스터 안에서 모든 기능이 다 수행되므로 컴퓨팅에 필요한 리소스 상태(각 서버의 상태)는 맵리듀스의 마스터 서버 역할인 잡트래커에 의해 관리됐다. 구조 잡트래커: 클러스터 자원 관리와 애플리케이션 라이프 사이클 관리라는 두 가지 핵심 기능을 수행한다. 클라이언트가 job을 잡트래커에게 보내면 잡트래커는 노드들에게 맵과 리듀스 태스크를 할당한다. 태스크트래커: 각 슬레이브 서버마다 하나의 데몬이 실행된다. 태스크를 할당 받은 노드들은 태스크트래커라는 데몬에 의해 각각 실행되는데 태스크트래커가 태스크를 인스턴스화하고 진행 상황을 잡트래커에 보고한다. 태스크를 실행할 때 태스크트래커의 쓰레드를 쓰는 것이 아니라 별도의 프로세스로 fork시켜서 실행한다. 태스크가 종료될 때 마다 태스크트래커는 잡트래커로부터 자기에게 할당된 다음 태스크를 가져와서 실행한다. 장점 단점 Single Point of Failure: 잡트래커가 돌아가고 있지 않으면 맵리듀스 잡 실행이 불가능하다. 잡트래커에는 전체 잡의 실행 정보를 유지해야하므로 힙 메모리도 여유있게 할당해줘야하는데 메모리가 부족하면 모니터링 할 수도 없고 새로운 잡의 실행을 요청할 수도 없다.(SPOF와 일맥상통) 맵 슬롯과 리듀스 슬롯 중 하나만 사용할 때는 다른 하나가 잉여 자원이 되기에 리소스 낭비이다. 클러스터 확장성이 제한적이다. 컴퓨팅 리소스 ...

하둡 완벽 가이드 12장 하이브 // HBASE, 주키퍼

12장 하이브 하둡 기반의 데이터 웨어하우징 프레임워크이다. 대용량의 데이터를 관리하고 학습하기 위해 사용되었다. 대용량의 데이터를 HDFS에 저장하고 HiveQL을 이용해서 데이터를 분석할 수 있다. 사용자가 HiveQL을 작성한 후 실행하면 하이브는 해당 쿼리를 맵리듀스의 잡으로 변환하여 하둡 클러스터에서 구동시킨다. HDFS에 저장된 데이터와 테이블 스키가 사이에서 하이브가 매개체 역할을 한다. 테이블 스키마와 같은 메타데이터는 메타스토어에 저장된다. RDBMS는 데이터를 적재하는 시점에 테이블의 스키마를 검증하는 반면 하이브는 쿼리가 발생할 때 데이터를 검증한다. 기본형과 복합형 데이터 타입 모두를 지원한다. 기본형: 숫자형, 불린, 문자형 등 복합형: 배열, 맵, 구조체 등 하이브 테이블은 데이터와 메타데이터로 구성되는데 데이터는 일반적으로 HDFS에 저장하고 메타데이터는 RDBMS에 저장한다. 데이터 정렬은 order by를 쓸 수 있지만 전체 정렬을 하려면 리듀서 개수가 하나여야 해서 성능이 좋지 않다. 부분 정렬로 충분하다면 sort by를 사용할 수 있다. 하이브는 맵리듀스에 비해 일반적으로 사용되는 연산을 매우 간단히 수행할 수 있다. 조인 연산 같은 경우 맵리듀스로 구현하는 것이 복잡하다. 내부조인: 두 테이블 중 모든 값이 다 맞춰지는 데이터들을 합쳐주는 것. null이 없을 것. 외부조인: 한 쪽, 혹은 양 쪽의 로우가 다 나오도록 합쳐주는 것. 빈 곳은 null로 표현. HBase 주키퍼 하둡의 분산 상호조정 서비스. 파일을 보내고 네트워크가 끊기면 수신자가 데이터를 받았는지 조차도 알 수 없게 되는데 이것을 부분적 실패 partial failure라고 한다. 이러한 부분적 실패를 안전하게 다루면서 분산 응용 프로그램을 구축할 수 있도록 도와주는 툴을 제공한다. 주키퍼의 특성: 단순함, 다양성, 고가용성, 느슨함, 라이브러리

하둡 완벽 가이드 9장 하둡 클러스터 설정 10장 하둡 관리

9장 하둡 클러스터 설정 데이터노드에 RAID를 사용할 필요가 없고, 네임노드에는 사용할만 하다. RAID(Redundant Array of Independent Disks): 여러 개의 하드디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다. 하둡 제어 스크립트는 ssh를 사용하기 때문에 ssh 공개/개인 키를 사용하면 편하다. hadoop-env.sh 하둡 환경변수 HADOOP_HEAPSIZE: 데몬 힙 사이즈. 태스크트래커는 자식 프로세서를 생성해서 jvm을 실행시키므로 이를 고려해서 heap size 조절 HADOO_LOG_DIR: 하둡 로그 저장 위치 HADOOP_SSH_OPTS: ssh 옵션 core-site.xml: hdfs, mapred 공통 설정 hdfs-site.xml: hdfs 설정 mapred-site.xml: mapred 설정 masters: 보조 네임노드 구동 컴퓨터 목록 slaves: 데이터노드, 태스크 트래커 구동 목록. 클러스터가 시작될 때만 사용되고 하둡 데몬은 참조하질 않는다. hadoop-metric.properties: 매트릭스 제어 log4j.properties: 로그 설정 start-dfs.sh: 로컬 컴퓨터 상에서 네임노드 실행 slaves 파일에 열거된 각 컴퓨터 상에서 데이터 노드를 실행 masters 파일에 열거된 각 컴퓨터 상에서 보조 네임노드를 실행 start-mapred.sh: 로컬 컴퓨터 상에 잡트래커 실행 slaves파일에 열거된 각 컴퓨터에서 태스크 트래커 실행 KDC(커버로스 키 분배 센터)에서 인증받은 후 네임노드가 위임 토큰을 발급해서 이후 KDC에 접근하지 않고 접근이 가능하다. dfs.block.access.token.enable을 true로 해줘야 되는 듯..? heartbeat 속에 비밀키를 실어서 보내면 클라이언트는 네임노드에게 토큰을 발급받는다. 잡이 끝나면 위임 토큰을 무효화시킨다. 10장 하둡 관리 RPC(Remo...

하둡 완벽 가이드 5장 맵리듀스 프로그래밍 6장 맵리듀스 작동 방법

5장 맵리듀스 프로그래밍 Job Tuning 매퍼 개수: 매퍼가 얼마나 오랫동안 수행되고 있는가? 너무 작은 시간 동안 수행된다면 더 작은 수의 매퍼를 사용해본다. 리듀서 개수: 리듀서 개수는 거의 클러스터에 있는 리듀스 슬롯 개수보다 적어야 한다. 리듀서가 한 번만에 완료되고 리듀서 단계에서 클러스터 전체를 이용하도록 지원한다. 컴바이너: 사용자 잡이 컴바이너를 이용할 수 있는지 확인한다. 중간 데이터 압축 맞춤형 직렬화 셔플 꼬임 Apahce Oozie 연관되어 있는 잡의 워크플로우를 실행하는 시스템이다. 하둡 클러스터에서 수천 개의 워크플로우를 적합한 시간 내에 실행되도록 관리할 수 있다. workflow engine: 다른 종류의 하둡 잡으로 구성된 워크플로우를 저장하고 실행한다. coordinator engine: 미리 정의되어 있는 스케쥴과 데이터 가용성을 기반으로 워크플로우 잡을 실행한다. 6장 맵리듀스 작동 방법 맵리듀스1 클라이언트: 맵리듀스 작업을 제출한다. 잡트래커: 잡 수행을 상호조정한다. 태스크트래커: 해당 잡에 대해 분할된 태스크를 수행한다. 분산파일시스템: 다른 단게 간에 잡 파일을 공유하기 위해 사용된다. 잡 설정 태스크: 태스크트래커가 맵 태스크 실행 전 잡 설정을 위해 실행 잡 청소 태스크: 리듀스 태스크 실행 전 잡 청소를 위해 실행 맵리듀스2(얀) 병목현상을 해결하기 위해 설계됐다. 잡트래커의 책임을 여러 개의 책임자에게 분리해서 나눠준다. 리소스매니저: 클러스터 전반에 걸쳐 리소스 이용을 관리한다. 애플리케이션마스터: 클러스터에서 실행 중인 애플리케이션의 생명주기를 관리한다. 얀은 맵리듀스보다 더 일반적이다. 동일 클러스터에서 여러 다른 얀 애플리케이션이 함께 실행될 수 있다.

하둡 완벽 가이드 3장 하둡 분산 파일시스템

3장 하둡 분산 파일시스템 HDFS 블록은 기본적으로 64MB로 디스크 블록에 비해 큰데 이는 탐색 시간을 최소화하기 위함이다. 네임 노드가 장애복구 능력을 갖추기 위해 갖는 두 가지 매커니즘 1. 파일시스템 메타데이터의 지속 상태를 보완해주는 파일을 백업한다. 2. secondary namenode를 운영한다. 주기적으로 네임스페이스 이미지를 에디트 로그와 병합하고, 주 네임노드가 실패했을 때 사용될 병합된 네임스페이스 이미지 복제본을 유지한다. 하둡2.x 릴리즈부터 한 쌍의 네임노드를 active-standby로 구성하여 HDFS high availability를 지원한다. 이를 통해 하나의 네임노드에 장애가 발생해도 중단 없이 다른 네임노드가 활성화된다. 데이터노드는 블럭에 대한 정보를 두 개의 네임노드에 모두 내보내야 한다. hadoop fs -copyFromLocal path/file path/file hadoop fs -mkdir prac HTTP 기반으로 HDFS로 액세스하는 두 가지 방법 1. HDFS 데몬이 클라이언트 HTTP 요청을 직접적으로 처리 2. 범용 DFS API를 사용하여 클라이언트의 HDFS에 대한 요청을 proxy로 간접적으로 처리. 이 경우 더 엄격한 방화벽과 대역폭-제한 정책이 사용될 수 있다. HDFS 구조는 클라이언트가 데이터를 얻기 위해 데이터노드에 직접 접근해야하므로 전반적으로 퍼져 있는 데이터노드들에게 골고루 로드가 분배되고 다수 클라이언트가 동시에 사용하기 용이하다. 네임노드는 단순히 블록 위치 정보 요청을 서비스하고 병목 현상이 생길 작업은 하지 않는다. 네임노드가 복제본을 저장할 데이터노드를 배치할 때 첫 번째 복제본은 클라이언트와 같은 노드에 배치하고, 두 번째와 세 번째는 다른 외부 랙에 서로 다른 노드에 복제된다. HDFS는 FSDataOutputStream의 sync() 메소드를 통해 모든 버퍼가 네임노드에 동기화되도록 강제하는 메소드를 제공한다. 어느 정도 오...

Hadoop 완벽 가이드 1장 2장

1장 하둡 vs 자발적컴퓨팅 자발적 컴퓨팅은 큰 데이터를 쪼갠 뒤 세계 여러 컴퓨터로 보내서 풀어달라고 한다. 신뢰할 수 없는 컴퓨터이기 때문에 3개의 지원자 중 2개 이상이 일치할 경우 승인하는 방식이다. 이는 대역폭을 늘리는 것이 아니라 cpu 사이클을 늘리는 방식이다. 하둡은 이와 다르게 단일 데이터 센터에서 실행되므로 신뢰할 수 있는 전용 하드웨어이다. 피그: 대규모 데이터 셋 탐색용 데이터 흐름 언어와 실행 환경. HDFS와 맵리듀스 클러스터에서 수행된다. 하이브: 분산 데이터웨어하우스. HDFS에 저장된 데이터를 관리하고 데이터 쿼리를 위해 SQL 기반 쿼리 언어를 제공한다. HBase: 분산 컬럼 지향 데이터베이스. 스토리지로 HDFS를 사용한다. 맵리듀스를 이용한 일괄 처리 방식의 계산과 랜덤 읽기가 가능한 포인트 쿼리 방식 모두를 지원한다. 주키퍼: 다수 컴퓨터로 분산 처리되는 고가용성 저장 서비스. 분산 응용 프로그램을 구축하기 위해 사용될 수 있는 분산 락 같은 primitive를 제공한다. 스쿱: 관계형 데이터베이스와 HDFS 간 데이터를 효율적으로 이동시키기 위한 도구. 오지: 하둡 잡의 워크플로우를 실행하고 스케쥴링하기 위한 서비스. 2장 맵리듀스 맵 단계의 입력은 원본 데이터이다. 예를 들어 세계 각 기상청에서 만든 데이터들을 수집해서 각 해의 최고 기온을 뽑는다고 해보자. 맵 함수는 리듀스 함수의 준비 단계인데 잘못된 레코드를 제거하는 역할도 수행한다. 각 데이터는 키-값 쌍으로 맵에 전달된다. 이 때, 키는 파일 내에서 몇 번째 데이터인지 나타내는 오프셋이다. (1, 2020xxxx41xxxx) 맵에서 키는 무시하고 값 데이터에서 연도와 기온을 추출한 뒤 출력한다. [2020, 41], [2020, 25], ... 이 출력이 리듀스 함수로 전달 되기 전에 맵리듀스 프레임워크가 키를 중심으로 값의 리스트를 만들어서 리듀스 함수로 보낸다. (2020, [41, 25, 33, 31]) 리듀스 함수...