목적: 분산 클러스터에서 대량의 데이터를 저장하고 관리합니다.
운영 위치: 일반적으로 여러 대의 머신으로 구성된 클러스터에서 동작합니다.
사용된 조합: Hadoop 생태계의 다양한 구성 요소에서 입력 및 출력 데이터를 저장하는 데 사용됩니다.
예제 코드:
# HDFS에 디렉터리 생성
hdfs dfs -mkdir /user/username
# 로컬 파일을 HDFS로 복사
hdfs dfs -copyFromLocal localfile.txt /user/username/hdfsfile.txt
목적: 대규모 데이터 세트의 분산 처리를 위한 프로그래밍 모델 및 처리 엔진입니다.
운영 위치: Hadoop 클러스터에서 동작하며 데이터 저장을 위해 HDFS를 활용합니다.
사용된 조합: 주로 HDFS 및 YARN과 함께 사용됩니다.
예제 코드: Java에서의 WordCount 예제입니다.
// Mapper
public class WordMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
// 구현
// Reducer
public class WordReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
// 구현
}
목적: Hadoop 위에 구축된 데이터 웨어하우징 및 SQL 유사 쿼링 인프라입니다.
운영 위치: 일반적으로 HDFS를 사용하여 Hadoop 클러스터에서 동작합니다.
사용된 조합: 주로 HDFS, MapReduce 및 YARN과 함께 사용됩니다.
예제 코드: HiveQL을 사용한 WordCount 쿼리입니다.
CREATE TABLE wordcount AS
SELECT word, COUNT(*) AS count
FROM input
GROUP BY word;
목적: MapReduce 프로그램을 작성하기 위한 고수준 스크립팅 언어입니다.
운영 위치: Hadoop 클러스터에서 동작하며 저장소로 HDFS를 활용합니다.
사용된 조합: 주로 HDFS, MapReduce 및 기타 Hadoop 구성 요소와 함께 사용됩니다.
예제 코드: Pig Latin을 사용한 WordCount 예제입니다.
input_data = LOAD 'input.txt' AS (line:chararray);
words = FOREACH input_data GENERATE FLATTEN(TOKENIZE(line)) AS word;
word_count = GROUP words BY word;
result = FOREACH word_count GENERATE group, COUNT(words);
STORE result INTO 'output';
목적: 대규모 데이터 세트에 대한 실시간 읽기/쓰기 액세스를 위해 설계된 분산, 확장 가능하고 NoSQL 데이터베이스입니다.
운영 위치: 일반적으로 Hadoop 클러스터에서 동작합니다.
사용된 조합: HDFS 및 기타 Hadoop 구성 요소와 함께 사용됩니다.
예제 코드: Java API를 사용한 HBase에서의 CRUD 작업입니다.
목적: 빠르고 범용적인 클러스터 컴퓨팅 시스템으로, 인메모리 처리를 지원합니다. 분산 데이터 처리 및 머신러닝을 위한 고수준 API를 제공합니다.
운영 위치: Hadoop 클러스터 또는 스탠드얼론 모드에서 HDFS 또는 다른 데이터 소스를 활용합니다.
사용된 조합: HDFS, MapReduce, YARN 및 기타 Hadoop 구성 요소와 함께 사용될 수 있습니다.
예제 코드: Scala를 사용한 Spark에서의 WordCount 예제입니다.
val textFile = sc.textFile("hdfs://...")
val wordCounts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
- **목적:** 분산 시스템을 관리하고 동기화하기 위한 분산 조정 서비스입니다.
- **운영 위치:** 일반적으로 Hadoop 클러스터에서 동작합니다.
- **사용된 조합:** Hadoop에서 분산 작업 및 구성을 조정하는 데 사용됩니다.
- **목적:** Hadoop과 관계형 데이터베이스 사이에서 대량 데이터를 효율적으로 전송하기 위한 도구입니다.
- **운영 위치:** 일반적으로 Hadoop 클러스터에서 동작합니다.
- **사용된 조합:** Hadoop과 관계형 데이터베이스 간의 데이터 가져오기 및 내보내기에 사용됩니다.
Spark이 하는 일:
Apache Spark은 고성능 및 범용적인 클러스터 컴퓨팅 프레임워크로 대규모 데이터 처리를 위한 오픈 소스 분산 컴퓨팅 시스템입니다. Spark은 배치 처리, 대화형 쿼리, 스트리밍 및 머신러닝을 포함한 다양한 워크로드를 지원하도록 설계되었습니다. Spark의 주요 기능은 다음과 같습니다:
인메모리 처리: Spark은 중간 데이터를 메모리에 유지하여 디스크로의 쓰기 필요성을 줄이고 처리 속도를 크게 향상시킵니다.
사용 편의성: Spark은 Java, Scala, Python 및 R에서 높은 수준의 API를 제공하여 다양한 개발자에게 접근성을 제공합니다.
통합된 프레임워크: Spark은 MapReduce를 사용한 배치 처리, Spark SQL을 사용한 SQL과 유사한 쿼리, Spark Shell을 사용한 대화형 쿼리, Spark Streaming을 사용한 스트리밍 분석, 그리고 MLlib를 사용한 머신러닝을 포함한 다양한 데이터 처리 작업을 위한 통합 플랫폼을 제공합니다.
고장 허용성: Spark은 라인지 정보를 통해 고장 허용성을 달성합니다. 만약 RDD의 파티션이 손실되면 해당 라인지 정보를 사용하여 다시 계산할 수 있습니다.
호환성: Spark은 Apache Mesos, Hadoop YARN 및 자체 내장된 스탠드얼론 관리자와 같은 다양한 클러스터 관리자에서 실행될 수 있습니다.
Spark이 작동하는 곳:
Spark은 다양한 환경 및 데이터 저장 시스템에서 작동할 수 있습니다. 몇 가지 일반적인 사용 사례 및 환경은 다음과 같습니다:
하둡 분산 파일 시스템 (HDFS): Spark은 HDFS에서 데이터를 읽고 쓸 수 있어 Hadoop 클러스터와 호환됩니다.
클라우드 플랫폼: Spark은 AWS, Azure 및 Google Cloud와 같은 클라우드 플랫폼과 통합됩니다. 이를 통해 사용자는 클라우드 리소스의 확장성과 유연성을 활용할 수 있습니다.
로컬 머신: 개발자는 로컬 머신에서 테스트 및 개발 목적으로 Spark을 스탠드얼론 모드로 실행할 수 있습니다.
데이터 레이크: Spark은 데이터 레이크에서 데이터를 처리할 수 있으며, 데이터 레이크는 원시 데이터의 대형 저장소입니다.
Spark에서의 작업 순서:
Spark 응용 프로그램을 제출하면 다음과 같은 일반적인 작업 순서가 따릅니다:
드라이버 프로그램 초기화:
SparkContext 연결:
작업 실행:
실행자 실행:
결과 수집:
collect 또는 count 등), 드라이버 프로그램은 실행자 프로세스에서 결과를 수집하고 사용자에게 반환하거나 외부 저장소에 기록합니다.작업 완료:
# spark는 병렬 처리로 작업하기에 yarn에게 요청한다.
pyspark --master yarn --num-executors 3