AWS Service Articles
Just for awareness:
EMR
아마존 EMR이란?
Amazon Elastic MapReduce (EMR)는 아마존 웹 서비스(AWS)에서 제공하는 클라우드 기반 빅 데이터 플랫폼입니다. EMR은 Apache Hadoop과 Apache Spark 같은 인기 있는 프레임워크를 사용하여 대규모 데이터 처리, 분석, 변환, 인덱싱, 그리고 다양한 빅 데이터 작업을 쉽게 수행하도록 도와줍니다. 이는 AWS 클라우드 상에서 확장 가능한 가상 클러스터를 제공함으로써 이루어집니다.
아마존 EMR의 주요 특징 및 이점
- 확장성: EMR은 수천 개의 서버를 간단하게 추가하거나 제거할 수 있도록 해서, 데이터와 작업량에 따라 클러스터의 크기를 동적으로 조정할 수 있습니다.
- 비용 효율성: EMR은 대량의 데이터 처리를 위한 아마존 EC2 인스턴스 타입 중에서 가격과 성능이 최적화된 것을 선택할 수 있습니다. 또한, 사용하지 않는 리소스에 대한 비용을 줄이기 위해 On-Demand와 Spot 인스턴스를 혼합하여 사용할 수 있습니다.
- 보안: EMR은 AWS의 보안 모델을 따르며, 사용자의 데이터와 시스템을 보호하기 위한 다양한 보안 기능을 제공합니다. 이에는 AWS Identity and Access Management (IAM), Security Groups, 그리고 EC2 Key Pairs가 포함됩니다.
- 편의성: EMR은 AWS 관리 콘솔, AWS CLI, 그리고 SDK를 사용하여 클러스터를 쉽게 생성, 모니터링, 그리고 조정할 수 있습니다.
아마존 EMR의 베스트 프랙티스
- 하드웨어와 운영체제 선택: EMR 클러스터의 성능을 최적화하기 위해서는 작업에 가장 적합한 하드웨어와 운영 체제를 선택하는 것이 중요합니다. 이는 작업의 규모, 복잡성, 그리고 요구 사항에 따라 다를 수 있습니다.
- 데이터 저장 및 처리: S3, HDFS, 그리고 로컬 파일 시스템 등 다양한 데이터 저장 옵션을 비교하여 자신의 작업에 가장 적합한 것을 선택하시기 바랍니다. 각각의 저장 옵션은 성능, 내구성, 그리고 비용 면에서 장단점이 있습니다.
- 리소스 관리: YARN(Resource Negotiator)을 사용하여 클러스터 리소스를 관리하고, 각 작업에 필요한 리소스를 최적화하시기 바랍니다.
- 비용 관리: Spot 인스턴스를 사용하여 비용을 절약하거나, 예약 인스턴스를 사용하여 장기적인 비용을 절감할 수 있습니다.
아마존 EMR 자주 묻는 질문
- 데이터는 어디에 저장되는가?: EMR 클러스터에서 처리한 데이터는 S3에 저장할 수 있습니다. HDFS나 EMR File System(EMRFS)을 사용하는 경우에는 각 노드에 분산 저장됩니다.
- HDFS vs EMRFS
- EMR은 어떤 빅 데이터 도구를 지원하는가?: EMR은 Hadoop, Spark, HBase, Presto, Flink 등 다양한 오픈 소스 빅 데이터 도구를 지원합니다.
- EMR 클러스터를 어떻게 모니터링 하는가?: Amazon CloudWatch를 사용하여 EMR 클러스터를 모니터링 할 수 있습니다.
DynamoDB
Amazon DynamoDB란?
Amazon DynamoDB는 AWS에서 제공하는 완전 관리형 NoSQL 데이터베이스 서비스로, 일관되고 신속한 성능을 제공하며, 웹 스케일 애플리케이션을 지원하기 위해 어떤 크기의 데이터셋이든 자동 확장을 수행합니다. DynamoDB는 키-값과 문서 데이터 모델을 모두 지원하며, 읽기와 쓰기 성능을 위해 SSD를 사용하여 데이터를 자동으로 분산 저장합니다.
Amazon DynamoDB의 주요 특징
- 확장성: DynamoDB는 사용자가 처리량을 설정하면 자동으로 데이터를 여러 서버에 분산시킴으로써 이를 지원합니다.
- 성능: DynamoDB는 신속하고 일관된 성능을 제공하며, 대부분의 요청이 싱글 디지트 밀리초 내에 완료됩니다.
- 내구성과 가용성: DynamoDB는 내구성과 가용성을 위해 데이터를 여러 서버와 여러 위치에 자동으로 복제합니다.
- 보안: DynamoDB는 AWS Identity and Access Management (IAM)과 함께 사용되어 자원에 대한 액세스를 세밀하게 제어할 수 있습니다. 또한, 데이터는 전송 중 및 저장 시 모두 SSL/TLS를 통해 암호화됩니다.
NoSQL 설계 원칙
NoSQL 데이터베이스의 설계는 전통적인 관계형 데이터베이스의 설계와 다른 접근 방식을 필요로 합니다. 이에 대한 몇 가지 주요 원칙은 다음과 같습니다:
- 대용량 읽기 및 쓰기 용량: DynamoDB는 사용자가 선언한 읽기 및 쓰기 용량을 지원하며, 필요에 따라 이를 늘리거나 줄일 수 있습니다.
- 처리량 최적화를 위한 데이터 모델링: 데이터 접근 패턴에 따라 테이블을 설계하고, 효과적인 쿼리 작업을 위해 적절한 기본 키와 보조 키를 선택하는 것이 중요합니다.
- 조인 작업 최소화: DynamoDB는 데이터베이스 서버에서 조인 작업을 수행하지 않습니다. 따라서 애플리케이션 레벨에서 조인을 수행하거나, 가능하면 단일 테이블 내에서 필요한 모든 데이터를 가져올 수 있도록 데이터를 모델링하는 것이 좋습니다.
- 인덱싱 전략: DynamoDB는 기본 키 외에도 보조 인덱스를 제공하여 더 유연한 쿼리를 가능하게 합니다. 이를 통해 효율적인 데이터 검색이 가능해집니다.
- 기본키 형식은 두가지 키를 복합적으로 사용하는 방식쓰는데 설명하자면,
- Hash 형식 기본키 : Attribute 하나를 기본 키로 사용. 키본 키의 값은 스칼라 데이터 형식만 가능. 다중값 형식은 지원하지 않습니다.
- Hash와 Range 형식 기본키 : Attribute 2개를 기본키로 사용(복합키), 첫 Attribute은 해시 기본키로 사용, 두번째 Attribute는 범위 기본 키로 사용합니다.
- DynamoDB는 기본키로 생성하는 테이블 인덱스 이외에도, 보조 인덱스인 Secondary Index를 생성할 수 있습니다.
- 기본 키로 생성한 인덱스 하나만으로는 검색기능이 부족합니다.
- 보조 인덱스는 사용이 빈번하기 때문에 성능을 위해서 사용하고 Read/Write 용량 유닛을 따로 설정이 가능합니다.
- 보조 인덱스는 두가지로 나뉩니다.
- 로컬 보조 인덱스(Local Secondary Index) 해시 키는 테이블 인덱스의 해시 키본 키와 같고, 범위 키는 목적에 따라 다르게 설정 가능합니다. 로컬 보조 인덱스는 테이블당 5개까지 생성이 가능하고, 테이블을 생성할 때 함께 생성해야 하며, 테이블이 생성된 이후에는 추가, 수정, 삭제가 되지 않습니다. 로컬 보조 인덱스는 테이블에서 해시 기본 키와 범위 기본키를 사용할 때만 사용할 수 있습니다.
- 글로벌 보조 인덱스(Global Secondary Index) 해시 키와 범위 키 모두 테이블 인덱스와 다르게 설정한 것. 범위키는 생략 가능하다. 테이블당 5개까지 생성이 가능합니다. 글로벌 보조 인덱스는 테이블 생성시 함께 생성해야하고 테이블이 생성된 이후는 추가, 수정, 삭제가 가능합니다.
- 두가지 보조 인덱스 키의 차이점은 해시키와 범위키와 상관없이 인덱스 기능을 하기 위해 검색을 사용하는데,
- 검색 기능을 하나의 테이블에서 로컬하게 해시키를 기본키를 두고 인덱싱을 할 것인가?
- 아니면 모든 테이블에 완전 따로 해시 키, 범위 키와 다르게 설정해서 사용하는 것인 가에 차이입니다.
해시 기본키는 일치(Equal)방식의 검색만 지원합니다.
범위 기본키는 일치. 부등호, 포함, ~로 시작하는 범위를 지정할 수 있는 검색을 지원합니다.
Secondary Index를 적용하면, 그 형태에 맞는 Primary Key의 새로운 테이블(replicated)이 내부적으로 생겼다고 보면 된다.
대신 우리가 직접 테이블을 만들고 관리해 줄 필요없이, 사용자가 데이터를 더하거나 빼거나 수정했을 때,
그게 내부적으로 Secondary Index 적용에 의해 만들어진 테이블에 같이 적용되는 것이다
Athena
Amazon Athena란?
Amazon Athena는 서버리스 쿼리 서비스로서, Amazon S3에 저장된 데이터를 쉽게 분석할 수 있게 해줍니다. Athena는 복잡한 인프라 구성 및 관리 없이, 표준 SQL을 사용해 대용량 데이터를 신속하게 분석하며, 사용한 만큼만 비용을 지불하는 구조입니다.
Amazon Athena의 주요 특징
- 서버리스: 인프라를 설정, 관리 또는 튜닝할 필요가 없습니다. 쿼리 시작은 즉시 가능하며, 데이터에 대한 복잡한 ETL 작업을 수행할 필요가 없습니다.
- 빠르고 간편하게 분석: Athena는 표준 SQL을 사용하므로 기존 SQL 지식을 활용해 쉽게 데이터를 분석할 수 있습니다. 또한, Athena는 대용량 데이터를 빠르게 처리할 수 있습니다.
- 통합된 보안: Athena는 AWS Glue Data Catalog에 저장된 데이터 및 메타데이터에 대해 AWS Identity and Access Management (IAM)을 통한 권한 관리를 지원합니다.
Athena 성능 튜닝 팁
- 데이터 형식 선택: Parquet, ORC 같은 열 기반 형식을 사용하면 스캔해야 하는 데이터 양이 줄어들어 쿼리 성능이 향상됩니다.
- 분할 사용: 데이터를 여러 파트로 분할하면 쿼리 성능이 향상될 수 있습니다. 이는 각 쿼리가 처리해야 할 데이터 양을 줄여주기 때문입니다.
- 압축 사용: S3에서 데이터를 스캔하는 시간을 줄이기 위해 압축을 사용하면 좋습니다.
- WHERE 절 최적화: WHERE 절에 최적화된 조건을 사용하면 쿼리 성능을 향상시킬 수 있습니다.
- 결과 캐싱 사용: 자주 실행하는 쿼리의 경우, 결과를 캐시하면 향후 동일한 쿼리를 실행할 때 더 빠른 결과를 얻을 수 있습니다.
Hadoop Ecosystem
important:
Hadoop
Yarn
분산컴퓨팅 특징
소개
분산 컴퓨팅은 대규모 데이터 처리와 병렬 컴퓨팅에 매우 효율적인 기술로, 여러 컴퓨터들이 네트워크로 연결되어 작업을 분산하고 병렬로 처리함으로써 고성능 컴퓨팅을 가능하게 합니다. 이 글에서는 분산 컴퓨팅의 개념, 특징, 장점 및 실제 활용 사례에 대해 자세히 알아보도록 하겠습니다.
1. 분산 컴퓨팅의 개념
분산 컴퓨팅은 여러 대의 컴퓨터(노드)들이 네트워크로 연결되어 분산 시스템을 형성하며, 이들이 서로 협력하여 대규모 데이터 처리와 병렬 컴퓨팅을 수행하는 기술입니다. 각 노드는 독립적으로 작동하며, 특정 작업을 분할하여 각 노드가 병렬로 처리함으로써 전체적인 성능과 처리 속도를 향상시킵니다.
2. 분산 컴퓨팅의 특징
- 동시에 여러 작업을 수행합니다: 이 특징은 맞는 설명입니다. 분산 컴퓨팅은 여러 작업이나 하위 작업들을 나누어서 각각 다른 노드(컴퓨터)에서 동시에 처리함으로써 효율적인 병렬 처리와 빠른 전체 실행 속도를 가능하게 합니다.
- 여러 대의 컴퓨터가 함께 작업하여 공동의 목표를 달성합니다: 이 특징도 맞는 설명입니다. 분산 컴퓨팅은 서로 연결된 컴퓨터(노드)들이 협력하여 특정 계산 작업이나 문제를 해결하는 데 기여합니다.
- 서로 다른 프로세서 간에 메모리를 공유합니다: 이 설명은 틀린 것입니다. 분산 컴퓨팅은 각 노드(컴퓨터)가 독립적으로 동작하며, 서로 다른 노드들은 자신들만의 로컬 메모리를 가지고 있습니다. 따라서 메모리 공유는 이루어지지 않습니다.
- 대용량 데이터셋을 관리 가능한 크기로 분할합니다: 대규모 데이터 처리를 위해서는 한 번에 모든 데이터를 한 곳에서 처리하는 것이 현실적으로 어려울 수 있습니다. 따라서 분산 컴퓨팅에서는 대용량 데이터셋을 작은 크기의 데이터 청크(chunk)로 분할하여 처리합니다. 이렇게 분할된 데이터 청크는 서로 다른 노드들에게 분산되어 동시에 병렬적으로 처리됩니다. 이러한 방식으로 대용량 데이터를 관리 가능한 크기로 분할하면 각 노드는 자신이 처리하는 데이터 청크만 다루므로 처리 성능이 향상되며, 시스템의 확장성도 향상됩니다.
3. 분산 컴퓨팅의 장점
- 대규모 데이터 처리: 분산 컴퓨팅은 대용량 데이터셋을 효율적으로 처리하여 빠른 속도로 결과를 얻을 수 있습니다.
- 병렬 처리: 여러 노드가 동시에 작업을 처리하므로 작업 시간을 단축하고 효율적인 병렬 컴퓨팅이 가능합니다.
- 확장성: 노드의 추가나 제거로 클러스터의 크기를 쉽게 조정할 수 있어 확장성이 뛰어납니다.
4. 분산 컴퓨팅의 실제 활용 사례
- 빅데이터 분석: 대규모의 빅데이터 처리에 사용되어 데이터의 의미 있는 정보를 추출하고 분석합니다.
- 클라우드 컴퓨팅: 클라우드 서비스에서는 분산 컴퓨팅을 통해 다양한 사용자에게 동시에 컴퓨팅 리소스를 제공합니다.
- 그리드 컴퓨팅: 대학, 연구소 등에서 분산된 자원을 공유하여 고성능 컴퓨팅 작업을 처리합니다.
5. 마무리
분산 컴퓨팅은 대규모 데이터 처리와 고성능 컴퓨팅에 필수적인 기술로서, 데이터의 증가와 처리 속도의 중요성이 커짐에 따라 더욱 중요해지고 있습니다. 이를 효과적으로 활용하려면 클러스터의 관리와 작업 스케줄링 등 다양한 측면에서 최적화가 필요하며, 계속해서 발전하고 있는 분야이므로 학습과 연구가 더욱 중요하다는 점을 강조하며 글을 마치도록 하겠습니다.
참고:
HBase: 분산형 NoSQL 데이터베이스
소개:
HBase는 Apache Hadoop 기반의 분산형 NoSQL 데이터베이스로서, 대용량의 구조화되지 않은 데이터를 저장하고 처리하는데 사용됩니다. HBase는 고성능과 확장성을 제공하여 대규모의 데이터 처리를 위한 이상적인 솔루션입니다. 이 글에서는 HBase의 기본 개념, 특징, 아키텍처, 사용 사례 등에 대해 자세히 알아보도록 하겠습니다.
1. HBase의 개념
HBase는 Google의 Bigtable 논문에서 영감을 받아 개발된 분산형 NoSQL 데이터베이스로서, 열 지향 데이터 모델을 사용합니다. HBase는 Hadoop 기반의 HDFS(Hadoop Distributed File System)를 기반으로 작동하며, 데이터를 여러 리전으로 나누어 저장합니다.
2. HBase의 특징
- 분산형 아키텍처: HBase는 여러 대의 노드에 데이터를 분산하여 저장하고 처리함으로써 빠른 성능과 확장성을 제공합니다.
- 높은 읽기/쓰기 성능: HBase는 고성능의 데이터베이스로서 읽기와 쓰기 작업 모두에 뛰어난 성능을 제공합니다.
- 스키마 유연성: HBase는 스키마
가 없는 테이블을 사용하여 데이터를 저장하므로 데이터의 구조를 유연하게 변경할 수 있습니다.
3. HBase의 아키텍처
HBase는 클라이언트, 리전서버, 마스터 서버로 구성됩니다. 클라이언트는 HBase에 데이터를 읽고 쓰는 작업을 수행하며, 리전서버는 데이터를 실제로 저장하고 처리합니다. 마스터 서버는 리전서버들을 관리하고 클라이언트 요청을 리전서버로 전달하는 역할을 합니다.
Hotspotting
스팟팅은 특정 리전에 대량의 쓰기 작업이 집중되어 해당 리전이 과부하가 걸리는 현상을 의미합니다. 이는 성능 저하와 장애로 이어질 수 있으므로 핫스팟팅을 식별하고 해결하는 것이 중요합니다.
- Identify the region sizes, add salting, and hash to row key if they are not uniform: 리전의 크기를 확인하고, 데이터의 분포가 균등하지 않은 경우, row key에 Salting 또는 해싱을 추가하여 데이터를 여러 리전으로 분산시킵니다. 이렇게 함으로써 데이터의 균등한 분산을 촉진하고 hotspotting을 최소화할 수 있습니다.
- Identify the table size and distribution on datanodes for uniform distribution: 테이블의 크기와 데이터노드에 데이터의 분포를 확인하여 데이터를 균등하게 분산시킵니다. 데이터노드에 데이터가 고르게 분포되도록 리밸런싱(rebalancing) 작업을 수행하여 hotspotting을 완화할 수 있습니다.
- Identify the number of regions and increase them accordingly: 리전의 개수를 확인하고 필요에 따라 리전의 개수를 늘립니다. 리전의 개수를 증가시킴으로써 데이터를 더 작은 단위로 분산시키고, 특정 리전에 대한 부하를 분산시켜 hotspotting을 완화할 수 있습니다.
- Identify the hfiles and move them manually from one region server to another: 이 방법은 일반적으로 권장되지 않습니다. HBase는 자체적으로 데이터를 균등하게 분산시키기 위해 리전서버 간에 데이터를 이동시키는 리밸런싱 기능을 제공합니다. 수동으로 hfile을 이동시키는 것은 데이터의 불일치나 다른 문제를 일으킬 수 있으며, HBase 시스템의 안정성에 영향을 미칠 수 있습니다.
4. HBase의 사용 사례
- 빅데이터 처리: 대규모의 구조화되지 않은 데이터를 빠르게 읽고 쓸 수 있는 HBase는 빅데이터 처리에 매우 유용합니다.
- 실시간 분석: HBase는 읽기 작업에서 빠른 성능을 제공하여 실시간으로 데이터를 분석하는데 적합합니다.
- 로그 데이터 관리: 대규모의 로그 데이터를 저장하고 조회하는데 효과적으로 사용될 수 있습니다.
5. 마무리
HBase는 대용량 데이터 처리와 실시간 분석에 적합한 분산형 NoSQL 데이터베이스로서, Hadoop 기반의 클러스터와 연동하여 뛰어난 성능과 확장성을 제공합니다. 다양한 분야에서 많이 활용되고 있는 HBase는 빅데이터 시대에 필수적인 기술로 자리잡고 있으며, 계속해서 발전해나가는 중요한 데이터베이스 기술 중 하나입니다.
참고:
- HBase in Action (책)
ZooKeeper: 분산 코디네이션 서비스
소개:
ZooKeeper는 Apache 프로젝트로 개발된 분산 코디네이션 서비스로, 분산 시스템에서의 데이터 및 메타데이터의 작은 조각들을 저장하고 관리하는 데 사용됩니다. 분산 환경에서 데이터의 동기화와 정확한 순서를 보장하는데 중요한 역할을 수행하여, 여러 대의 서버가 협력하여 일관성과 신뢰성 있는 분산 시스템을 구축하는 데 도움을 줍니다. 이 글에서는 ZooKeeper의 개념, 기능, 특징, 사용 사례 등에 대해 자세히 알아보도록 하겠습니다.
1. ZooKeeper의 개념
ZooKeeper는 분산 코디네이션 서비스로서, 작은 크기의 데이터 노드인 znode들을 사용하여 데이터의 일관성과 정확한 순서를 관리합니다. ZooKeeper는 분산 환경에서 발생할 수 있는 여러 문제들을 해결하기 위해 설계되었습니다. 주로 분산 시스템에서 리더 선출, 서비스 디스커버리, 구성 관리 등 다양한 용도로 활용됩니다.
2. ZooKeeper의 기능
- 데이터 관리: ZooKeeper는 계층적인 네임스페이스를 제공하며, 작은 데이터 조각인 znode를 사용하여 데이터를 저장하고 관리합니다.
- 동기화와 순서 보장: ZooKeeper는 분산 시스템의 서버들 간의 동기화를 담당하여 정확한 순서와 데이터의 일관성을 보장합니다.
- 이벤트 처리: 클라이언트는 ZooKeeper의 상태 변화에 대한 이벤트를 구독하여 필요한 작업을 수행할 수 있습니다.
3. ZooKeeper의 특징
- 가벼운 구조: ZooKeeper는 작은 규모의 데이터를 다루는 데 최적화되어 있으며, 빠른 응답 시간과 간단한 구조를 가지고 있습니다.
- 높은 가용성: ZooKeeper는 여러 대의 서버로 구성되어 있으며, 장애 발생 시 다른 서버로 서비스를 이전하여 높은 가용성을 제공합니다.
- 데이터의 일관성: ZooKeeper는 분산 환경에서 데이터의 일관성과 정확한 순서를 보장하여 신뢰성 있는 서비스를 제공합니다.
4. ZooKeeper의 사용 사례
- 리더 선출: 분산 시스템에서 리더 선출을 위해 ZooKeeper를 사용할 수 있습니다. 여러 서버 중에서 한 대를 리더로 선출하여 작업을 조율할 수 있습니다.
- 서비스 디스커버리: ZooKeeper를 사용하여 서비스의 등록과 해제를 관리하여 다른 서비스들이 서로를 찾을 수 있도록 합니다.
- 구성 관리: ZooKeeper를 사용하여 분산 시스템의 구성 정보를 저장하고 관리하여 서버들의 동적인 구성 변경을 지원합니다.
5. 마무리
ZooKeeper는 분산 코디네이션 서비스로서, 분산 시스템에서 데이터의 일관성과 순서를 보장하여 높은 가용성과 신뢰성 있는 서비스를 제공합니다. 리더 선출, 서비스 디스커버리, 구성 관리 등 다양한 사용 사례에서 활용되며, 복잡한 분산 시스템 구축을 위한 필수적인 기술 중 하나입니다.
참고:
Impala vs Presto vs Spark vs Athena
최근 몇 년 동안, 데이터 분석과 처리를 위한 수많은 쿼리 엔진들이 등장했습니다. 이들 중에서도 Impala, Presto, 그리고 Spark는 각각 독특한 특징들과 기능들을 가지고 있어 데이터 처리를 위한 많은 선택지 중 하나가 되고 있습니다.
쿼리 엔진 | 아키텍처 설명 | 특징 | 장점 | 단점 |
Impala | Impala는 Apache 프로젝트의 일부로, Hadoop에서 실시간 대규모 데이터 분석을 위한 MPP(Massive Parallel Processing) SQL 쿼리 엔진입니다. | 실시간 쿼리를 실행할 수 있으며, Hadoop의 HDFS, Apache HBase, Amazon S3와 같은 스토리지와 호환됩니다. | - 빠른 인터랙티브 쿼리
- Hadoop과 호환성
- SQL 인터페이스를 제공 | - 데이터 복제가 필요한 장애 복구
- 복잡한 쿼리에 대한 최적화가 부족함 |
Presto | Presto는 페이스북에서 개발한 분산 SQL 쿼리 엔진으로, 빅 데이터 플랫폼에서 대화식 쿼리를 가능하게 합니다. | 다양한 데이터 소스(SQL 및 NoSQL)에 대한 쿼리를 지원하며, 분산 처리 아키텍처를 사용하여 빠른 쿼리 실행을 제공합니다. | - 다양한 데이터 소스 지원
- 빠른 대화식 쿼리
- ANSI SQL 지원 | - 메모리 중심의 처리로 인한 대규모 쿼리에 제한 |
Spark | Spark는 일괄 처리 및 스트리밍 데이터 처리에 사용되는 메모리 기반 분산 컴퓨팅 시스템입니다. Spark SQL은 이를 활용한 SQL과 HiveQL 처리 엔진입니다. | 데이터 처리의 다양한 용도를 위한 모듈 제공(ML, Graph 처리 등), 메모리 중심의 처리로 빠른 속도를 보장합니다. | - 빠른 처리 속도
- 다양한 데이터 처리 기능 제공
- 머신러닝과 그래프 처리 지원 | - 메모리 중심의 처리로 인한 대규모 쿼리에 제한 |
Athena | Amazon Athena는 서버리스 쿼리 서비스로 AWS S3에 저장된 데이터를 직접 분석할 수 있습니다. | SQL 기반의 분석을 제공하며, 서버리스 아키텍처로 인한 관리의 편리성을 보장합니다. | - 서버리스로 별도의 인프라 관리 필요 없음
- AWS S3와의 높은 호환성
- 사용한 만큼만 비용 발생 | - AWS에 종속적임
- 복잡한 쿼리의 경우 비용이 상당히 높아질 수 있음 |
Impala
Impala는 Cloudera에서 개발한 오픈 소스 SQL 쿼리 엔진으로, Hadoop 기반의 데이터 웨어하우스에서 대규모 데이터를 실시간으로 쿼리하는 데 초점을 맞추고 있습니다. Impala는 MPP (Massive Parallel Processing) 아키텍처를 사용하고, SQL 디아렉트를 사용하여 대부분의 SQL 문법을 지원합니다. Hadoop의 HDFS, Apache HBase, Amazon S3와 같은 스토리지와 호환됩니다.
Impala의 중요한 특징 중 하나는, 메모리 제한을 초과하는 쿼리에 대해 디스크를 사용하여 중간 결과를 스왑(swap)하는 스폴(Spill) 기능입니다. 이 기능 덕분에, 메모리 제한을 초과하는 큰 쿼리도 성공적으로 처리할 수 있습니다. 그러나 이 과정은 메모리 내에서 모든 것을 처리하는 것보다 상대적으로 느릴 수 있습니다.
Presto
Presto는 페이스북에서 개발한 분산 SQL 쿼리 엔진으로, SQL과 NoSQL을 포함한 다양한 데이터 소스에 대한 쿼리를 지원합니다. 데이터 소스는 MySQL, PostgreSQL, Cassandra, MongoDB, Hadoop/HDFS 등이 포함됩니다.
Presto 역시 MPP 아키텍처를 사용하며, ANSI SQL을 지원하여 표준화된 쿼리 작성이 가능합니다. 그러나 Presto는 메모리 중심의 처리를 사용하며, 이로 인해 대용량 쿼리에 대해 일부 제한을 가질 수 있습니다.
Spark
Spark는 빅데이터 처리를 위한 통합된 분석 엔진으로, 메모리와 디스크를 모두 활용하는 능력을 가지고 있습니다. Spark는 중간 처리 결과가 메모리 용량을 초과할 때 디스크 스왑을 통해 데이터를 저장하고 처리합니다.
또한 Spark는 'Resilient Distributed Datasets' (RDDs)라는 추상화를 통해 메모리 내에서 처리를 최적화하며, 'Lazy Evaluation' 방식을 사용하여 실제 필요한 데이터만 처리하고, 필요하지 않은 데이터는 처리하지 않아 자원을 효율적으로 사용합니다.
결론
최종적으로 어떤 쿼리 엔진을 선택할 것인지는 여러가지 요인에 따라 결정됩니다: 데이터 소스, 쿼리 유형, SQL 지원, 그리고 기존의 인프라와의 호환성 등이 중요한 요인이 될 수 있습니다. 각각의 쿼리 엔진은 독특한 장점과 단점을 가지고 있으며, 그에 따라 사용자의 특정 요구사항과 작업에 더 적합하게 적용될 수 있습니다.