Data Engineering/python

EP28 | 고급 Python 활용 #17 | Spark와 Hadoop을 결합한 대규모 데이터 분석 아키텍처

ygtoken 2025. 3. 19. 23:21
728x90

이 글에서 다루는 개념

Apache Spark와 Hadoop을 함께 활용하면 대용량 데이터를 효율적으로 저장하고 분석할 수 있습니다.
이번 글에서는 다음 내용을 학습합니다.

  • Hadoop과 Spark의 차이 및 결합 방식
  • Spark와 HDFS 연동하여 데이터 저장 및 분석
  • YARN을 활용한 Spark 클러스터 관리
  • Hive를 활용한 대용량 데이터 쿼리 실행
  • Spark와 Hadoop을 활용한 실전 데이터 분석 사례

1️⃣ Hadoop과 Spark의 차이 및 결합 방식

📌 Hadoop과 Spark의 차이점

항목  Hadoop (MapReduce) Spark
처리 방식 디스크 기반 (Batch Processing) 메모리 기반 (In-Memory Processing)
속도 상대적으로 느림 빠름 (100배 이상)
주요 사용 사례 장기적인 데이터 저장, 배치 분석 실시간 데이터 처리, 머신러닝
대표 기술 HDFS, YARN, MapReduce RDD, DataFrame, Spark SQL

 

📌 Spark와 Hadoop 결합 방식

  1. HDFS + Spark → 대용량 데이터를 HDFS에 저장하고 Spark로 분석
  2. YARN + Spark → Spark 작업을 YARN 클러스터에서 실행
  3. Hive + Spark SQL → 대용량 데이터를 Hive로 관리하고 Spark SQL로 쿼리 실행

2️⃣ Spark와 HDFS 연동하여 데이터 저장 및 분석

📌 HDFS에 데이터 저장

hdfs dfs -mkdir -p /data
hdfs dfs -put local_file.csv /data/

 

📌 Spark에서 HDFS 데이터 읽기

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("SparkHDFS").getOrCreate()

df = spark.read.csv("hdfs:///data/local_file.csv", header=True, inferSchema=True)
df.show(5)

 

📌 출력 예시

+------+---------+
| user | clicks  |
+------+---------+
|   A  |  120    |
|   B  |  95     |
+------+---------+

 

📌 Spark에서 HDFS에 데이터 저장

df.write.mode("overwrite").csv("hdfs:///output/result.csv", header=True)

 

📌 HDFS 데이터 확인

hdfs dfs -ls /output/

3️⃣ YARN을 활용한 Spark 클러스터 관리

📌 YARN 모드에서 Spark 실행

spark-submit --master yarn --deploy-mode cluster my_spark_script.py

 

📌 YARN에서 실행 중인 작업 확인

yarn application -list

 

📌 특정 작업의 로그 확인

yarn logs -applicationId <application_id>

4️⃣ Hive를 활용한 대용량 데이터 쿼리 실행

📌 SparkSession에서 Hive 사용 설정

spark = SparkSession.builder \
    .appName("SparkHive") \
    .enableHiveSupport() \
    .getOrCreate()

 

📌 Hive 테이블 생성

CREATE TABLE user_activity (
    user STRING,
    clicks INT
) STORED AS PARQUET;

 

📌 Spark에서 Hive 테이블 조회

df = spark.sql("SELECT * FROM user_activity")
df.show()

 

📌 출력 예시

+------+---------+
| user | clicks  |
+------+---------+
|   A  |  120    |
|   B  |  95     |
+------+---------+

5️⃣ Spark와 Hadoop을 활용한 실전 데이터 분석 사례

📌 웹 로그 데이터 분석

SELECT user, COUNT(*) AS visit_count
FROM weblogs
GROUP BY user
ORDER BY visit_count DESC;

 

📌 HDFS에 저장된 JSON 데이터 처리

df = spark.read.json("hdfs:///data/web_logs.json")
df.printSchema()

 

📌 Apache Parquet 포맷으로 변환하여 저장

df.write.mode("overwrite").parquet("hdfs:///output/web_logs_parquet")

📌 실전 문제: Spark와 Hadoop 연동 연습하기


문제 1: Spark에서 HDFS 데이터를 불러와 출력하기

📌 HDFS에 저장된 sales.csv 데이터를 Spark에서 불러와 출력하세요.

# 🔽 여기에 코드 작성
df = spark.read.csv("hdfs:///data/sales.csv", header=True, inferSchema=True)
df.show(5)

문제 2: Spark 작업을 YARN 클러스터에서 실행하기

📌 YARN 클러스터에서 Spark 작업을 실행하는 명령어를 작성하세요.

# 🔽 여기에 코드 작성
spark-submit --master yarn --deploy-mode cluster my_spark_script.py

문제 3: Hive 테이블에서 Spark SQL 실행하기

📌 Hive 테이블 transactions에서 상위 5개 데이터를 조회하세요.

# 🔽 여기에 코드 작성
df = spark.sql("SELECT * FROM transactions LIMIT 5")
df.show()

문제 4: JSON 데이터를 HDFS에서 읽어와 Parquet 형식으로 저장하기

📌 HDFS에 있는 logs.json 데이터를 읽고 Parquet으로 저장하세요.

# 🔽 여기에 코드 작성
df = spark.read.json("hdfs:///data/logs.json")
df.write.mode("overwrite").parquet("hdfs:///output/logs_parquet")

 

728x90