하둡을 공부하다보니, 뭔가 몽글몽글하게 헷갈리는 부분이 있었습니다. 그건 바로 하둡과 그 안에 있는 여러 구성요소들(hdfs, mapreduce, yarn)의 정의를 어떻게 내리는가 할 때의 일이였습니다.
문득 내가 하둡을 뭐라고 정의하면서 사용했을까라고 생각해봤는데, 데이터를 분산 저장 및 처리하는 프레임워크라고도 하고 플랫폼 이라고도 하고 라이브러리라고도 했던거같고 뭔가 막 갖다가 썼던거같았습니다. 뭐 hdfs, yarn, mapreduce도 모듈이라고 했다가 라이브러리라고 했다가 그냥 소프트웨어라고도하고 막 그랬던거 같았구요.
지금 돌이켜보면 이 용어들의 차이를 아는 사람이 들었을 때, 그냥 영어사용하면 있어보이니 마구자비로 쓰는 중2병 걸린 학생을 보는 느낌일 것 같아 좀 부끄럽긴합니다. 물론 지금 이 글을 쓰는 시점에서도 사실 정확하게 모르지만말이죠. 뒤이은 단락에서 명확하게 정리해보기 전에 그냥 주저리주저리 한탄하는 중이니 당연한 이야기입니다.
하여튼 전 하둡이 소프트웨어인지 프레임워크인지 플랫폼인지 라이브러리인지 그걸 좀 명확하게 하고 싶어서 이 글을 작성하게 됐습니다.
모쪼록 이 글이 끝날 쯤엔 그냥 하둡이 소프트웨어인지 프레임워크인지 플랫폼인지 그 정도만 알았으면 좋겠다는 취지기 때문에 그다지 깊이는 없을 수 있다는 점 참고해주시길 바랍니다.
1. 하둡 홈페이지에서의 정의
위의 그림은 하둡 공식 홈페이지에서 하둡에 대해 소개하는 글을 가져온 것입니다.여기서 알 수 있는건 아파치 하둡 프로젝트는 오픈소스 소프트웨어를 개발한다는 것과 아파치 하둡 소프트웨어 라이브러리는 프레임워크라는 사실입니다.
그럼 HDFS, YARN, MAPREDUCE는 뭘까요?
이 역시 하둡 공식홈페이지에 잘 명시되어 있습니다. 하둡 프로젝트는 4가지의 모듈을 포함하고 그 구성요소들은 각각 COMMON, HDFS, YARN, MAPREDUCE라구요.
결국 하둡은 소프트웨어 프레임워크이고 이 프레임워크를 구성하는 모듈이 4개(COMMON, HDFS, YARN, MAPREDUCE)가 있는 것 입니다.
2. 프레임워크와 모듈
생각보다 쉽게 결론은 났지만, 솔직히 무슨 말인지 감이 안오는게 사실입니다. 그 대신, 왜 하둡을 프레임워크라고 했을까하는 의문과 모듈은 무엇을 의미하는지에 대한 호기심이 생깁니다.
프레임워크는 말그대로 뼈대입니다. IT분야에 특정해서 프레임워크를 말한다면, 어플리케이션이나 소프트웨어의 솔루션 개발을 수월하게 하기위해 제공된 소프트웨어 환경이라고 할 수 있습니다. 그리고 하둡은 대규모 데이터 세트를 클러스터 내에서 분산 저장 및 처리를 위해 개발된 프레임워크이죠.
모듈은 별도의 파일로 분리된 독립된 기능을 말합니다. 이 개념을 하둡에 대입해보면, HDFS, YARN, MAPREDUCE, COMMON은 하둡 소프트웨어 프레임워크 내에서 별도로 분리된 기능들이 됩니다. 이는 일견 이해가 바로 됩니다. 이 핵심 구성요소들은 각각의 역할이 명확히 구분되고, 이들이 각각 제역할을 함으로써 하둡이 완성되는 것이니 이들을 구분하기 위한 단위로 모듈이라는 단어를 사용하는게 납득이 간다는겁니다.
3. 사고의 전환
그러면 이젠 하둡 공식 홈페이지에서 정의한 내용을 다시 떠올려보죠.
아파치 하둡 소프트웨어 라이브러리는 프레임워크다.(The Apache Hadoop software library is a framework)
라이브러리는 필요한 기능들을 하는 코드(함수)들의 집합입니다. 이 코드 모음들이 프레임워크라는건 무엇을 의미하는 걸까요?
조금 틀어서 생각을 해보죠. 아파치 하둡 라이브러리가 프레임워크다라는 일대일 대응 관계가 아니라, 아파치 하둡 소프트웨어 라이브러리가 프레임워크가 됐다라고 말이죠. (be동사는 되다라는 뜻도 있으니까요)
이러면 꽤 느낌이 달라집니다.
아파치 하둡 프로젝트에서 만든 소프트웨어 라이브러리들이 모여서 하나의 프레임워크가 된다. 그리고 이것을 하둡이라고 한다. 그렇기 때문에 우리는 하둡을 정의할 때, 자바기반 오픈소스 프레임워크다라고 할 수 있게 된다.
정확한 정의는 아니지만 실제로 프레임워크 자체가 라이브러리들의 집합으로도 사용되곤합니다. 그리고 라이브러리는 특별한 기능을 하는 함수의 집합이죠. 이러한 라이브러리들 중에는 특히 하둡의 중요한 구성요소로 작동하는 것들이 있습니다. 그리고 그것들을 모듈이라고 부르게 되는것이죠.
간단한 도식화를 한다면, ‘프레임워크 > 라이브러리 > 모듈’이 되겠네요.
물론 실제로는 라이브러리와 모듈이 같은걸로 취급되는 경우도 많긴합니다만, 하둡의 정의에 대해 이해하는 지금 이 순간에는 라이브러리 중 좀 더 특별한 것들을 모듈로 하는것이 이해가 잘 됩니다. 라이브러리가 부품이라면 모듈은 약간 주요부품같은 느낌처럼말이죠.
지금까지의 과정이 속된말로 야매같아 보일 수 있긴합니다. 저도 뭔가 약장수가 된 기분이 드네요. 근데 제 잘못은 아닌듯합니다. 솔직히 애매하게 정의해놓은건 아파치잖아요. 전 무죄입니다.
이 포스팅을 작성하면서 진짜 많고 다양한 레퍼런스를 봣지만 사실 명확하게 각 정의들을 내리는 경우는 없었습니다. 진짜로 애매하게 혼용되는 상황인것만 확신할 수 있었습니다. 그러니 제 포스팅도 참고용정도로 취급해주시면 좋을 듯합니다. 그냥 제가 고민한 흔적을 남기는 용도니까요. 저도 언제라도 이게 이상하다 싶으면 흔적을 지워버릴껍니다.
다만 이것만 기억하죠.
하둡은 대규모 데이터 세트를 효율적으로 저장하고 처리하는데 사용되는 오픈소스 소프트웨어 프레임워크다. 그리고 하둡을 구성하는 요소들로 4개의 모듈이 있고 각각 HDFS, COMMON, YARN, MAPREDUCE이다.
이건 알아둬서 손해볼건 없을겁니다. 공통된 그리고 합의된 정의니까요. 그저 그걸 이해하는 과정이 조금씩 다를뿐입니다.