Tools/Spark

빅데이터, 하둡 및 Spark 소개

칼쵸쵸 2024. 2. 18. 10:49

하둡의 간단한 소개

하둡은 데이터 지역성이라는 개념에 바탕을 둔 데이터 저장 및 처리 플랫폼이다.

데이터 지역성은 요청한 데이터를 원격 처리 시스템이나 호스트로 보내 처리하는 기존의 방식 대신 데이터가 있는 곳으로 이동해서 계산하는 데이터 처리 방식을 말한다.

 

즉 클러스터를 구성하는 각 클러스터 노드에서 데이터를 보관 , 처리한 결과를 종합하여 원하는 결과를 취하는 방식이다.

하둡은 데이터를 분산 , 처리 하기 위하여 HDFS , YARN 이라는 아키텍쳐를 구성하고 있다. 

 

하둡의 기본 구성요소 : https://chalchichi.tistory.com/77\

 

Hadoop 컴퓨팅과 클러스터

DFS 하둡의 분산 파일 시스템(Distributed File System, DFS)은 하둡 에코시스템의 핵심 구성 요소 중 하나로써 DFS는 대량의 데이터를 분산 저장하고 처리하기 위한 분산 파일 시스템. DFS는 데이터를 블록

chalchichi.tistory.com

 

HDFS : https://chalchichi.tistory.com/78

 

Hadoop HDFS 아키텍쳐

마스터 노드와 워커(slave) 노드 마스터 노드 : 클러스터의 작업을 중재, 클라이언트들이 실제로 컴퓨팅을 하기 위해 접속하는 노드 , 3~6개 정도로 구성 네임노드 (NameNode): 마스터 노드 중 하나는

chalchichi.tistory.com

YARN : https://chalchichi.tistory.com/79

 

Hadoop YARN 아키텍쳐

* 클라이언트 : 얀으로 실행할 잡을 summit 하는 프로그램 * 잡 : 하나이상의 태스크를 포함하는 애플리케이션 * 태스크 : 맵퍼와 리듀스가 수행한 작업들 * 맵퍼와 리듀스는 각 컨테이너 내에서 동

chalchichi.tistory.com

 

 

아파치 스파크 소개

아파치 스파크는 하둡의 맵리듀스 구현에 대한 대안으로 만들어졌다.

하둡의 맵리듀스 : https://chalchichi.tistory.com/82

 

MapReduce 이해 하기

공식 문서 : https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

chalchichi.tistory.com

하둡 맵리듀스의 단점은  맵과 리듀스 처리 단계 사이의 중간 데이터가 디스크에 잔류한다는 것이다.

 

스파크는 단력적인 분산 데이터 집합이라고 불리는 분산형, 내결함성 , 인메모리 구조를 구현하고 있다. 

JVM과 스칼라로 작성되었으며 높은 수준의 API 및 내결함성 프레임워크를 제공해 준다.

 

스파크 사용 방식

대화형 제출

대화형 제출은 사용자가 직접 Spark 셸(shell)이나 노트북 인터페이스(예: Jupyter, Zeppelin)를 통해 쿼리와 코드를 실행할 수 있게 해준다.

이 모드는 데이터 탐색, 실험, 프로토타이핑에 이상적며 사용자는 실시간으로 쿼리를 실행하고 결과를 바로 볼 수 있으므로, 데이터에 대한 이해를 빠르게 얻거나 알고리즘을 조정할 수 있다.

 

주요 특징

  • 실시간 피드백: 사용자는 코드를 실행한 직후 결과를 볼 수 있습니다.
  • 탐색적 데이터 분석: 데이터 패턴, 이상치 또는 통계를 신속하게 발견할 수 있습니다.
  • 알고리즘 및 쿼리 테스트: 새로운 알고리즘 또는 쿼리를 빠르게 실험하고 조정할 수 있습니다.

 

비대화형 제출

비대화형 제출은 미리 정의된 작업을 Spark 클러스터에 제출하고, 작업이 자동으로 실행되도록 하는 방식

이 모드는 대량의 데이터 처리 작업, 정기적인 ETL 작업, 복잡한 데이터 파이프라인 실행 등에 적합

스크립트 또는 애플리케이션 형태로 작업을 정의하고, Spark-submit 유틸리티를 사용하여 해당 작업을 Spark 클러스터에 제출

 

 

주요 특징

  • 자동화: 작업은 사용자 개입 없이 자동으로 실행될 수 있습니다.
  • 대규모 데이터 처리: 큰 데이터셋에 대한 복잡한 처리 작업을 효율적으로 처리할 수 있습니다.
  • 스케줄링: 작업은 예약된 시간에 실행되도록 스케줄링될 수 있습니다.

 

두 모드 사이의 선택은 주로 작업의 성격, 데이터의 크기, 필요한 처리 시간, 그리고 사용자의 상호작용 요구에 따라 달라집니다. 대화형 제출은 더 빠른 피드백과 탐색적 분석을 위해 사용되는 반면, 비대화형 제출은 대규모 데이터셋에 대한 복잡하고 시간이 많이 소요되는 작업에 더 적합합니다.

 

다음은 PySpark(파이썬을 사용하는 Spark)를 사용한 간단한 비대화형 제출 예제입니다. 이 예제에서는 Spark 세션을 생성하고, 텍스트 파일을 읽은 다음, 각 줄에 있는 단어의 수를 세고, 결과를 출력합니다.

# pyspark_example.py

from pyspark.sql import SparkSession

if __name__ == "__main__":
    # Spark 세션 생성
    spark = SparkSession.builder.appName("SimpleApp").getOrCreate()

    # 데이터 로드
    textFile = spark.read.text("YOUR_TEXT_FILE_PATH_HERE")

    # 단어의 수를 세는 간단한 변환
    numWords = textFile.selectExpr("explode(split(value, ' ')) as word").count()

    print(f"Total number of words in file: {numWords}")

    # Spark 세션 종료
    spark.stop()

 

이 스크립트를 실행하기 위해 spark-submit 명령어를 사용하면 됩니다. 예를 들어, 아래와 같이 명령어를 사용할 수 있습니다.

spark-submit --master local[4] pyspark_example.py

 

이 명령어는 pyspark_example.py 스크립트를 실행하며, --master 옵션은 Spark 작업을 실행할 클러스터의 종류와 리소스를 지정합니다. 여기서 local[4]는 로컬 머신에서 4개의 코어를 사용하여 작업을 실행하겠다는 것을 의미합니다.

'Tools > Spark' 카테고리의 다른 글

RDD의 생성과 데이터 처리  (1) 2024.03.11
스파크 클러스터 동작방식  (0) 2024.03.07
Spark 클러스터 환경 구성과 실행  (0) 2024.02.19
Apache Spark 설정 및 튜닝  (0) 2023.10.17
Spark와 RDD  (0) 2023.08.18