인프런 커뮤니티 질문&답변

odark님의 프로필 이미지
odark

작성한 질문수

Data Engineering Course (1) : 빅데이터 하둡 직접 설치하기

캐나다 코빅19 2020-20201년 4월 기준 일별로 비교하여 데이터 조회 어플리케이션 추출

hadoop 클러스터 메카니즘이 넘 헷갈립니다.

작성

·

553

0

사소한 질문에도 성의껏 답변주셔서 너무 존경스럽고 감사합니다. 솔직히 너무 이해가 안되서 짜증섞이인 마음으로 질문드렸던게 오히려 죄송하네요~~ ㅠㅠ 강좌는 단일 노드(standalone ) 방식이라 클러스터 개념을 생각하면서 더 헷갈리기 시작합니다. 그래서 여기저기 검색해보면서 이해를 해보려는데 개념이 부족한부분들을 질문좀 올릴까 합니다.
1. 실전에서 구성이 네임노드, 데이터 노드 각각 모두 개별 서버인거지요? 그러면 이 클러스터를 구성하기 위해 hadoop을 설치할때는 별도 hdfs client 서버에서 네임노드(즉, master 노드) 와 데이터노드를 설정과함께 클러스터 구성 명령어(hadoop설치명령어)를 날리나요? 아니면 master노드에서 강좌에서 하시는 hadoop을 설치하나요? 어디에서 설치해야 하나요? 클라이언트 서버가 있다면 이곳에서 다른 네임노드1대와 나머지 데이타노드 3대를 묶을수있도록 한번에 hadoop설치 명령어 및 cli명령어도 날려야 할텐데..어떻게 이런명령어를 날릴수있도록 인터페이스를 구성할수있는거죠?
2. 두번째는 HDFS 은 데이타를 분산저장하는 파일시스템(네임노드+데이터노드)이라고했는데 즉, 저장 용도라면 wordcount 맵리듀스가 실행된 후 생성되는 output폴더가 HDFS의 파일시스템에 놓인 결과물인가요? 데이타 노드가 여러개인데 output폴더는 어느 데이타 노드 폴더위치에 놓이나요? 또한 wordcount.txt input 데이타를 각 노드에서 분산해서 map을 만들고 분산처리를 할텐데 이때 일정 사이즈만큼 데이타 노드가 각각 분산처리하기 위해 임시저장용도로 hdfs가 쓰이는건가요? 이런때도 replica개념이 들어가나요? 이 hdfs 가 분산처리 파일시스템이라는말만 익숙할뿐 실제 분산처리 결과 저장용으로 쓰이고 또 input데이타를 나눠가지고 저장하고 또 태스크 트래커가 작업할때 이용할수있는 나눠가진 데이타 임시저장용도로 쓰이는건지..이 제가 이해한게 맞는건지 궁금합니다.
3. 마지막으로 분산처리한 결과를 다시 hdfs에 복제저장하는건지......
이렇게 제가 개념을 못잡는게~~ input이라는 입력데이타를 다 쪼개서 나눠가져가서 트래커가 각각 일을 처리할텐데....그때는 hdfs개념이 없이 트래커가 알아서 각자 input데이타를 쪼개서 나눠가져서 일을 처리하고 그 결과를 hdfs에 저장하고 그 결과가 하나의 output폴더로 보여지게 되는건지.. 너무 그림이 안그려지네요 ㅠㅠ
hdfs는 저장용도인데...어느시점에서 개입하게되는건지가 궁금합니다.
맵리듀스를 분산처리하기 위해 output을 나눠서 분산저장하기 위할때 그때 hdfs가 필요한건지...그렇다면 이건 왜 굳이 replica까지 필요할까 싶기도하구요..또한.결과물이 output나올때 hdfs에 저장되는건지...
4. 마지막으로 hive 라는걸 얼핏봤는데 강좌와는 별개입니다.
답변주실지 모르겠네요
가령 wordcount.txt input파일을 이용해 테이블을 만들고 그 테이블을 이용해 word, count 컬럼을 갖는 결과 테이블을 hive쿼리를 이용해서 create table wordcount_result이라고 생성을 하면 이 테이블 데이타를 파일로 저장을 해야 로컬스토리지로 가져올텐데 어떻게 파일로 저장하여 로컬 스토리지로 반대로 가져올수있는걸까요?

답변 2

3

Billy Lee님의 프로필 이미지
Billy Lee
지식공유자

Odark님에게

아뇨.. 저도 사실 하둡 강의 준비를 진행하면서 많은 이론으로 짜증이 났습니다. 옆에 있던 아내도 "왜 그러냐고?" 물어볼 정도였죠..  처음부터 말씀드린다면 하둡과 빅데이터 개념을 잘 이해하여야 하지만,  그렇다고 모든 개념을 머리속에 이해할 정도여야 한다면 아마 포기할 것입니다. 여기 캐나다 금융권에서 하둡 일하거나 또 하둡 강의를 올린 사람들이 거의 이란 사람들입니다. 단독적으로 말한다면 서양인들은 개념만 만들고, 동양인들이 머리 골머리를 앓고 개발 준비하는 억울한(?) 상황이죠.. 그렇다고 전부는 아니지만요... ㅎㅎ.. 괜찮습니다. 스트레스는 받죠..

다만 제가 그 스트레스를 먼저 겪은 뒤 여러분께 좀 쉽게 풀어주는 것이죠..

  1. 우선, 저의 강의는 단일 노드(standalone) 방식입니다.  그러기에 분산처리 개발은 아직 시작도 안한 것이기  때문에 더 헛갈린 겁니다. 단일 노드 방식, 곧 쉽게 말씀드리면 한 컴퓨터에 하둡 관련 소프트웨어와 HDFS 하나가 다 들이 부어 시작한다고 생각하면 됩니다. 저의 강의 이론과 실습에 Odark님의 분산 개념으로 개발하려는 의도로 이들은 혼돈이 있으니 당연할 수 있습니다. 너무 복잡하게 생각한 거죠.. 처음 단일 노드에 하둡을 설치하면 네임노드, 데이터 노드 별도가 아닌 한 곳에 있는 것이라고 생각하시면 너무 복잡하지 않겠죠?
    다음 강의에서 분산 처리로 여러 대 노드 곧 몇 대의 컴퓨터를 설치하면서 멀티노드를 설치함과 동시에 고유 IP 주소 설정을 다룰 것입니다. 다시 말씀드리면 여러 노드들을 생각하지 마시고, 아래 그림처럼 단일 노드에는 몽땅 넣은 것이라고 생각하세요. 분산 노드 설치시 마스터 노드들과 슬레이브 노드들은 다 하둡 설치를 동시에 원격으로 일정하시면 됩니다. 혹은 클론처럼 하둡 설치된 한 노드들을 수 십 수백개 복제해버리는 거죠. 무척 고된 작업이고 시간 소요가 많이 들죠. 그러면서 모든 노드들의 IP 주소를 다르게 만들어야 하며 마스터 노드들은 슬레이브 노드들 곧 데이터 노드들의 주소를 가지고 있도록 환경 세팅 해야 합니다. HDFS client 서버도 마스터 노드에서  명령어를 날려서 실행하지만 별도로 모든 노드들의 명령어를 일괄 하도록 별도로 구성해야 합니다. 자세한 내용은 다음 강의를 올리면서 복수의 노드들 구성하게 되면서 알게 됩니다.

  2. 그래서 마스터/슬레이브노드 방식인 하둡이지만, 단일 노드 방식으로 강의를 진행해서 입력물 출력물 모두 단순히 하나의 HDFS에 들어있는 것이죠. 다만 Input / Outut 폴더만 다를 뿐입니다. Output 은 저의 강의 내에서는 마스터노드이자 슬레이브 노드가 같이 있어서 구분할 필요는 없었던 겁니다. 그냥 한 머신에 윈도우 한 개 설치하여 입력값 저장 출력값 저장 디렉토리가 다른 셈이죠. 또한 개발자가 Input 의 파일 크기를 나누지 않고 맵리듀스가 자동으로 실행됩니다. 물론 여기서는 Replication Factor를 한 개로 해서 한 파일로 된 것이죠. 환경을 바꾸어 두 개 세 개 파일로 쪼갤 수 있습니다. 
    당연히 저의 강의는 거기까지 알려드리지 않았을 뿐입니다. Odark 님의 열의에 감탄합니다. 그것까지 궁금하다면 하둡에 대해 무척 관심이 높다는 말이죠. 더 깊이 배우면 이해하고 강의도 하실 듯 합니다. 어떻게 에러가 나는지 왜 이 개념이 여기서 필요한지 안다면요...ㅜ T ^.^
    아래 단일노드와 멀티노드 그림을 보시면 더 이해가 됩니다. 하둡을 설치할 때 두 가지 중 하나를 선택할 수 있죠. 단일 노드 방식으로 한 노드에 네임노드와 데이터 노드가 있고, 이들은 한 HDFS에 있는 겁니다. 마치 한 대 컴퓨터에 윈도우 설치하면 하나의 도스 방식인거죠.. DOS 시절에 공부한 저로서는 이해가 되지만,,, 다시 말씀드리면 윈도우 설치하면 윈도우 안에 도스 방식이 숨어 있고, 그래서 파일 시스템을 열면, (이는 곧 c:/dos 로 파일 방식으로 펼쳐지는 )  모습을 보는 것입니다. 물론 하나의 윈도우이지만 파티션으로 나누어 다른 파일 시스템으로 나누어 primary  system and secondary system 으로 나눌 수도 있지만 하나의 윈도우 내에 보이는 파티션 개념이죠. 파티션이 두 개라고 해서 윈도우가 두 개라는 말은 개발자로서 질문하면 아마 다들 멍 때릴 수도... 괜찮죠.. 궁금한 것은 궁금한 것이죠. 판단은 금물이죠/.. 암튼 하둡도 동일하게 네임노드/ 데이터노드 곧 마스터 /슬레이브 구조로 되어 있을 뿐이지 멀티 노드가 아니기에 동일한 노드에 존재한 하나의 하둡 시스템입니다. 역시 저의 강의는 단일 노드에서 강의를 시작한 것이라 네임노드 데이터노드를 나눈 것 자체도 하둡이 알아서 나눌 뿐(?) 사실 나눈것이 아니죠..  .. 우리가 어디에 있는지 알아내는 일은 시간낭비이죠.. 물론 알고 싶다면 저의 다음 강의를 기대하시면 알게 되겠죠.. 수동이든 자동이든 할 수 있겠지만, 지금 강의에서 단일 노드라는 점을 이해하시고 멸티 개념의 이해는 이론적으로만 생각하세요. 

    하둡 3.2.1 설치                             하둡 3.2.1 설치  1 (or ...n)  |   하둡 3.2.1 설치1 (or.....n)

    -----------                                                     -----------------------------------

    마스터노드 + 슬레이브노드                 마스터노드 1                  |      슬레이브 노드 1 (or 2...n)

    네임노드 + 데이터노드                         네임노드 1 (or 2...)      |       데이터노드 1 ( or 2...n)

    Input + Output                                    input  (or output)       |      output

    One HDFS                                               HDFS  1                          |         HDFS 2 ....

    ================                                    ================================

    단일 노드(Standalone Node)                                      멀티노드(Multi Node)



  3. 이러한 개념 위에 맵리듀스가 개발자에 의해 실행되다고 한다면, 일정 사이즈만큼 클라이언트 (HDFS Client)에서 날아온 잡을 실행하고자 관련 타스크들을 인지한 마스터 노드 곧 네임노드들은 데이터노드들의 레프리카나 관련 데이터 정보 구성요소들을 알고 있어서 어느 데이터가 어느 Output에 놓이는 것인지는 하둡과 맵리듀스가 알아서 할 겁니다. 우리는 그저 클라이언트에서 날리는 명령어로 데이터를 수행키도록 하는 것이죠. 만약 멀티노드들인 경우라 가정하여 설명 드린다면, 여러 대의 노드들은 하둡을 각각 설치했기에 HDFS가 각각 들어 있고, 이들 분산처리 파일 시스템들 사이로 input 데이터들과 output 데이터들이 그들 사이로 적재가 되는 것입니다. 저의 강의는 초보자 하둡 개발자를 길러내는 일에 주력하고자 이러한 적재를 통제하는 일들을 처음부터 실습으로서 배우면 강의 하는 저도 힘들고 배우는 여러분들도 정말 미치게(?) 만들 수도 있겠죠. 복제 매커니즘을 사용하여 여러 대의 복수 노드들을 설치하고 운영하는 일은 수 년간 하둡에 일을 담그고 나서야 가능할 수 있습니다. 물론 별도로 배워야 하구요.. 그래서 그림이 그려지지 않았던 겁니다. 
    사실 하둡의 개념은 복수 노드들인 경우에 가르쳐 드린 것이구요.. 실습은 단일 노드 상황에서 시작한 것이라 그림이 달리 그려지지 않은 것이죠. 물론 강의하면서 좀 더 그런 헛갈린(?) 이해를 가지고 있다는 분들도 있다는 가정하에 시작하지 않았다는 저의 작은 실수 이기도 하죠.

    그래서  분산 처리 결과를 생각한 나머지 HDFS 한 개로 다른 노드들에 어떻게 적재하는지 알려다 보면 머리가 쑤시게 됩니다. 저는 그 내용은 말씀 드리지 않았기에 그러합니다. 그래서 input 이라는 입력값들이 마구 흩어져서 어디로 가아하는지 어떻게 통제하여 보낼지 알려드리지 않은 겁니다. 그에 대한 간단한 답 역시 맵리듀스가 알아서 하게 될 겁니다. 다만 개발자는 어디로 갈지 혹은 어디에 적재할 지 어떻게 분산할 지 통제할 하둡 세팅만 하게 되어서, 예를 들어 레프리카를 3으로 할 지 2로 할 지 정하듯이 그런 다양한 환경세팅을 하게 됩니다. 앞으로 배우게 될 것이죠. 마치 자바를 개발하면서 어떻게 컴파일하고 어떤 파일들이 어디에 적재되는지 알지 못해도 개발하듯이 하둡과 맵리듀스 어플리케이션은 Input output 입력값과 출력값을 어떻게 저장하는지 어디에 적재하게 될 지 몰라도 맵리듀스가 단일 노드인지 멀티노드인지 분간해서 처리를 하게 될 겁니다. 다만 인풋값 폴더와 아웃풋 폴더 설정만 하는 것이죠. 아웃풋 폴더 이름 역시 아무거나 적어도 그냥 하둡이 알아서 생성하듯이 크게 신경쓰지 않아도 아웃풋 폴더 이름 세팅만 하면 생성합니다.  너무 어디에 무엇이 들어있어야 하는지 알다가는 단일 노드인데 다른 노드에서 찾게 되는 것과 마찬가지로 진땀의 수고(?)를 하게 되는 것이죠. 시간 낭비하다고 보면 알게 되지만 너무 시간을 그쪽으로 투자하다보면 다른 하둡의 개념들을 놓치고 진도 역시 늦게 됩니다. 레프리카 Replica 와 Output 값도 서로 특별히 관계는 없는 것입니다. 그저 Replica는 분산처리 환경 곧 멀티 노드에서 데이터들의 고유값들을 일정량으로 묶어 통제하는 고유키인 셈이니 맵리듀스가 알아서 하는 그의 통제 기능이며 맵리듀스 어플리케이션의 HDFS 저장하는 저장소는 하둡이 가지고 있는 특수한 도스(?) 시스템이죠.. 이들을 같이 생각하면 이마저 ....머리가 아프겠죠. 



  4. Hive 개념은 다음 강의에서 열어드릴 겁니다. 그때 더 깊은 이해를 복수 노드들을 설치한 뒤에 가능할 것이며. (사실 단일 노드에서도 네임노드와 데이터 노드가 하나의 하둡 설치된 노드 위에서 실행 되듯 하이브 역시 단일 노드에서 실행 가능하지만요) Odark님 말씀대로 궁금한 하이브와 맵리듀스 간의 차이점을 직접 설명해주셔서 미리 하이브와 맵리듀스의 차이점을 아신 것입니다. 다만 어떻게 가지고 올지 혹은 파일 저장을 할 때 로컬 스토리지를 어디에 둘지 역시 1-3번을 읽어보셨다면 이제 아실 겁니다. 
    답은 당연히 단일노드일 경우 하둡 설치, 맵리듀스 어플리케이션 실행, input /out 모두 한 노드에서 한 HDFS (로컬 스토리지 이지만 하둡 스토리지 곧 HDFS)에서 가능합니다. 리눅스 운영체제 위에 하둡을 설치하면서 HDFS가 생성될 것이며 별도로 단일 노드 위에 HIVE를 설치하고 나서 맵리듀스 어플리케이션과 동일한 결과를 가지고 오도록 HIVE가 대신 하게 되는 것입니다. HIVE도 리눅스 라는 게스토 운영체제 환경 바탕 위에 설치한 것이라 동일한 Input 곧 입력값을 동일하게 사용하면서 하이브 데이터베이스를 한 개 만들고 그 안에 테이블을 만들어 hive 퀘리 (query)를 날려서 같은 결과값을 만들어 낼 수 있는 것이죠. 그 결과값 역시 같은 단일 노드 하둡 노드 위에 혹은 리눅스 로컬 스토리지 위에 적재될 것입니다.
    그냥 리눅스 환경 에서 파일 하나 만들고, 파일을 HIVE 위에 쿼리를 날려 파일을 원하는 위치에 결과값을 떨어 뜨리는 것입니다. 만약 윈도우 환경에서는 폴더 하나 만들고 이를 입력값이라고 하고 다른 폴더 하나 만들고 이를 결과값 폴더라고 HIVE에서 지정하면 그 결과값이 결과값 폴더에 떨구게 됩니다. 윈도우 처럼요...ㅎㅎ 그냥 폴더 두 개 만들고 한 폴더에 아무 파일 넣어 버린 채 이를 입력값으로 지정하는 것이고, 여기서 하이브로 하든 맵리듀스로 하던 그 결과값은 동일할 것이며 다만 다른 것인 하이브에서 실행하였는지 맵리듀스 하둡 환경에서 실행하였는지가 다를 뿐이죠. 결과값 스토리지도 하이브에서 보든, 맵리듀스 (HDFS)에서 보았느냐만 다릅니다.
    만약 실제 프로젝트에서 복수 노드들로 구성하면서 HIVE를 어느 노드에 설치할 지에 따라 로컬 스토리지의 적재 구성도 다를 것이며 저 역시 이들을 준비해야 하는 작은 사명(?)을 님의 궁금증에서 가야할 바를 잘 알려주신 셈입니다.  
    이해가 되었다면 고맙고 궁금하다면 또 댓글을 달아주세요..


    질문에 작은 희망이 보였다면 수강평 부~~~~~~~~~탁해~~~~~~~요 ^.%                  ................. (이덕화버전)

1

odark님의 프로필 이미지
odark
질문자

너무 성의껏 해주신 죄송할정도여서 수강생으로써 더 노력하고 공부해야하겠다는 다짐의 말이 작은 보답이된다면 보답드리고싶네요...감사합니다.

Billy Lee님의 프로필 이미지
Billy Lee
지식공유자

별 말씀을요.. 다짐 앞에 큰 기대를 하게 됩니다. 이론에 관한 강의를 다시 들으시면서 중요한 개념 앞에 강의를 잠시 멈추시고 그림을 천천히 그려보시면 이해가 되실 줄 기대합니다. 하둡 전문가가 되시길 바랍니다. 토론토에서 빌리 올림

odark님의 프로필 이미지
odark

작성한 질문수

질문하기