Java 프로그래밍으로 MapReduce 프레임워크와 인터페이스에 맞추어서 대용량 분산 데이터처리를 할 수 있는 것은 대단한 발전이었다.
하지만, Java 로 데이터 파싱부터, 데이터 처리, 정렬, 조인 등의 모든 데이터처리를 매번 짜는 것은 번거로운 일이다.
SQL, DSL 과 같은 형식의 데이터를 조작하기에 쉬운 언어로 동작한다면 더 효율적일 것이다.
파일의 형식만 지정할 수 있을 뿐, 그 안의 내용을 해석하는 것은 맵리듀스 어플리케이션 개발자의 몫이다. 따라서 데이터 파싱코드를 매번 짜야한다.
파싱 코드를 직접 짜는 것으로 인해 고수준의 복합적인 데이터 모델을 하기 어렵고, 데이터의 변화를 관리하기 또한 어렵다.
뿐만 아니라 파싱과정에서 일어날 수 있는 수많은 예외처리를 고려하는 것은 즐거운 일은 아니다.
맵리듀스 어플리케이션은 코드로 정의한 Map, Reduce 단계를 그대로 따른다.
물론 Java OOP와 맵리듀스의 체이닝 등을 활용하면 재사용성을 높이면서 새로운 데이터 흐름을 만들 수 있지만, 역시 컴파일하고 실행해서 검증하는 과정을 거쳐야 하는 것은 마찬가지이다.
MapReduce는 fault tolerance 와 scalability 지원 때문에 데이터 흐름에서 많은 checkpoint 파일을 생성하고, 데이터 IO가 많아진다.
이는 데이터 흐름이 길거나 복잡할수록 더욱 심해진다.
또한 데이터 grouping을 위해서 외부 정렬 후 병합 방식을 취하므로, 논리적으로는 의존성이 없어 병렬로 분기할 수 있는 흐름을 병렬로 수행할 하기 힘들다.