-
마음을 가다듬기 위해 오랜만에 플랫폼 특징이나 구경하자.
빅데이터 처리/저장 자바 기반 오픈 소스 프레임 워크 현재 hadoop 3까지 나와있음 버전별 특징은 https://118k.tistory.com/542
1.Map-Reduce
- Map: key,value의 형태로 데이터를 담아두는 자료구조중의 하나
- Reduce: Map 결과 데이터를 사용하여 필요한 연산을 수행하여 데이터를 합치는 방법 key를 기준으로 value를 sum,average등의 결과를 얻을 수 있음
- 맵리듀스 프로그램의 하나의 작업 단위를 job이라고 함.
2.HDFS(Hadoop File System)
- 데이터를 다수의 노드에 복제하여 저장해서 : 데이터 유실 방지
- 한번 저장한 데이터는 수정할 수 없고 읽기만 가능하여 : 데이터 무결성 유지 *Hadoop 2.0은 append 가능
- 파일 이동,삭제, 복사 할 수 있는 인터페이스 제공
구성
- 네임 노드(master) :
- Job Tracker가 존재 : 전체 job의 스케쥴링을 관리하고 모니터링을 수행 (꼭 네임노드에 있진 않음)
- 파일 시스템의 메타데이터 관리
- 네임노드 관리 ex) 주기적으로 네임노드에게 하트비트를 전송
- 클라이언트 요청 접수
- 데이터 노드(slave) :
- Task Tracker가 존재 : 사용자가 설정한 맵리듀스 프로그램을 실행, jpb tracker의 작업 요청을 받고 요청 개수만큼 map과 reduce task를 생성 및 실행
- Client가 HDFS에 저장하는 파일을 local Disk에 유지
- 하트비트를 통해 정상 작동여부 확인
- 보조네임노드(Secondary Name Node)
- 서버 리부팅씨 데이터 손실을 방지하기 위해 editslog,fsimage라는 파일을 생성하는데,editslog는 변경이력을 저장하고 fsimage는 메모리에 저장된 메타 데이터의 파일 시스템 이미지를 저장한다. 근데 당연히 editslog가 커지면 fsimage 만드는데 시간 소요가 클 것이다. 이걸 해결하려고 보조네임노드는 fsimage를 갱신해주는 도우미 역할을 한다.
3. Yarn(Yet Another Resource Negotiator)
- Resource Managemnet를 위한 것으로 각 어플리케이션(Hbase,Storm...등)에 필요한 리소스를 할당 및 모니터링 해준다. Hadoop 2.0에 등장함
- 하둡1.0에서 JobTracker와 TaskTrakcer의 기능을 분할한건데
- JobTrakcer가 하던걸 Resource Manager(클러스터의 전반적인 자원관리와 스케쥴러,Application Master실행), Application Master(노드 메니저들의 자원상태를 관리하고 부족한 리소스 할당) 의 두가지 프로세스로
- TaskTracker가 하던걸 NodeManager(리소스 사용량 모니터링하고 Resource manager에게 정보를 알림)
=> Job tracker가 맵리듀스 실행 요청을 받고 스케쥴리 리소스관리까지 다하다 보니까 많은 메모리를 유지해야한다. 가 문제점이여서 해결하려 한것.
=> yarn때문에 map-reduce말고 다른 spark과 같은 분산 처리 모델도 수행이 가능해졌음
장점
단점
- 오픈소스이고, 저렴한 구축 비용과 비용대비 빠른 데이터 처리
- 시스템을 중단치 않고 장비를 추가할 수 있음
- 오프라인 배치 프로세싱에 최적화
- 실시간 데이터 처리에 부적합
- 설정이 어려움
빅데이터 분산처리시스템 오픈소스 메모리 하둡이라고도 불리며 빠른 성능을 위해 인 메모리 캐싱과 최적화 된 실행을 제공함 또한 spark streaming,sparkML,spark graphX등 다양한 tool을 지원
하둡은 데이터를 매번 disk에서 가져오는데에 비해 메모리에 데이터를 유지해서 속도를 개선시켰다.(인-메모리일땐 하둡보다 무려 100배나 빠름)
RDD(Resilient Distributed Datasets)라고 불리는 immutable JVM 객체들의 집합.
- job들이 매우 빠르게 연산을 수행할 수 있도록 해주며 메모리상에서 캐시되고 저장되고 계산되어짐.
-새로운 RDD를 리턴하는 트랜스포메이션과 연산 하고 값을 리턴하는 action의 두가지 종류의 연산이 있음
Spark driver(master)에서 Executor(slave)에게 일을 나누어줌
- Driver Program은 SparkContext를 생성
- 중간에 Cluster Manager는 Mesos,Yarn과 같은 클러스터 매니저 또는 그냥 spark에서 사용하는 manager일 수 있음
- Driver는 Cluster Manager를 통해서 사용할 수 있는 Executor를 알아내고 그 executor(프로세스)에게 작업을 전송
- Cluster Manager : 자원관리
- Worker Node에서는 Executor가 Task를 수행함
- 작업 결과는 Driver에게 돌려줌
- 각 executor 안에는 Block Manager라는 서비스가 존재하며 사용자 프로그램에서 캐시하는 RDD를 저장하기 위한 메모리 저장소를 제공함
*여기서 driver라는 뜻은 프로그램의 main() 메서드가 실행되는 process를 의미해서 SparkContext를 생성하고 RDD를 만들고 트랜스포메이션, 액션을 실행하는 사용자 코드를 실행하는 하나의 프로세스임
1. 사용자 프로그램을 Task로 변환해줌
2. Executor에서 Task들의 스케쥴링을 함
실행 순서
1. 사용자는 spark-submit으로 어플리케이션을 제출
2. spark-submit은 Driver를 생성하고 main()메서드 호출
3. Driver는 Cluster 매니저한테 Executor 실행을 위해 요청
4. Cluster Manager가 Executor 실행시켜줌
5. Driver가 RDD연산을 보고 job->task단위로 나누고 executor에게 나눔을 함
6. executor는 받은 일을 다하고 결과를 driver한테 줌
장점
단점
- 인-메모리 처리로 인한 hadoop에 비해 월등해진 속도
- 사용자 편의를 위한 다양한 API 제공
- 다양한 언어 사용 가능
- 대화형 콘솔 spark-shell을 지원
- 다양한 유형의 Cluster Manager 사용 가능
- 일괄처리, 온라인 분석 처리에 유용
- 데이터 셋이 작으면 오히려 분산 작업으로 하면 성능이 떨어질 수 있음
- 대량의 트랜잭션을 빠르게 처리하는 어플리케이션에 적합하지 않음
(염두해두고 설계하지 않았다함)
Spark Stack
Spark Core
- 스파크 job과 다른 spark component(spark sql,spark streaming등)에 필요한 기본 기능을 제공
- RDD로 다양한 연산 및 변환 메서드 제공
- 다양한 파일 시스템에 접근 가능
- 공유 변수, 누적변수를 사용해 컴퓨팅 노드간 정보 공유
- 네트워킹, 보안, 스케쥴링등의 기본 기능 제공
Spark Streming
- 실시간 스트리밍 데이터를 처리하는 프레임 워크
- 이상 스트림(Discretized STream,Dstream)방식으로 스트리밍 데이터를 표현하여 가장 마지막 타임 윈도우 안에 유입된 데이터를 RDD로 구성해 주기적으로 재생성
Spark MLlib
- 머신 런닝 알고리즘 라이브러리
- RDD 또는 DataFrame을 가지고 머신 런닝 모델을 구현 할 수 있음
GraphX
- 스파크의 서브 모듈로써 대용량 데이터의 분산 및 병렬 그래프 처리 기능을 지원
Cluster Manager
리소스를 관리하고 할당 및 제거하는 역할을 함
- 타입은 세가지다
1. StandAlone : 가장 단순
2. Apache Mesos : Hadoop의 MapReduce와 서비스 응용프로그램을 실행할 수 있는 일반적인 클러스터 관리자
3. YARN : 하둡2.0의 리소스 매니저
Spout와 Bolt의 연결을 이용한 실시간 Streaming 처리 엔진.데이터는 key,value형태로 tuple형태로 입력된다.
-Spout은 Storm의 데이타를 읽어들이는 데이터 소스 이며 Bolt에게 데이터를 전달한다
-Bolt는 데이터를 받아서 처리한다.
spot과 bolt는 여러개가 존재할 수 있다.
Topology
토폴로지는 spout과 bolt간의 연결 관계를 정의해서 데이터의 흐름을 정의하는 것을 이야기한다(어디로 들어와서 어디로 나갈지를)
Storm의 Cluster
1. Nimbus : 마스터 노드로 주요 설정 정보를 가지고 있으며 프로그래밍 된 토폴로지를 Supervisor 노드로 배포한다(하나만 있음)
2. Supervisor : 워커 노드로 작업을 실제로 실행한다.
3. Zookeeper : 여러개의 Supervisor를 관리하기 위해 Zookeeper를 가지고 각 노드의 상태를 모니터링하고 작업의 상태들을 공유한다.
장점
단점
- 실시간 처리에 적합
- 마이크로 배치 처리도 지원함
- 스트림 처리의 스타일을 사용자가 지정할 수 있음
- 다양한 언어 지원
- 실행중인 토폴로지를 업데이트 하려면 현재 토폴로지를 종료하고 다시 제출해야 함
'2019년' 카테고리의 다른 글
spark-submit 자바 에러 (0) 2019.03.13 google cloud platform 을 이용하여 분산 학습및 예측을 해보자 (0) 2019.02.22 Google Cloud Platform 을 이용해 분산 텐서플로우를 사용해보자 (0) 2019.02.22 tensorflow를 spark과 함께 돌려보자(yahoo의 tensorflowonSpark) (0) 2019.02.22 pyspark 에러 (0) 2019.02.22