Spark

Cheoly·2024년 1월 15일
post-thumbnail

하둡의 전반적인 eco-system

1. 하둡 분산 파일 시스템 (HDFS):

  • 목적: 분산 클러스터에서 대량의 데이터를 저장하고 관리합니다.

  • 운영 위치: 일반적으로 여러 대의 머신으로 구성된 클러스터에서 동작합니다.

  • 사용된 조합: Hadoop 생태계의 다양한 구성 요소에서 입력 및 출력 데이터를 저장하는 데 사용됩니다.

    예제 코드:

    # HDFS에 디렉터리 생성
    hdfs dfs -mkdir /user/username
    
    # 로컬 파일을 HDFS로 복사
    hdfs dfs -copyFromLocal localfile.txt /user/username/hdfsfile.txt

2. MapReduce:

  • 목적: 대규모 데이터 세트의 분산 처리를 위한 프로그래밍 모델 및 처리 엔진입니다.

  • 운영 위치: 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> {
        // 구현
    }

3. YARN (Yet Another Resource Negotiator):

  • 목적: Hadoop 클러스터에서 리소스를 관리하고 작업을 스케줄링합니다. 동일한 클러스터에서 여러 데이터 처리 엔진이 실행되도록 합니다.
  • 운영 위치: HDFS 및 MapReduce와 함께 Hadoop 클러스터에서 동작합니다.
  • 사용된 조합: HDFS, MapReduce 및 기타 데이터 처리 엔진과 함께 사용됩니다.

4. Hadoop 공통 모듈:

  • 목적: 다른 Hadoop 모듈을 지원하는 공통 유틸리티, 라이브러리 및 API의 모음입니다.
  • 운영 위치: Hadoop 생태계 전체에서 동작합니다.
  • 사용된 조합: 다른 Hadoop 구성 요소에서 사용됩니다.

5. Apache Hive:

  • 목적: Hadoop 위에 구축된 데이터 웨어하우징 및 SQL 유사 쿼링 인프라입니다.

  • 운영 위치: 일반적으로 HDFS를 사용하여 Hadoop 클러스터에서 동작합니다.

  • 사용된 조합: 주로 HDFS, MapReduce 및 YARN과 함께 사용됩니다.

    예제 코드: HiveQL을 사용한 WordCount 쿼리입니다.

    CREATE TABLE wordcount AS
    SELECT word, COUNT(*) AS count
    FROM input
    GROUP BY word;

6. Apache Pig:

  • 목적: 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';

7. Apache HBase:

  • 목적: 대규모 데이터 세트에 대한 실시간 읽기/쓰기 액세스를 위해 설계된 분산, 확장 가능하고 NoSQL 데이터베이스입니다.

  • 운영 위치: 일반적으로 Hadoop 클러스터에서 동작합니다.

  • 사용된 조합: HDFS 및 기타 Hadoop 구성 요소와 함께 사용됩니다.

    예제 코드: Java API를 사용한 HBase에서의 CRUD 작업입니다.

8. Apache Spark:

  • 목적: 빠르고 범용적인 클러스터 컴퓨팅 시스템으로, 인메모리 처리를 지원합니다. 분산 데이터 처리 및 머신러닝을 위한 고수준 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(_ + _)

9. Apache Mahout:

  • 목적: 확장 가능하고 분산 알고리즘을 위한 Hadoop 기반의 머신러닝 라이브러리입니다.
  • 운영 위치: 일반적으로 Hadoop 클러스터에서 동작합니다.
  • 사용된 조합: HDFS 및 MapReduce와 함께 사용됩니다.

10. Apache ZooKeeper:

- **목적:** 분산 시스템을 관리하고 동기화하기 위한 분산 조정 서비스입니다.
- **운영 위치:** 일반적으로 Hadoop 클러스터에서 동작합니다.
- **사용된 조합:** Hadoop에서 분산 작업 및 구성을 조정하는 데 사용됩니다.

11. Apache Sqoop:

- **목적:** Hadoop과 관계형 데이터베이스 사이에서 대량 데이터를 효율적으로 전송하기 위한 도구입니다.
- **운영 위치:** 일반적으로 Hadoop 클러스터에서 동작합니다.
- **사용된 조합:** Hadoop과 관계형 데이터베이스 간의 데이터 가져오기 및 내보내기에 사용됩니다.


Spark 이론

Spark이 하는 일:

Apache Spark은 고성능 및 범용적인 클러스터 컴퓨팅 프레임워크로 대규모 데이터 처리를 위한 오픈 소스 분산 컴퓨팅 시스템입니다. Spark은 배치 처리, 대화형 쿼리, 스트리밍 및 머신러닝을 포함한 다양한 워크로드를 지원하도록 설계되었습니다. Spark의 주요 기능은 다음과 같습니다:

  1. 인메모리 처리: Spark은 중간 데이터를 메모리에 유지하여 디스크로의 쓰기 필요성을 줄이고 처리 속도를 크게 향상시킵니다.

  2. 사용 편의성: Spark은 Java, Scala, Python 및 R에서 높은 수준의 API를 제공하여 다양한 개발자에게 접근성을 제공합니다.

  3. 통합된 프레임워크: Spark은 MapReduce를 사용한 배치 처리, Spark SQL을 사용한 SQL과 유사한 쿼리, Spark Shell을 사용한 대화형 쿼리, Spark Streaming을 사용한 스트리밍 분석, 그리고 MLlib를 사용한 머신러닝을 포함한 다양한 데이터 처리 작업을 위한 통합 플랫폼을 제공합니다.

  4. 고장 허용성: Spark은 라인지 정보를 통해 고장 허용성을 달성합니다. 만약 RDD의 파티션이 손실되면 해당 라인지 정보를 사용하여 다시 계산할 수 있습니다.

  5. 호환성: Spark은 Apache Mesos, Hadoop YARN 및 자체 내장된 스탠드얼론 관리자와 같은 다양한 클러스터 관리자에서 실행될 수 있습니다.

Spark이 작동하는 곳:

Spark은 다양한 환경 및 데이터 저장 시스템에서 작동할 수 있습니다. 몇 가지 일반적인 사용 사례 및 환경은 다음과 같습니다:

  1. 하둡 분산 파일 시스템 (HDFS): Spark은 HDFS에서 데이터를 읽고 쓸 수 있어 Hadoop 클러스터와 호환됩니다.

  2. 클라우드 플랫폼: Spark은 AWS, Azure 및 Google Cloud와 같은 클라우드 플랫폼과 통합됩니다. 이를 통해 사용자는 클라우드 리소스의 확장성과 유연성을 활용할 수 있습니다.

  3. 로컬 머신: 개발자는 로컬 머신에서 테스트 및 개발 목적으로 Spark을 스탠드얼론 모드로 실행할 수 있습니다.

  4. 데이터 레이크: Spark은 데이터 레이크에서 데이터를 처리할 수 있으며, 데이터 레이크는 원시 데이터의 대형 저장소입니다.

Spark에서의 작업 순서:

Spark 응용 프로그램을 제출하면 다음과 같은 일반적인 작업 순서가 따릅니다:

  1. 드라이버 프로그램 초기화:

    • 드라이버 프로그램은 RDD에 대한 변환 및 액션을 정의하는 주 프로그램입니다. SparkContext를 초기화하여 Spark 기능의 진입점을 설정합니다.
  2. SparkContext 연결:

    • SparkContext는 클러스터 관리자(예: Apache Mesos, Hadoop YARN 또는 Spark의 스탠드얼론 관리자)에 연결합니다.
  3. 작업 실행:

    • 드라이버 프로그램은 높은 수준의 Spark 작업을 단계라고 하는 더 작은 작업으로 분할합니다. 스테이지에는 RDD에 대한 변환 및 액션이 포함됩니다. 이러한 작업은 클러스터의 워커 노드에서 실행되는 실행자 프로세스로 전송됩니다.
  4. 실행자 실행:

    • 실행자는 할당된 작업을 실행하고 가능한 경우 중간 결과를 메모리에 저장합니다.
  5. 결과 수집:

    • 액션이 트리거될 경우(collect 또는 count 등), 드라이버 프로그램은 실행자 프로세스에서 결과를 수집하고 사용자에게 반환하거나 외부 저장소에 기록합니다.
  6. 작업 완료:

    • Spark 응용 프로그램은 실행이 완료되고 드라이버 프로그램이 SparkContext를 중지합니다.
# spark는 병렬 처리로 작업하기에 yarn에게 요청한다.
pyspark --master yarn --num-executors 3 
profile
데이터 엔지니어

0개의 댓글