DB

hadoop clustering 서버 구축하기(1) (feat.마지막팀플!!)

Megan Kim 2020. 12. 8. 18:18

4학년 마지막 학기까지 나는 팀플을한다.이젠 정말 익숙하지만 매번 새로운 과목의 주제로 진행되는 팀플은 항상 새로운걸 공부해야한다. 나의 학부생 시절 마지막 팀플은 R기반 Hadoop 하둡 클러스터 구축 프로젝트이다. 

참고로 R은 매우 간단한 프로그래밍 처럼 보이지만, 그 간단히를 위해서 알아야하는 내부동작이 많았다. C/Java 코딩에 익숙할수록 오히려 어렵다.  Python 과 흡사한 면이 아주많고, 그렇다고 완전히 같지도않다. 그리고 많은 부분이 C로 코딩되어있는 모듈과 라이브러리들이었다.

 

주제는 두가지였다. 하나는 R 프로그래밍에 초점을 둔 데이터 분석 프로젝트였고 나머지는 R 플밍보단 Hadoop 클러스터 서버를 구축하는 실습 플젝이었다. 나로서는 당연히 후자가 나았다. 데이터 분석을 해본적도 별로 없고 직접 하둡 서버 구축하는게 경험이 되고 오히려 배울게 더 많을 것같았다. 그래서 후자로 팀을 구성했다.

 

 

 

* HADOOP? High-Availability Distributed Object-Oriented Platform

  먼저 Hadoop 빅데이터를 처리하는 Java 기반의 대용량 분산 서버 오픈 프레임워크이다. 정식 명칭은 Apache Hadoop인데, 원래는 구글에서 먼저 빅데이터용 분산서버시스템이 나왔는데 오픈하지않아 이를 이어 Apache에서 오픈소스 기반으로 만든게 하둡이다.

전통적인 데이터베이스는 정형화된 텍스트 등의 데이터 기반 RDB이다. 그러나 요즘 시대에 쏟아지는 많은 양과 여러 형태의 데이터( 영상, 사진, 등) 를 처리하는데 있어 전통적 방법의 DBMS와 SQL은 한계가 올 수밖에 없었다. 

 

하둡의 분산 처리는 하드 디스크로 부터 데이터를 병렬적으로 읽어오는데에 있다. 그동안의 하드디스크 (요즘 1TB가 기본) 용량 증가 속도에 비해 엑세스 속도 개선은 아직 한참 갈길이 멀었다. 1TB 저장공간을 읽어오는데 약 2시간반이 소요되는데 하둡은 100개를 병렬 처리하면서 1분 30초만에 처리를 하게 된다. 이를 베이스로 HDFS 라는 하둡의 파일시스템에 데이터를 저장하고 Map-Reduce(맵리듀스) 분석 방식을 통해 데이터 분석을 한다. 

하둡은 그러나 클라우드 서비스의 엄청난 상승세로 큰 인기몰이를 지속하지못했다.비용적인 측면에서도 클라우드 서비스의 이점이 대두되어, 많은 기업에서 하둡팀을 꾸리지않고 도커와 같은 컨테이너 인프라에 분산 클라우드 데이터베이스와 애플리케이션을 운영한다.

그리고 맵리듀스 기반의 하둡의 단점을 보완하기 위해 나온것이 Apache Spark 이다. 스파크는 하드디스크가 아닌 메모리를 활용하여 굉장히 빠른 장점이있고 In-memory processing, 스트리밍 분석, 인공지능 등 다양하게 활용되고 있다. 

 

 

 하둡은 Master-Slave 구성이다. 즉 Master는 클라이언트 측과 통신을 하고 Slave들에게 분산되게 일을 나누고, Slave들은 그 일을 직접 수행하는 것으로 생각하면 된다. 이를 클러스터라고 표현을 한다.

 

본격적으로 하둡 클러스터를 구성했던 이야기를 해보면,

우리는 라즈베리파이4 모듈 5개를 구입해서 1개는 마스터, 4개는 슬레이브로 정했다.

 

1. 필요한 소프트웨어 설치

* 필수

  • 운영체제 : Ubuntu 18.04 (raspian을 많이 쓰기도하는데 리눅스 기반이긴 하나 더 익숙한 우분투를 설치함.) 
  • *java 버전 : openjava-1.8  (hadoop은 자바 기반이라 자바 설치 필수)
  • *hadoop-2.9.2 (가장 최신은 아님. 설치한 자바버전과 호환되는지 확인하고 설치하면됨)
  • openssh-server 설치 (sudo apt-get install openssh-server)  - 모니터에 연결해서 사용하거나 내 pc에서 ssh 원격접속으로 사용하는 두가지 방법 중, 난 후자가 편해서 깔았다. 
  • net-tools 설치 (sudo apt-get install net-tools) 
  •  ifconfig,ping 등 네트워크 관련 유용한 툴인데 없으면 매우불편하다. 
  • 방화벽 설정 (sudo apt-get ufw , sudo ufw enable, sudo ufw allow 22 (ssh포트열기))

2. 네트워크 구성 

 

대충은 이렇게 구성하고자하였다. 참고로 라즈베리파이4는 무선랜이 탑재 되있기 때문에 와이파이가 된다. 처음엔 직접 모니터 연결해서 와이파이 연결해주면 다음부턴 자동 연결이 되는것같다. 스위치를 별도로 구입하지않아(실수로 더미 허브를 구입해서 스위치허브가 아니었다.ㅋㅋㅋ) 스위치기능을 하는 공유기에 5개의 라즈베리파이를 물리면 끝!! 인줄알았으나 사실 끝은 아니다. 

 

기본적으로 공유기는 DHCP 로 동적으로 ip를 부여한다. 그래서 매번 다른 ip를 할당받아 뭐가 어떤 앤지를 구별하기가 어려웠다. 

이를 해결하기 위해서는 라즈베리파이의 ip할당 방식을 DHCP 동적할당  -> 고정 ip 수동할당으로 세팅을 바꿔줘야한다.

 

Ubuntu 18.04기준이니 다른 배포판/운영체제 사용시는 참고만바란다. 

 

sudo vi /etc/network/10.xxx(유일한 설정파일 하나.이름은 다다름) 로 파일을 열면 아래와 같은 구성의 설정파일이 보인다.

 

여기서 디폴트로 dhcp4: true 로 되있던걸 no로 바꾸고, addresses 도 마찬가지로 현재 공유기의 네트워크 subnetting에 따라 바꿔준다.

나의 경우 사용에 쉽게 마스터1 ~ 슬레이브1~4 총 5개를 각각 192.168.7.10/24 ~ 192.168.7.50/24 로 맞춰 바꿔놓았다.

gateway는 공유기 게이트웨이를 적으면 되겠다. 192.168.0.1 (나의경우, 아이피타임) 

 

이를 저장하고 적용시키려면 ,  sudo netplan apply 를 해주면 고정 ip 설정 끝! ipconfig -a 명령어로 확인해보면 en0 에 그전엔 없었던 아이피주소가 딱 할당이 되어있는걸 확인하면 된것이다.  그럼 이제 내 pc 에서 ssh ubuntu1@192.168.7.10 이런식으로 접속이 가능하게 되는것이다. 

 

이외 하둡 클러스터를 본격적으로 구축하고 RStudio를 연동하여 실습환경을 만든 과정들은 아래를 참고하면 좋을 것 같다.

 

www.notion.so/R-Hadoop-ea9a4cb4c9be423c853bfba12a746955

 

R/Hadoop - 라즈베리파이 하둡 클러스터 프로젝트

자동 스크립트 만들었어용 vvvvvvvvvvvvvvvvvvvvvvv

www.notion.so