당신은 주제를 찾고 있습니까 “하둡 스파크 – 빅데이터 아키텍처에서 하둡 플랫폼과 카프카의 역할|HDFS, SPARK, KAFKA“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 데브원영 DVWY 이(가) 작성한 기사에는 조회수 2,872회 및 좋아요 101개 개의 좋아요가 있습니다.
1. 스파크의 속도는 맵리듀스(하둡)의 속도보다 월등히 빠르다. 2. 하지만, 일반적인 데이터 운영 및 리포팅 상황에서 대부분은 정적인 성향을 띄고, 배치 모드의 프로세싱을 기다릴 수 있다면, 굳이 스파크를 쓰지 않고 맵리듀스 프로세싱 방식을 선택해도 무방하다.
하둡 스파크 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 빅데이터 아키텍처에서 하둡 플랫폼과 카프카의 역할|HDFS, SPARK, KAFKA – 하둡 스파크 주제에 대한 세부정보를 참조하세요
빅데이터 아키텍처에서 하둡 플랫폼을 빠트릴 수 없는데요. 하둡 플랫폼으로 사용되는 HDFS, spark를 살펴보고 카프카는 어떤 용도로 사용되는지 알아보겠습니다.
하둡 스파크 주제에 대한 자세한 내용은 여기를 참조하세요.
하둡(hadoop)과 스파크(Spark)
하둡은 대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈 소스 프레임워크입니다. 2004년에 구글에서 MapReduce가 발표되고, 여기에 GFS(Google …
Source: velog.io
Date Published: 11/12/2021
View: 8205
하둡과 아파치 스파크, 무엇이 어떻게 다른가? 5가지 궁금증
일반적인 상황에서 스파크의 속도는 맵리듀스와 비교해 월등히 뛰어나다. 데이터 프로세싱 방법에 따른 차이다. 단계별 데이터 처리 방식을 취하는 맵리 …
Source: www.ciokorea.com
Date Published: 7/13/2022
View: 6745
하둡과 맵리듀스 스파크의 관계 – Deep Play
하둡과 맵리듀스 스파크의 관계 하둡 (Hadoop) https://www.ibmbigdatahub.com/blog/what-hadoop “하둡은 간단한 프로그래밍 인터페이스를 통해 …
Source: 3months.tistory.com
Date Published: 9/29/2022
View: 2223
Apache Spark #1 – 아키텍쳐 및 기본 개념 – 조대협
Apache Spark의 개념 이해 · #1 기본 동작 원리 및 아키텍처 · 아파치 스파크는 빅데이터 분석 프레임웍으로, 하둡의 단점을 보완하기 위해서 탄생하였다.
Source: bcho.tistory.com
Date Published: 11/26/2021
View: 3812
“하둡을 제압한 빅데이터 플랫폼” 아파치 스파크란 무엇인가
아파치 스파크(Apache Spark)는 매우 큰 데이터 집합을 대상으로 빠르게 처리 작업을 수행하는 한편, 단독으로 또는 다른 분산 컴퓨팅 툴과 조율해 …
Source: www.itworld.co.kr
Date Published: 8/30/2021
View: 683
스파크(Spark) 시작하기 – GRITMIND 자연어처리 블로그
분산 컴퓨팅을 위해서 기본적으로 분산 파일 저장소와 분산 데이터 처리를 독립적으로 구분해서 관리한다. 하둡 1.0은 HDFS와 MapReduce만을 가지고, 하둡 …
Source: gritmind.blog
Date Published: 12/2/2022
View: 9045
[Spark] Apache Spark(아파치 스파크)란? – 개발자 김모씨
“빅데이터 처리 = 하둡(Hadoop)”이라고 할 정도로, 하둡 에코시스템이 시장을 지배하였다. 하둡은 HDFS(Hadoop Distributed File System)라고 불리는, …
Source: artist-developer.tistory.com
Date Published: 12/8/2022
View: 7277
주제와 관련된 이미지 하둡 스파크
주제와 관련된 더 많은 사진을 참조하십시오 빅데이터 아키텍처에서 하둡 플랫폼과 카프카의 역할|HDFS, SPARK, KAFKA. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 하둡 스파크
- Author: 데브원영 DVWY
- Views: 조회수 2,872회
- Likes: 좋아요 101개
- Date Published: 2022. 2. 27.
- Video Url link: https://www.youtube.com/watch?v=tzsPfkub5XY
DataEngineer :: 하둡(Hadoop)과 아파치 스파크(Spark)
728×90
하둡(Hadoop)
1.
대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈소스 프레임워크
2.
Job을 작은 단위로 분할하고, 이를 클러스터의 모든 노드로 매핑한다.(map)
각 노드는 job을 처리한 중간 결과를 생성한다.
분산 저장 기술인 HDFS와, 분산 처리 기술인 맵리듀스(MapReduce)를 장점으로 꼽는다.
3. 맵리듀스의 워크플로우
클러스터에서 데이터 읽기 -> 동작 실행 -> 클러스터에 결과 기록 -> 업데이트 된 데이터 내용 읽기 -> 다음 동작 실행 -> 클러스터에 결과 기록
아파치 스파크(Aparch Spark)
1.
빅데이터 워크로드에 주로 사용되는 분산처리 시스템
2.
빠른 성능을 위해 인 메모리 캐싱과 최적화 된 실행을 사용하고 일반 배치처리, 스트리밍 분석, 머신러닝, 그래프 데이터 베이스 및 임시 쿼리를 지원한다.
3.
기존의 하둡을 통해 끌어오는 데이터들은 시간 소요가 크기 때문에, 실시간으로 분석해야 하는 업무에서는 어려운 부분이 있어 새롭게 개발된 것이다.
4. 스파크의 워크플로우
클러스터에서 데이터 읽기 -> 분석 수행 및 결과값 클러스터 입력 동작 등 전 과정이 동시에 진행
하둡과 스파크의 역할
하둡(Hadoop) 스파크(Spark) 공통점 빅데이터 처리 플랫폼, 프레임워크 차이점 분산 데이터 인프라 스트럭처로서, 대량의 데이터를 서버 클러스터 내 복수의 노드들에 분산시키는 역할을 함 하둡과 같은 분산형 데이터 컬렉션 상부에서 동작하는 데이터 프로세싱 툴이며, 분산형 스토리지로서의 역할은 수행하지 않음
1.
스파크의 속도는 맵리듀스(하둡)의 속도보다 월등히 빠르다.
2.
하지만, 일반적인 데이터 운영 및 리포팅 상황에서 대부분은 정적인 성향을 띄고, 배치 모드의 프로세싱을 기다릴 수 있다면, 굳이 스파크를 쓰지 않고 맵리듀스 프로세싱 방식을 선택해도 무방하다.
3.
스파크의 힘이 발휘되는 상황으로는, 공장과 같이 센서에서 실시간으로 수집되는 스트리밍 데이터를 처리하거나, 머신러닝 알고리즘 등 복합적인 운영이 필요로 할 경우이다.
4.
하둡의 경우, 프로세싱 절차마다의 기록을 디스크에 기록하여 failover하는 방식이다.
5.
스파크의 경우, 탄력적 분산형 데이터넷(RDD)을 활용하여, 메모리 내 또는 디스크에 저장할 수 있으며 사고나 고장이 발생하더라도 완벽하게 복구할 수 있는 탄력성을 보장한다.
728×90
하둡과 맵리듀스 스파크의 관계
하둡과 맵리듀스 스파크의 관계
하둡 (Hadoop)
https://www.ibmbigdatahub.com/blog/what-hadoop
“하둡은 간단한 프로그래밍 인터페이스를 통해 클러스터 환경에서 대용량 데이터에 대한 분산 처리를 하는 소프트웨어 라이브러리다.”
하둡의 정식명칭은 아파치 하둡 (Apache Hadoop) 이며 scalable, distributed computing 을 위한 소프트웨어 플랫폼입니다. 하둡은 오픈 소스 프로젝트이고 아파치 재단에 의해 관리됩니다. 하둡은 “데이터를 읽고 처리하는 속도가 데이터의 양을 따라잡지 못한다” 라는 문제에서 출발했습니다. 하드디스크 입출력 속도는 보통 100MB/s 정도입니다. 하지만 기업환경에서 마주하는 데이터는 최소 기가바이트 (GB) 에서 테라바이트(TB), 페타바이트 (PB) 까지 이르는 경우가 많습니다. 하둡의 필요성을 생각해보기 위해 예를 들어 설명해보겠습니다. 아래의 상황에서 하둡이 유용할 수 있습니다.
1) 하드 디스크는 1TB짜리 인데, 3TB 데이터를 저장하고 싶을 때
2) 100 개의 파일에 대해 똑같은 작업을 해서 결과를 합치는 분산 컴퓨팅을 하고자 할 때
3) TB 단위 이상의 데이터를 빠르게 Disk I/O (로드 또는 저장) 하고 싶을 때
하둡의 두 가지 키워드는 scalable과 distributed computing 입니다. scalable 은 확장 가능하다는 뜻으로 자원을 추가하더라도 코드의 수정 등을 할 필요 없이 동일한 방법으로 프로세싱을 할 수 있다는 의미입니다. distributed computing 은 분산 컴퓨팅을 의미하여 Job 을 적절한 크기로 쪼갠 후, 분산된 자원원을 통해 계산하고 결과를 합치는 작업을 말합니다.
맵 리듀스 (Map-Reduce)
A BIG DATA PROCESSING FRAMEWORK BASED ON MAPREDUCE WITH APPLICATION TO INTERNET OF THINGS (2016)
“맵 리듀스는 아파치 하둡 프로젝트의 서브 프로젝트로, 분산 컴퓨팅을 위한 프레임워크다. ”
하둡의 맵리듀스는 distributed computing 을 위한 프레임워크입니다. 맵리듀스는 하둡의 서브 프로젝트라고 볼 수 있습니다. 맵리듀스는 Job 의 스케쥴링, 모니터링, 에러 핸들링 등을 수행합니다. 맵 리듀스는 인풋 데이터를 독립적인 청크로 나누고 이를 병렬적으로 처리합니다. 맵리듀스는 하둡 파일 시스템 HDFS (Hadoop Distributed File System) 으로부터 데이터를 불러오고 저장할 수 있습니다. 맵 리듀스의 이해를 위해 다음과 같은 예를 들어봅시다.
ex) 100개의 문서가 있고, 그 문서에서 단어의 빈도수 예를 들면, ‘dog’, ‘cat’, ‘bird’, ‘fish’, … 의 수를 세서 결과를 보여주는 프로그램을 작성하라. 100개 이상의 컴퓨터를 보유하고 있다. 문서의 크기가 다 다르고 메모리 문제로 한 컴퓨터에서는 평균 1개의 문서만 로드할 수 있다.
간단하게 생각해보면 100개의 컴퓨터에 각각 1개의 문서를 할당해 단어 빈도수를 세고, 이를 합치면 되겠죠. 이것도 분산 컴퓨팅의 일종입니다. 하지만 이것은 그렇게 간단한 문제는 아닙니다. 예를 들어, 실행 도중 몇몇 컴퓨터에서 갑자기 오류가 날 수 있습니다. 또 각각의 컴퓨터에서 계산한 단어 빈도수를 한 컴퓨터에서 합산해서 보여주고자 할 때, 컴퓨팅 자원의 문제로 합산이 불가능할 수 있습니다. 또한 각 문서의 크기가 달라 한 컴퓨터당 하나의 문서를 할당하는 것이 비효율적일 수도 있습니다. 즉, 다양한 상황을 고려한 하나의 분산 컴퓨팅 프레임워크가 필요합니다.
https://stackoverflow.com/questions/47531863/why-key-is-not-unique-in-mapreduce-function
맵 리듀스는 ‘분산 컴퓨팅을 실제로 어떻게 할 것인가?’ 에 대한 잘 알려진 답변입니다. 맵 리듀스는 크게 맵과 리듀스로 나뉩니다. 맵에서 인풋데이터는 “키-값 쌍” 으로 변화되고, 스플릿 단위로로 나뉘어서 각 노드에 할당됩니다. 맵은 리듀스를 위한 키-값쌍을 만들어냅니다. 이 때, 키-값쌍은 사용자에 의해 정의될 수 있습니다. 리듀스 태크스는 맵의 아웃풋 키-값 쌍을 인풋으로 받아 최종 결과를 출력합니다. 예를 들어, 위 문제에서 인풋 데이터를 (문장의 오프셋, 문장 텍스트) 의 키-값 쌍으로 정의해볼 수 있습니다. 이렇게 인풋 데이터를 키-값 쌍으로 나누고 노드에 할당하는 것을 Splitting 이라고 합니다. Splitting 에서 인풋데이터는 입력 스플릿 (input split) 또는 단순히 스플릿이라고 부르는 고정된 크기의 조각으로 분리합니다. 문서 단위로 노드에 할당하는 것보다 스플릿 단위로 할당하는 것이 더욱 빠릅니다. 또한 한 컴퓨터에서 불가능했던 일을 가능하게 할 수 있습니다.
스파크 (Spark)
https://dzone.com/articles/apache-spark-fast-big-data
“스파크는 하둡 위에서 동작할 수 있는 인메모리 프로세싱 엔진이다.”
위 맵 리듀스 절차는 통해 분산 컴퓨팅을 어떻게하는지 감을 잡으셨을 거라고 생각합니다. 하지만 실제로 이를 코드로 구현하는 것은 복잡합니다. 하둡 라이브러리의 객체를 상속 받아 메소드 오버라이딩을 하고 최종적으로 구현된 클래스를 모아 jar 형태로 만들어 배치형태로 하둡에 제출해야합니다. 즉, 하둡의 맵-리듀스는 ad-hoc 데이터 분석에 적합하지 않습니다. 따라서 맵-리듀스를 보다 유저 친화적으로 할 수 있는 다양한 방법이 제시되었습니다. 그 중 하나가 스파크입니다.
스파크의 기본적인 특성
스파크는 분산 인메모리 프로세싱 엔진 입니다. 스파크는 반드시 하둡과 같이 사용될 필요는 없습니다. 하지만 스파크는 하둡을 지원합니다. 예를 들면 스파크는 하둡이 사용하는 파일 시스템인 HDFS (Hadoop Distributed File System) 의 데이터를 읽어올 수도 있고, 반대로 데이터를 쓸 수도 있습니다.
스파크는 HDFS 에 저장된 데이터를 하둡 코어 라이브러리를 호출 함으로써 메모리로 불러온 후, 변환 및 계산 등을 거쳐 최종 원하는 결과물을 산출 합니다. 스파크는 인메모리 프로세싱을 하기 때문에 Disk I/O 가 많이 일어나는 하둡의 맵-리듀스보다 특정 작업 (ex. multi-pass map reduce)에서는 더 빠르게 수행될 수 있습니다.
스파크는 여러가지의 분산 데이터베이스나 파일 시스템을 수용할 수 있습니다. 하둡 뿐만 아니라 카산드라 를 사용을 할 수도 있습니다. 카산드라는 CQL (Cassandra Query Language) 이라는 고유의 SQL 문법이 있는데, 이는 SQL 의 서브셋으로 다양한 데이터 추출을 이용하기가 힘들다고 알려져 있습니다. 카산드라에 스파크를 결합해 추가적인 데이터 프로세싱을 사용할 수 있기 때문에 카산드라 자체만을 통해 못하는 일을 할 수 있습니다.
스파크의 한 가지 장점은 stream processing 이라고 하는 실시간 데이터처리 입니다. 스파크는 실시간 데이터 처리를 위해 세팅이 될 수 있고, micro-batches 단위로 데이터 프로세싱을 수행할 수 있으며, 결과를 하둡 HDFS, 카산드라 같은 파일 시스템에 저장 할 수 있습니다.
스파크의 아키텍쳐
https://towardsdatascience.com/getting-started-with-apache-spark-ad9d59e71f6f
스파크의 주요 개념은 Resilient Distributed Datasets (RDD) 와 directed acyclic graph (DAG) execution engine 입니다. RDD 는 스파크에서 사용되는 데이터셋으로 각 단어는 다음과 같은 뜻이 있습니다.
Resilient: 분산되어 있는 데이터에 에러가 생겨도 복구할 수 있는 능력
Distributed: 클러스터의 여러 노드에 데이터를 분산에서 저장
Dataset: 분산된 데이터의 모음
스파크에서 RDD 에 대해 수행할 수 있는 연산은 크게 1) transfomation 2) action 으로 나눌 수 있습니다. transformation 은 인풋데이터로부터 새로운 데이터셋을 만들어내는 것이고 (ex. map, filter), action 데이터셋으로부터 계산 (ex. reduce or count)을 하는 것입니다. 스파크에서는 DAG engine 을 통해 맵리듀스의 느린 부분 (multi-pass map reduce, multi-stage execution model)을 제거해 상당한 성능 향상도 가능합니다.
RDD 를 통한 분석 워크 플로우는 다음과 같이 요약해볼 수 있습니다.
https://www.edureka.co/blog/spark-architecture/#Overview
Reference
Apache Spark #1
Apache Spark의 개념 이해
#1 기본 동작 원리 및 아키텍처
조대협 (http://bcho.tistory.com)
아파치 스파크는 빅데이터 분석 프레임웍으로, 하둡의 단점을 보완하기 위해서 탄생하였다. 하둡을 대체하기 보다는 하둡 생태계를 보완하는 기술로 보면 되는데 실제로 기동할때 하둡의 기능들을 사용하게 된다.
하둡이 맵리듀스 방식으로 디스크(HDFS)에 저장된 파일 데이터를 기반으로 배치 분석을 진행한다면, 스파크는 디스크나 기타 다른 저장소(데이터 베이스등)에 저장된 데이터를 메모리로 올려서 분석하는 방식으로 배치 분석 뿐만 아니라, 스트리밍 데이터 양쪽 분석을 모두 지원한다.
기본 동작 원리 및 아키텍쳐
기본적인 동작 원리를 살펴 보면 다음과 같다.
스파크 클러스터의 구조는 크게 Master node 와 worker 노드로 구성된다. Master node는 전체 클러스터를 관리하고 분석 프로그램을 수행하는 역할을 한다. (사용자가 만든 분석 프로그램을 Driver Program 이라고 한다.) 이 분석 프로그램을 스파크 클러스터에 실행하게 되면 하나의 JOB이 생성된다. J
이렇게 생성된 JOB이 외부 저장소 (HDFS와 같은 파일 시스템이나 외부 데이터 베이스)로 부터 데이터를 로딩하는 경우, 이 데이터는 스파크 클러스터 Worker node로 로딩이 되는데, 로딩된 데이터는 여러 서버의 메모리에 분산되어 로딩이 된다. 이렇게 스파크 메모리에 저장된 데이터 객체를 RDD라고 한다.
이렇게 로딩된 데이터는 애플리케이션 로직에 의해서 처리되는데, 하나의 JOB이 여러 worker node에 분산된 데이터를 이용해서 분산되어 실행되기 때문에, 하나의 JOB은 여러개의 Task로 분리되어 실행이 된다. 이렇게 나눠진 Task를 실행하는 것을 Executor 라고 한다.
클러스터 매니저(Cluster Manager)
스파크는 데이터를 분산 처리하기 위해서 하나의 클러스터 내에 여러대의 머신, 즉 워커(Worker)들로 구성된다. 하나의 JOB이 여러대의 워커에 분산되서 처리되기 위해서는 하나의 JOB을 여러개의 TASK로 나눈 후에, 적절하게 이 TASK들을 여러 서버에 분산해서 배치 해야 한다. 또한 클러스터내의 워크 들도 관리를 해줘야 하는데, 이렇게 클러스터내의 워커 리소스를 관리하고 TASK를 배치 하는 역할을 하는 것이 클러스터 매니저이다.
워크들을 관리할 수 있는 클러스터 매니저는 일종의 스파크 런타임이라고 생각하면 되는데, 아래 그림과 같이 Standalone , Yarn, SIMR 등의 타입이 있다.
Standalone은 하나의 머신 내에서 스파크를 운영하는 방식으로 로컬 개발 환경등에 적합한다. 다른 방식으로는 하둡 2.X의 리소스 매니저인 YARN을 사용하여, YARN으로 하여금 클러스터내에 TASK를 배치하도록 하는 방법이 있고, 하둡 1.X 이하를 사용할 경우 하둡의 맵리듀스안에 맵 작업으로 스파크 TASK를 맵핑하는 Spark In MR (SIMR)방식이 있다.
하둡 에코 시스템 외에도 다른 클러스터 매니저를 사용할 수 있는데, 대표적으로 Apache Mesos나, Kubernetes등을 클러스터 매니저로 사용이 가능하다.
스토리지
스파크는 메모리 베이스로 데이터를 처리하지만 외부 스토리지는 포함하고 있지 않기 때문에 별도의 외부 스토리지를 사용해야 한다. 가장 대표적으로 사용되는것이 하둡의 HDFS 분산 파일 시스템이고, 클라우드의 경우 AWS S3나 Google Cloud의 Google Cloud Storage(GCS)등을 사용한다.
데이터 베이스로는 분산 노드에서 데이터를 동시에 읽어드려야 하기 때문에, 분산 처리를 잘 지원할 수 있는 NoSQL인 HBase등이 널리 사용된다. 그외에도 목적에 따라서 Solr, Kudu 등의 데이터 스토어를 사용한다.
파일 포맷
만약에 스파크 데이터를 파일로 저장할 경우 여러가지 파일 포맷을 사용할 수 있는데, 대표적으로 사용되는 파일 포맷들은 다음과 같다.
CSV,JSON : 우리가 일반적으로 사용하는 TEXT기반의 파일 포맷으로, 사람이 읽을 수 는 있지만 압축이 되지 않았기 때문에 용량이 크다
Parquet (Columna) : 스파크와 함께 가장 널리함께 사용되는 파일 포맷으로 바이너리 포맷을 사용한다. 특히 데이터 뿐만 아니라 컬럼명, 데이터 타입, 기본적인 통계 데이타등의 메터 데이터를 포함한다.
CSV,JSON과는 다르게 기본적인 압축 알고리즘을 사용하고 특히 snappy와 같은 압축 방식을 사용했을때, 원본 데이터 대비 최대 75% 까지 압축이 가능하다.
Parquet 포맷의 특징은 WORM (Write Once Read Many)라는 특성을 가지고 있는데, 쓰는 속도는 느리지만, 읽는 속도가 빠르다는 장점이 있다. 그리고 컬럼 베이스의 스토리지로 컬럼 단위로 저장을 하기 때문에, 전체테이블에서 특정 컬럼 만 쿼리하는데 있어서 빠른 성능을 낼 수 있다.
만약 ROW에서 전체 컬럼을 리턴해야 하는 시나리오의 경우에는 Avro가 더 유리하다.
Avro (Row) : Avro는 Paquet 과 더불어 스파크와 함께 널리 사용되는 바이너리 데이터 포맷으로 Parquet이 컬럼 베이스라면, Avro는 로우 베이스로 데이터를 저장한다. Avro는 바이너리로 데이터를 저장하고 스키마는 JSON 파일에 별도로 저장한다. 그래서 사용자가 바이너리 파일을 이해할 필요 없이 JSON 만으로도 전체적인 데이터 포맷에 대한 이해가 가능하다.
참고 문서 : https://luminousmen.com/post/big-data-file-formats#:~:text=Apache%20Spark%20supports%20many%20different,and%20Avro%20using%20Apache%20Spark.
“하둡을 제압한 빅데이터 플랫폼” 아파치 스파크란 무엇인가
Offcanvas
Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
스파크(Spark) 시작하기
최근 빅데이터 플랫폼에서 인메모리 방식의 Spark의 활용도가 점점 높아지고 있습니다. Spark은 분산 환경에서 동작하기 때문에 일반 프로그래밍과 다른 측면이 있습니다. Spark을 사용하기에 앞서 어떤 내용을 이해해야 하는지 알아봅시다.
1. Spark란?
Spark는 독립적으로 홀로 존재하지 않는다. Spark와 상호작용하는 빅데이터 기술들을 이해하기 위해 하둡 에코시스템을 먼저 살펴보자. 크게 데이터 전송, 분산 파일 시스템, 분산 데이터 처리, 운영 관리 레이어로 구분된다. 각 레이어마다 데이터 타입, 저장 방식 등에 따라 다양한 기술이 있다. 참고로 Sqoop 시작하기 글에서 HDFS를 기준으로 데이터 저장/처리 흐름을 확인할 수 있다.
분산 컴퓨팅을 위해서 기본적으로 분산 파일 저장소와 분산 데이터 처리를 독립적으로 구분해서 관리한다. 하둡 1.0은 HDFS와 MapReduce만을 가지고, 하둡 2.0은 여기에 리소스 관리자인 YARN이 추가된다. 이 세 가지가 하둡 핵심 컴포넌트이고 이를 중심으로 대용량 데이터를 효과적으로 저장 및 처리하기 위해서 여러 레이어들이 등장했다. 레이어마다 각자 고유한 특징과 역할이 있다.
Spark은 Tez, MapReduce, PIG 등 다양한 분산 데이터 처리기 중 하나일 뿐이다. 분산 데이터 처리기는 분산 파일 시스템과 항상 짝을 이뤄야 한다. HDFS는 MapReduce 또는 Spark 또는 Tez와 짝이 될 수 있고, Spark은 HDFS 또는 Cassandra와 짝이될 수 있다.
Spark의 특징은 무엇일까? Spark은 MapReduce의 단점을 개선하기 위해 등장했다. MapReduce의 단점은 데이터 처리 단계 사이의 중간 데이터가 디스크에 잔류하는 것이다. 반면, Spark은 중간 데이터를 메모리에 둘 수 있도록 하였다. 이는 데이터를 재사용할 수 있는 능력을 부여함으로써 반복형이나 대화형 테스크에 강점을 가진다. Spark의 실행 과정은 위 그림과 같다[3]. MapReduce는 위 그림에서 메모리 셀이 없다고 보면 된다.
2. 왜 Spark?
어떤 문제에 Spark을 활용하려면 왜 Spark이어야 하는지에 대한 명확한 이해가 필요하다. 항상 Spark가 베스트 솔루션은 아니기 때문이다.
2.1. Spark vs. Multiprocessing
분산 환경을 사용하는 가장 큰 이유는 유연한 ‘확장성‘에 있다(다양한 하둡 에코시스템을 통한 효율적인 빅데이터 저장/분석이 가능한 부분도 있음). 데이터가 정적으로 고정되어 있지 않고 지속적으로 증가한다고 생각해보자. 이를 대응하기 위해서 단일 서버는 내부의 하드웨어를 교체하는 등의 고비용이 요구되고, 이를 처리하기 위한 복잡한 저수준의 프로그래밍이 필요하다1. 분산 환경에서는 값싼 서버를 하나씩 늘리면 될 뿐이다.
병렬 연산을 꼭 분산 클러스터를 구성해서 해결해야 하는지를 먼저 따져봐야 한다. 단일 서버에서 많은 메모리와 멀티 코어 수와 함께 multiprocessing을 사용하면 웬만한 크기의 병렬은 해결할 수 있다. 분산 환경에서 실행 계획, 리소스 할당 등 테스크를 돌리는 과정이 있기에 단일 서버보다 성능이 저하되는 경우도 있다.
컴퓨팅 성능에서 가장 느린 부분은 디스크 입출력이다. 대용량 데이터일수록 디스크 입출력은 굉장히 느려진다. 분산 환경은 대용량 파일을 잘게 나눠서 저장하고 여러 곳에서 동시에 입출력할 수 있다. 즉 디스크 I/O를 병렬로 할 수 있는 것인데 이는 데이터가 많아질수록 유리한 구조이다.
이렇듯 문제를 잘 파악하고 단일 서버에서 multiprocessing으로 돌릴 것인지 분산 환경에서 spark으로 돌릴 것인지 결정해야 한다. 만일 데이터가 그렇게 크지 않고 고정되어 있다면 단일 서버도 고려해볼 필요가 있고, 데이터가 지금은 작더라도 확장성이 큰 경우는 Spark를 준비하는 것이 좋다.
2.2. Spark vs. MapReduce vs. Hive
어떤 분산 데이터 처리기를 사용해야 할까? 다양한 종류의 분산 데이터 처리기가 있는데 문제에 맞게 적합한 것을 선택해야 한다. 여기서는 Spark, MapReduce, Hive만 대략적으로 비교해보자. 참고로 Hive는 SQL 언어로 사용할 수 있는 쿼리 엔진이며 내부적으로는 하둡 클러스터로 돌아간다.
통계와 같은 단순한 데이터 처리 또는 데이터 조회는 Hive가 적합하다. 맵리듀스 프로그래밍 없이 SQL문으로 돌릴 수 있기 때문이다. 분산 환경에서 데이터가 parquet 포맷과 같이 읽기 불가능한 타입인데 Hive로 쉽게 볼 수 있다.
기계학습과 같은 반복적인 데이터 플로우나 대화형 작업을 위해서는 Spark이 좋다. 추상화된 API로 복잡하거나 독특한 분석을 쉽게 프로그래밍을 할 수 있다. Spark은 인메모리 연산으로 빠른 성능의 장점이 있지만, 메모리에 의존하는 만큼 리소스 할당 관련 설정을 잘하지 않으면 오류가 쉽게 발생한다.
MapReduce는 메모리를 사용하지 않기에 Spark 보다 느리지만 더 강한 Failure Tolerance를 가진다. 이에 시간은 조금 오래 걸리지만 안정적으로 수행해야 하는 테스크는 MapReduce가 더 적합하다.
3. Spark 시작하기
Spark를 시작하기 전에 숙지해야 될 사항을 알아보자.
3.1. Spark 프로그래밍 언어
스칼라 (Scala)
자바 (Java)
파이썬 (Python)
R
Spark는 스칼라로 작성되고 JVM으로 돌아가지만, 다양한 언어로 작성할 수 있다. 단, Python으로 작성할 때 주의사항이 있다. 저수준 API인 RDD로 작성하거나 사용자 정의 함수를 사용할 때 성능 저하가 발생할 수 있다. 파이썬 데이터를 JVM이 이해할 수 있도록 변환하는 과정에서 큰 비용이 발생하기 때문이다. 고수준 API와 사용자 정의 함수를 제한적으로만 활용한다면 성능면에서 큰 차이는 발생하지 않을 것이다. 이러한 파이썬의 단점이 있지만 다른 언어보다 심플하게 작성할 수 있는 장점도 있다.
3.2. Spark 프로그래밍 API
고수준 API DataFrame SQL Dataset
저수준 API RDD
Spark은 크게 고수준과 저수준 API를 제공한다. 대표적으로 전자는 Dataframe, 후자는 RDD이다. Dataframe은 API가 간결하면서 쿼리 최적화를 자동으로 해주기 때문에 보통 RDD 보다 성능이 좋다고 한다. 그렇다고 RDD를 전혀 사용하지 않는 것은 아니다. Dataframe API에서 제공하지 않는 기능들이나 공유 변수를 다뤄야 하는 기능 등 물리적 데이터 배치를 세밀하게 제어해야 하는 상황에서 RDD가 필요하다.
3.3. Spark 사용자 정의 함수
Spark의 사용자 정의 함수를 통해 자신만의 데이터 처리 함수를 정의할 수 있다. 비용이 큰 함수이기에 최대한 내장 함수를 사용하는 것이 좋다. 위에서 언급한 바와 같이 파이썬 사용자 정의 함수는 많이 사용할 경우 성능 저하의 원인이 될 수 있다는 점을 인지하자. 다음과 같이 두 가지 방식으로 사용자 함수를 정의할 수 있다.
# [방법1] import pyspark.sql.functions as F def simple_tokenizer(in_string): in_string.split() simple_tokenizer_udf = F.udf(lambda x: simple_tokenizer(x), ArrayType(StringType)) # [방법2] import pyspark.sql.functions as F @F.udf(returnType=ArrayType(StringType)) def simple_tokenizer_udf(in_string): in_string.split()
[방법2]처럼 데코레이터를 사용하면 간단하게 표현해 가독성을 키울 수 있다.3.4. 분산 데이터 저장소
온프레미스 분산 저장소 HDFS HBase …
클라우드 분산 저장소 S3 (Amazon Web Services) Blob Storage (Azure) …
Spark는 인메모리 연산을 하지만 데이터 입출력을 위한 분산 데이터 저장소가 필요하다. 입출력 뿐만 아니라 연산 중에도 분산 저장소를 활용한다. 기본적으로 HDFS를 사용하지만 S3와 같은 클라우드 분산 저장소를 사용할 수 있다. 다음과 같이 단지 경로의 prefix만 바꾸면 된다.
path = “hdfs://data/path/is/here” # HDFS path = “s3://data/path/is/here” # S3 df = spark.read.parquet(path) …
3.5. 입출력 데이터 타입
parquet
csv, json, txt, …
…
Spark에서 데이터 타입은 csv, json, txt와 같은 일반 데이터 포맷을 사용할 수 있으나, parquet과 같은 컬럼 기반 포맷이 압축률과 처리 속도가 빠르므로 더 적합하다. 단, parquet은 읽을 수 없는 포맷이므로 데이터 조회를 곧바로 할 수 없다. 이런 경우는 보통 Hive에 table로 등록하기만 하면, SQL로 조회하거나 다음과 같은 CLI 명령어로 parquet 데이터를 쉽게 확인할 수 있다.
$ hive -e “select * from my_table.my_column limit 100”
3.6. Spark Job 실행 방법
대화형 쉘(Interactive shell)
Spark-submit 콘솔 명령어
Jupyter notebook, Zeppelin notebook
Apache Livy (Restful API)
Amazon EMR 의 Step 기능
…
다양한 방식으로 Spark Job을 실행할 수 있다. 가장 기본적으로 다음과 같이 콘솔에서 spark-submit을 통해 job을 실행할 수 있다.
$ /usr/bin/spark-submit –conf … –master yarn … myspark_job.py
마스터노드나 게이트웨이 서버에서 콘솔로 ‘spark’ 혹은 ‘pyspark’을 실행하면 대화형 쉘을 통해서 job을 실행할 수 있다. 비슷하게 jupyter와 zeppelin 노트북을 통해 대화적으로 job을 실행할 수 있다. Apache Livy라는 RESTful API 서버를 통해서도 job을 실행할 수 있다. 또한, EMR의 step이라는 기능에서도 job을 실행할 수 있다.
이처럼 상황에 따라 다양한 방법으로 spark job을 실행할 수 있다. 주의할 점으로 대화형 쉘이나 노트북으로 실행할 경우 따로 spark config 설정하지 않으면 디폴트로 실행된다는 점을 인지하자.
3.7. Spark 실행 모드
로컬 (Local)
클라이언트 (Client)
클러스터 (Cluster)
Spark의 실행 모드는 크게 세 가지가 있고, spark-submit의 deploy-mode 옵션으로 지정할 수 있다. 실행 모드는 job을 실행할 때 요청한 자원의 물리적인 위치를 결정한다. 로컬 모드는 단일 머신에서만 실행되고 병렬을 위해 스레드를 활용한다. 즉 드라이버, 마스터, 익스큐터 모두 단일 JVM에서 실행된다. 로컬이 모드는 주로 테스트용으로 사용된다.
클라이언트 모드는 job이 제출되는 서버에서 드라이버 프로세스가 생성되고 이를 매개체로 Spark 어플리케이션의 진행 과정을 모니터링할 수 있다. 그러나 드라이버와 익스큐터 사이의 지연 시간이 있다. 반면, 클러스터 모드는 내부적으로 동작하며 대화형 쉘과 진행 로그를 실시간으로 볼 수 없지만 애플리케이션 마스터 프로세스가 복원될 수 있기에 탄력적이다. 보통 Spark 어플리케이션을 배포할 때는 클러스터 모드를 사용한다.
$ ./bin/spark-submit –master yarn –deploy-mode cluster myspark.py
로컬 모드에서는 실행 파일의 위치를 프로그램이 이해할 수 있으나, 클라이언트와 클러스터 모드에서는 드라이버 프로세스에서 실행되기 때문에 실행 파일의 경로가 읽히지 않는다.
3.8. Spark 클러스터 구성
온프레미스 장비 + CDH
클라우드 장비 Amazon EMR Azure HDInsight
…
Spark 클러스터를 하드웨어로 초기 세팅을 어떻게 할 수 있을까? 클라우드 서비스는 이러한 클러스터 제품 서비스를 플랫폼으로 제공하기에 몇 번의 클릭만으로 클러스터를 구성할 수 있다. 온프레미스로 구축한다고 하면 하둡부터 하나하나 설치하기보다는 Cloudera의 CDH (Cloudera Distribution Hadoop)를 통해서 구축하는 것이 훨씬 쉽다.
3.9. Spark Configuration
Spark는 인메모리 중심의 연산을 하기 때문에 올바른 Config 설정이 중요하다. (1) 디폴트로 ‘/usr/lib/spark/conf/spark-defaults.conf’에서 설정할 수 있다. (2) Spark Job마다 다르게 설정하려면 spark-submit으로 job을 날릴 때 ‘–conf’ 옵션으로 설정할 수 있고, (3) Spark 프로그램 내부에서 SparkSession의 conf.set 함수로도 설정할 수 있다. Spark Configuration의 자세한 내용은 여기를 참고하길 바란다.
# [방법1] $ vi /usr/lib/spark/conf/spark-defaults.conf # [방법2] $ ./bin/spark-submit … –num-executors 15 –executor-cores 5 –executor-memory 10G myspark.py # [방법3] # myspark.py spark.conf.set(“spark.executor.memory”, ’10g’) spark.conf.set(“spark.executor.cores”, ‘5’) …
Spark 튜닝하기 글에도 관련 내용이 있습니다.
3.10. 외부 라이브러리 사용
모든 노드에 직접 설치 (ex. pip install)
(1) (콘솔에서 spark-submit 명령어) –py-files 인자
(2) (Spark 프로그램 내에서) sc.addPyFile 함수
외부 라이브러리를 Spark에서 사용하고 싶으면 어떻게 할까? 단순한 방법은 모든 노드에 해당 라이브러리를 설치하는 것이다. 다른 방법으로는 브로드캐스트를 통해서 모든 노드가 공유하는 방법이 있는데, addPyFile 함수 또는 –py-files 인자에 py 파일이나 zip 파일을 전달하면 된다. 이렇게 세팅한 후에 Spark 프로그램 내부에서 import를 해서 사용하면 된다.
# [방법1] $ ./bin/spark-submit … –py-files nlp_lib.zip myspark.py # [방법2] # myspark.py spark = SparkSession.builder.appName(“GRIMTIND-NLP”).getOrCreate() sc = spark.sparkContext sc.addPyFile(path_hdfs_or_s3_bucket + ‘/code/nlp_lib.zip’) # 참고: 브로드캐스트 from nlp_lib.ner import extract_name name_recognizer_bd = sc.broadcast(extract_name)
(참고) 스파크 프로그램을 하나가 아닌 여러 개의 파이썬 스크립트 파일로 구성하고 싶을 때가 있다. 일반적으로 상대 경로로 import 해서 메인 스크립트(myspark.py)에서 사용할 수 있으나, 모든 노드가 사용하는 사용자 정의 함수를 사용할 때는 (1)과 (2) 방법과 함께 브로드캐스트(broadcast)를 해야 한다. 그렇지 않으면 파이썬 객체가 제대로 직렬화가 되지 않아 오류가 발생한다.
3.11. Spark와 함께 사용되는 플랫폼
Apache Airflow
Apache Livy
Kubernetes
Apache Cassandra
Hive
…
스케줄러를 위해 YARN 대신에 Kubernetes를 사용하고, 분산 파일 시스템으로 HDFS 대신에 Cassandra를 사용할 수 있다. 스파크 Job의 배포를 위해서 Airflow를 사용한다. 목적에 맞게 다양한 종류의 플랫폼을 선택할 수 있다. 하둡 에코시스템의 특징이기도 하다.
4. 마무리
Spark을 막상 시작하려고 하면 관련 프로그래밍 문법뿐만 아니라 분산 환경 인프라 등 다양한 부분을 이해해야 합니다. 이 글을 통해 Spark 프로그래밍 전에 대략적으로 고려해야되는 부분이 이정도 있다고 이해하면 좋을 것 같습니다.
(참고) Useful Links – “Apache Spark” 글에 Spark와 관련된 유용한 링크가 있습니다.
5. 각주
단순히 코어 개수와 메모리 크기를 계속 늘릴 수 있는 단일 서버가 있다고 하자. 이 경우는 하드웨어를 뜯어고칠 필요도 없고 저수준의 API 프로그래밍을 할 필요도 없다. 그러나 이러한 방식에는 문제점이 있다. 워크플로우 아키텍쳐를 따로 관리해야 된다. 모듈별 병목문제, 메모리 문제를 해결하며 최적화를 해야한다. 반면 Spark는 이러한 워크플로우를 내부적으로 알아서 최적화를 해준다.
6. 참고
[Spark] Apache Spark(아파치 스파크)란?
728×90
반응형
빅데이터 빅데이터 빅데이터….
뉴스에서고, 채용공고에서고 연일 화두에 오르는 키워드이다.
특히 이 글을 보는 당신이 컴공이라면,
마치 족쇄마냥 우리의 진로를 고민하게 만드는 단어일 것이다.
본 시리즈는 그대의 고민을 해결코자!
빅데이터하면 가장 먼저 떠오르는, 아파치 스파크에 대한 Guide를 제공할 것이다!
빅데이터 분산처리 플랫폼
아파치 스파크를 한 마디로 정의하자면,
“빅데이터 처리를 위한 오픈소스 분산 처리 플랫폼”,
또는
“빅데이터 분산 처리 엔진” 정도로 표현할 수 있다.
여기서 빅데이터란,
“기존 데이터베이스 관리도구의 능력을 넘어서는 대량 의 정형 또는 심지어 데이터베이스 형태가 아닌 비정형의 데이터 집합조차 포함한 데이터로부터 가치를 추출하고 결과를 분석하는 기술”(위키피디아 발췌)
정도로 정의할 수 있다.
다시 말하면,
기존에는 정형 데이터를 RDBMS를 사용하여
큐잉, 샤딩(Hash를 사용한 DB 분산 등의 방법으로 처리하였는데,
데이터가 급격하게 증대함에 따라 사진, 동영상 등을 포함하여
N TB/s 이상의 대용량의 다양한 데이터를 고속으로 처리해야 되는 환경에 직면하였다.
이를 효율적으로 처리하기위해 등장한 것이 “빅데이터 분산처리 플랫폼”이다.
빅데이터의 수집부터 저장, 처리, 관리까지의 항목을 아래와 같이 나열하면,
아파치 스파크는 ‘빅데이터 처리’부를 용이하게 작업하기 위한 플랫폼이라 할 수 있다.
Apache Spark(아파치 스파크)의 등장
빅데이터의 개념이 등장하였을 당시,
“빅데이터 처리 = 하둡(Hadoop)”이라고 할 정도로, 하둡 에코시스템이 시장을 지배하였다.
하둡은 HDFS(Hadoop Distributed File System)라고 불리는, 분산형 파일 시스템을 기반으로 만들어졌다.
데이터 처리 시, HDFS와 ‘맵리듀스’라고 불리는 대형 데이터셋 병렬 처리 방식에 의해 동작한다.
문제는 하둡의 HDFS가 DISK I/O를 기반으로 동작한다는 것에 있었다.
실시간성 데이터에 대한 니즈(NEEDS)가 급격하게 증가하면서, 하둡으로 처리하기에는 속도 측면에서 부적합한 시나리오들이 등장하기 시작하였다.
더 나아가, 컴퓨터 H/W들의 가격이 빠른 속도로 다운되면서,
기존에 고가로 취급되던 메모리를 고용량으로 사용할 수 있게 되었다.
이 때 등장한 것이 아파치 스파크이다.
아파치 스파크는 인메모리상에서 동작하기 때문에,
반복적인 처리가 필요한 작업에서 속도가 하둡보다 최소 1000배 이상 빠르다.
이를 통해 데이터 실시간 스트리밍 처리라는 니즈를 충족함으로써, 빅데이터 프레임워크 시장을 빠르게 잠식해가고 있다.
그러나 최근에는 이러한 경쟁 관계를 넘어서,
‘하둡 + 스파크’라는 둘의 연계가 하나의 큰 흐름으로 자리잡았다.
하둡의 YARN 위에 스파크를 얹고, 실시간성이 필요한 데이터는 스파크로 처리하는 방식으로,
대부분의 기업들과 연구단체에서 이와 같은 아키텍처를 구성하여 동작 중에 있다.
스파크의 구조
https://towardsdatascience.com/getting-started-with-apache-spark-ad9d59e71f6f
아파치 스파크는 위와 같이 다양한 컴포넌트와 라이브러리를 지원한다.
기본적으로 Scala, JAVA, Pyhon 등의 다양한 언어 기반의 고수준 API를 사용 가능하다.
더 나아가, SQL의 기능을 담당하는 Spark SQL, 실시간 데이터 처리를 지원하는 Spark Streaming, 여러 머신러닝 기법을 지원하는 MLlib 등 다양하고 넓은 범위의 라이브러리가 있으며, 지속적으로 확장되어 가고 있다.
특히 MLlib는 최근 크게 각광받고 있어, 금융권 등 국내의 데이터 실시간 분석에서 스파크 비율이 압도적으로 높은 추세이다. 물론, Tensorflow/Pytorch 등을 활용한 딥러닝 정도의 퍼포먼스는 현재 발휘하지 못하지만, 기계학습 분야에서는 충분한 퍼포먼스를 발휘하고 있다.
또한 Spark Streaming은 Kafka, Hadoop과 연계 가능한 스파크의 확장성 덕분에, 위와 같은 구조로 대부분의 기업에서 활용되고 있다.
카프카, 플럼, 키네시스, TCP 소켓 등 다양한 경로를 통해서 데이터를 입력 받고, map, reduce, window 등의 연산을 통해 데이터를 분석하여 최종적으로 파일시스템, 데이터베이스 등에 적재된다.
728×90
반응형
키워드에 대한 정보 하둡 스파크
다음은 Bing에서 하둡 스파크 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 빅데이터 아키텍처에서 하둡 플랫폼과 카프카의 역할|HDFS, SPARK, KAFKA
- 동영상
- 공유
- 카메라폰
- 동영상폰
- 무료
- 올리기
빅데이터 #아키텍처에서 #하둡 #플랫폼과 #카프카의 #역할|HDFS, #SPARK, #KAFKA
YouTube에서 하둡 스파크 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 빅데이터 아키텍처에서 하둡 플랫폼과 카프카의 역할|HDFS, SPARK, KAFKA | 하둡 스파크, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.