빅데이터 처리, 분석을 위한 하둡(hadoop) 기본개념

업데이트:

하둡(hadoop) 기본개념

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고사항
스쿱(sqoop)에 대해 알아보자
엘라스틱서치에 대해 알아보자
하둡 홈페이지

하둡(hadoop)은 대용량 데이터를 분산처리 해주는 아파치 톱 레벨 오픈소스 프로젝트이며, 자바로 작성된 프레임워크입니다. 빅데이터 시스템에서 가장 중요한 부분은 데이터 수집인데요. 수집 용도로 많이 쓰이는 오픈소스는 Flume, Chukwa 등. 메세징 기반으로 구성된 Kafka를 사용하기도 함. 하둡은 대용량 데이터의 배치 프로세싱에 적합. 만약 데이터의 실시간 액세스를 원한다면 하둡은 적합하지 않음.

하둡의 구성

  • 하둡의 구성
    1. HDFS(Hadoop Distributed File System)이라는 분산 파일 시스템
    2. MapReduce 라고 부르는 분산 처리 시스템

참고: 파일시스템

하둡의 분산파일시스템인 HDFS와 분산 처리 시스템인 MapReduce는 물리적으로 같은 서버들에 공존하는 것이 일반적임. 두 시스템 모두 하나의 마스터와 다중 슬레이브 구조를 갖는데, 다중 슬레이브의 경우 각 서버마다 HDFS 슬레이브와 MapReduce 슬레이브가 같이 놓인다는 것이다. 처리된 데이터를 기존 관계형 데이터베이스(MySQL, 오라클 등)에 넣어주길 원한다면 Sqoop을 이용.

데이터가 있는 곳으로 코드를 이동

대부분의 경우 테이터의 크기가 소스코드보다 훨씬 크기 때문에 코드가 있는 곳으로 데이터를 복사해오는 것보다 데이터가 있는 곳으로 코드를 복사해가는 것이 효율적이다. 따라서 처리하고자 하는 데이터를 갖고 있는 서버를 골라 그 서버에 코드를 보내고 코드를 실행한다.

병렬처리를 위한 데이터 모델

  • 데이터 = 레코드의 집합
  • 각 레코드는 키, 값(value)를 가짐.

HDFS, MapReduce 모두 마스터/슬레이브 구조.

구분 HDFS MapReduce
마스터 네임노드 잡트래커
슬레이브 데이터노드 태스크트래커

HDFS 자체는 독립적으로 분산 파일 시스템으로 쓰일 수 있찌만, MapReduce 프레임워크의 경우 처리할 입력 데이터를 HDFS에서 읽어들이고, 처리된 데이터를 다시 HDFS에 씀. 즉 MapReduce는 데이터의 읽기, 쓰기를 위해 HDFS를 필요로 함.

하나의 HDFS에는 하나의 네임 스페이스 제공. 즉, 모든 사용자가 하나의 동일 루트에서 시작하는 파일 시스템이라는 뜻. 파일 시스템이라는 용어를 사용해서 뭔가 새로운 파일 시스템이라고 생각할 수 있지만, 그건 아님. 기존 운영체제의 파일 시스템을 그대로 사용함. 즉, 데이터 노드를 설치하기 위해 따로 파일 시스템을 설치할 필요는 없고, 특정 디렉터리를 데이터노드가 블록을 저장할 장소로 정하기만 하면 데이터노드는 그 디렉토리를 자기 블록 데이터들을 저장하는데 사용함.

하둡은 오프라인 배치 처리에 적합한 프레임워크이므로 실시간 처리에는 적합하지 않음.

하둡을 사용하면 하드웨어 고장에 대해서도 유연하게 대처가능하다. 그 이유는 데이터블록을 보통 3군데에 저장하며 저장시 같은 랙(Rack)에 있는 서버를 두 개에 저장하고 다른 하나는 다른 랙에 있는 서버에 저장하는 방식을 택하기 때문이다. 3군데는 복제본 개수(Replication Factor)라고 하며 이는 설정에서 바꿀 수 있다. 만약 네임노드(마스터)가 특정 데이터노드의 문제 발생을 알아채면 바로 해당 데이터노드에 있는 데이터 블록들을 다른 데이터노드로 복제함. 즉, 언제나 정해진 복제본 개수를 준수한다.

  • 랙(Rack 혹은 캐비넷): 데이터 센터 내에서 여러 장비들을 적재하기 위한 표준 프레임을 말한다. 폭은 19 또는 23인치 높이(U)는 42 또는 44U이며 1U = 1.75인치(4.45cm)에 해당한다. 보통 랙에는 서버들이 놓이지만 맨 윗단이나 중간에 랙 내의 서버들을 연결하기 위한 네트워크 스위치를 넣는다.

HDFS 환경설정

  • conf 디렉토리 하위의 hdfs-site.xml 파일에서 HDFS 환경설정 가능.
  • HDFS 파일 블록 크기 설정: dfs.block.size
  • HDFS 복제본 갯수 설정: dfs.replication

1. 맵리듀스(MapReduce)

데이터를 처리하는데 있어 맵과 리듀스라는 두개의 작업을 사용함. 맵, 리듀스를 사용해서 한 데이터를 다른 데이터셋으로 변환하게 되는데 이를 레코드 레벨에서 생각하면 한 레코드에서 다른 레코드로 변환한다는 것이고, 이 의미는 최종적으로 한 형태의 키/값 쌍이 다른 형태의 키/값 쌍으로 변환 한다는 의미임.

이 처리는 레코드 별로 이루어지고 그렇기 때문에 원칙적으로 처리하는 레코드만 보고 작업하면 되므로 병렬성이 높고 따라서 다수의 서버에서 실행하기 쉽다는 장점이 있음. 개발자는 맵과 리듀스의 두 개의 함수만 구현하고 처리할 입력 데이터가 HDFS 상의 어디에 있는지와 처리된 데이터가 어디 저장될지만 지정해주면 나머지는 프레임워크가 병렬로 처리해주게 된다.

하둡 명령어 정리

//파일 내용 나타내기
$ hdfs dfs -cat FILE

//파일과 디렉터리에 대한 그룹 변경
$ hdfs dfs -chgrp GROUP PATH 

//파일과 디렉터리 권한 변경 
$ hdfs dfs -chmod MODE PATH

//파일과 디렉터리 소유자 변경
$ hdfs dfs -chown PATH 

//로컬 파일시스템으로 부터 파일 복사
$ hdfs dfs -copyFromLocal LOCALSRC DST 

//파일들을 로컬 파일 시스템으로 복사
$ hdfs dfs -copyToLocal SRC LOCALDST

//LOCALSRC를 HDFS에 복사후 해당파일은 삭제됨.
$ hdfs dfs -moveFromLocal LOCALSRC DST 

//PATH에 있는 모든 파일과 디렉토리에 대한 이름, 사용된 바이트 수, 파일 개수, 하위 디렉터리 갯수 출력
$ hdfs dfs -count PATH 

//SRC로부터 DST로 파일 복사
$ hdfs dfs -cp SRC DST 

//파일 크기 출력
$ hdfs dfs -du PATH 

//휴지통 비우기 
$ hdfs dfs -expunge 

//리눅스의 ls와 동일
$ hdfs dfs -ls PATH 

//디렉터리 생성. 리눅스의 mkdir과 동일
$ hdfs dfs -mkdir PATH 

//파일 통계 정보
$ hdfs dfs -stat PATH