간단한 단위작업을 반복해서 처리할때 사용하는 프로그래밍 모델, 그리고 그 모델을 구현한 프레임워크이다.
페타바이트 이상의 대용량 데이터를 분산/병렬 처리하기 위해 별도 모델까지 필요해졌다.
간단한 단위작업을 처리하는 Map작업과, 작업의 결과물을 모아서 집계하는 Reduce 단계로 구성되어 있다.

하둡 v1에서는 작업단위를 job이라고 했지만, 하둡 v2부터는 YARN아키텍쳐가 도입되면서 작업단위를 애플리케이션이라고 부르기 시작했다.
애플리케이션은 맵 태스크와 리듀스 태스크로 나뉜다.
각 태스크들은 attempt단위로 실행되고 관리된다.
따라서 하둡 애플리케이션은 생성되면 application_xxx_xxx 라는 식별자를 갖고, 애플리케이션에서 생성되는 태스크들은 생성되면 attempt_xxx_xxx 라는 식별자를 갖는다.
맵태스크에 입력된 데이터는 입력분할(inputSplit)단위로 분할된다. 큰 데이터를 여러 노드에 분할해 동시에 병렬처리하기 위함임.
스플릿의 크기는 트레이드오프가 있다. 스플릿이 너무 작으면 작업 부하가 분산되어 성능은 높아질 수 있지만, 작업의 개수가 증가하고 작업생성을 위한 오버헤드가 증가한다. 보통 HDFS블록의 기본크기인 128MV를 인풋스플릿 크기로 잡는다.
이보다 커지면 데이터지역성이 떨어져 성능에 손해가 생길 수도 있음. 또한 HDFS내의 네트워크 대역을 이용해 노드간 통신해야 할 수도 있어 비용이 든다.