Azure Databricks란?
microsoft azure 클라우드에서 제공하는 앤터프라이즈급 데이터, 분석, AI 통합 플랫폼입니다.
Apache Spark 기반의 고성능 분석 엔진을 중심으로 모든 데이터 워크로드를 하나의 환경에서 처리할 수 있도록 설계된 데이터 레이크하우스 플랫폼이다. 경쟁툴로는 Snowflake,AWS Glue, google dataproc 등이 있다.
Apache Spark란?
Spark란 Single-node 또는 Cluster 위에서 Data Engineering, Data Science, Machine Learning을 수행할 수 있도록 도와주는 빅데이터 처리 및 분석을 위한 In-memory 기반의 통합 컴퓨팅 엔진이며, 데이터를 병렬로 처리하는 라이브러리 집합입니다.
클라우드 서비스(Cloud Service)
- IaaS (Infrastructure as a Service): 서버, 디스크 등 인프라를 가상화해서 제공 (예: AWS EC2, Azure VM, GCP Compute Engine)
- PaaS (Platform as a Service): 개발·운영에 필요한 플랫폼(컴퓨팅 엔진, 데이터베이스 등)을 제공 (예: Azure Databricks, Google BigQuery)
- SaaS (Software as a Service): 완성된 소프트웨어를 서비스로 제공 (예: Gmail, Salesforce)
용어 정의 및 특징
Single-node | 서버 한 대에서 모든 연산 수행이 수행되는 환경. 소규모, 테스트, 개발용. |
Cluster | 여러 대의 서버가 분산·병렬로 데이터 처리하도록 하는 분산환경. 대용량, 고성능, 엔터프라이즈 환경 필수. |
컴퓨팅 엔진 | 데이터 처리·분석의 핵심 연산을 담당하는 소프트웨어의 심장. |
병렬 처리 | 데이터를 여러 조각으로 나눠 여러 컴퓨터/코어가 동시에 처리. 속도와 확장성의 핵심. |
In-memory | 데이터를 디스크(HDD/SSD)가 아니라, RAM에 올려 초고속 처리. 반복 연산, 실시간 분석에 유리. 메모리 용량 한계 주의. |
Spark와 Hadoop의 차이
구분 Hadoop (MapReduce) Spark
데이터 처리 방식 | 디스크 기반(파일 읽기/쓰기 반복) | 인메모리(In-Memory) 기반 |
주요 구성 요소 | HDFS, MapReduce, YARN | RDD, DAG, Spark SQL, MLlib 등 |
작업 실행 방식 | 순차적 실행 (Map → Reduce 단계별 디스크 저장) | 비순차적 병렬 실행, 중간 결과 메모리 저장 |
실시간 처리 | 부적합 (배치 처리 전용) | 실시간/스트리밍/반복 연산 가능 |
언어 지원 | 주로 Java | Scala, Java, Python, R 등 다양 |
Azure Databricks 작업영역 만들기
azure에 1dt016-dbgroup이라는 리소스 그룹안에 databricks-1dt016이라는 이름으로 databricks 작업영역을 만들어줬습니다.
추가적으로는 관리되는 리소스 그룹 이름으로 databricks-1dt016-managed를 잡았습니다. 이 추가적인 리소스 그룹이 필요한 이유는 둘의 역할을 비교해보면 알수 있습니다.
구분 일반 리소스 그룹 (예: 1dt016-dbgroup) 관리형 리소스 그룹 (예: databricks-1dt016-managed)
생성 주체 | 사용자가 직접 생성 | Databricks 서비스가 자동 생성 |
관리 권한 | 사용자가 모든 리소스 직접 관리/수정/삭제 가능 | 사용자는 직접 수정/삭제 불가(시스템이 관리, 잠금(lock)됨) |
포함 리소스 | 워크스페이스, 사용자 데이터, 코드 등 | Databricks 인프라(클러스터 VM, 스토리지, 네트워크 등) |
목적 | 사용자 프로젝트/비즈니스 자산 관리 | Databricks가 내부적으로 필요한 리소스 자동 관리/보호 |
삭제/수정 | 사용자가 직접 가능 | Databricks 서비스 삭제 시 자동 삭제, 직접 삭제 불가 |
- Databricks는 내부적으로 클러스터, 스토리지, 네트워크 등 다양한 Azure 리소스를 동적으로 생성/삭제합니다. 이 리소스들은 Databricks 서비스의 안정성과 보안을 위해 사용자가 임의로 삭제/수정하면 안 되기 때문에, Azure가 별도의 "관리형 리소스 그룹"에 격리해서 자동으로 관리합니다
databricks 작업영역을 만들면 아래 작업 영역 시작이라는 버튼을 통해 databricks로 이동할 수 있습니다.
클러스터 만들기
서버리스를 사용할 수도 있지만 이번에는 클러스터를 만들어줬습니다.
클러스터를 만들면 spark에 대한 세부 튜닝이 가능하고, 라이브러리 추가가 가능한 등의 커스터마이징이 가능합니다. 단일노드와 다중노드 옵
션이 있는데, 이번에는 테스트 및 교육용으로 사용하므로 단일노드로 만들어줬습니다.
노트북
databricks에는 노트북이라는 작업공간을 사용합니다. 마치 코랩처럼 다양한 언어로 코드를 셀 단위 실행합니다. 즉각적인 시각화가 가능하다는 점이 큰 장점인것 같습니다.
카탈로그
데이터를 가져올 때는 이렇게 카탈로그에 스키마와 데이터테이블을 만들어 사용할 수 있습니다. 카탈로그는 unity catalog를 사용하여 databricks workspace에서 unity 메타스토어에 할당하여 사용합니다. 이렇게 저장한 데이터는 노트북에서 아래와 같이 사용합니다.
SELECT * FROM databricks_1dt016s.v01.sales WHERE total_price = 'total_price';
대시보드 만들기
대시보드 기능을 통해 마치 power BI처럼 시각화를 쉽게 만들고 공유 할 수 있다. 둘의 차이가 있다면 Databricks의 대시보드는 좀 더 개발자 중심이라는 것이다.
SQL편집기를 통해서도 데이터를 추가 할 수 있다.
우측상단의 공유버튼으로 다른 작업자와 대시보드 결과물을 나눌수 있으며, 필터기능을 통해 새로 그래프를 작성하지 않아도 변수별로 변하는 그래프를 만들 수 있다.
테이블 생성 및 추가
테이블 생성
USE CATALOG databricks_1dt016s;
USE SCHEMA v01;
CREATE
OR REPLACE TABLE delta_students (
id BIGINT GENERATED ALWAYS AS IDENTITY,
name STRING,
grade FLOAT,
country STRING
);
데이터 삽입
INSERT INTO
delta_students (name, grade, country)
VALUES
('Lucas', 4.0, "Italy"),
("Ana", 3.5, "Germany");
데이터 수정
UPDATE
delta_students
SET
country = "France"
WHERE
name = 'Lucas';
UPDATE
delta_students
SET
grade = 2.5
WHERE
id = 3;
Delta Lake가 제공하는 history&restore기능
히스토리 조회
DESCRIBE HISTORY delta_students;
히스토리 버전 별 조회
SELECT * FROM delta_students VERSION AS OF 1 ORDER BY id;
restore(롤백)기능
RESTORE TABLE delta_students VERSION AS OF 5;
언어 매직
%python
print("Hello Python!")
%sql
select "Hello SQL!"
%md
### 마크다운
이런식으로 언어 매직 명령어를 통해 노트북의 기본 언어 설정 외에도 다른 언어를 사용할 수 있습니다.
혹은 아래와 같은 명령어를 통해 다른 노트북을 실행시킬 수 있습니다. ]
실행될 노트북은 상대경로로 지정됩니다.
%run ./Includes/Classroom-Setup-01.2
실습환경구성
원본데이터의 회손을 막기위해 사용자 이름에서 파생된 변수를 사용하여 파일과 스키마를 구성하여 실습을 진행하였습니다. 기업에서도 이러한 방식을 사용한다고 합니다. 클러스터의 “세션 메모리”에 올라간 객체(예: DA, 변수, 임시 테이블 등)는 클러스터가 종료되거나 재시작되면 모두 사라지는 구조라고 합니다.
DA 객체란?
- DA는 일반적으로 Databricks Academy(교육/실습)에서 제공하는 헬퍼(helper) 객체입니다.
- DBAcademyHelper라는 클래스의 인스턴스(객체)로,
- 실습 환경에서 자주 쓰는 변수, 함수, 경로, 설정 등을 한 곳에 모아둔 “도구 상자” 역할을 합니다.
- 실습 참가자마다 각자의 환경(예: 사용자명, 데이터 경로, 스키마명 등)에 맞게 자동으로 세팅되도록 설계되어 있습니다.
실습데이터와 결과가 세션 메모리뿐 아니라 DBFS, Delta Lake, Unity Catalog, MLflow 등 영구 저장소에 남을 수 있습니다. 따라서 임시 데이터, 테이블, 파일, 실험 등 모든 실습 리소스를 자동으로 삭제/초기화하여 항상 “깨끗한 상태”에서 실습을 반복할 수 있게 해주는 DA.cleanup()을 사용해줍니다.
%python
DA.cleanup()
Kafka 데이터란
- Kafka는Apache Software Foundation에서 개발한 오픈소스 분산 이벤트 스트리밍 플랫폼입니다 여러 시스템(예: 웹사이트, 앱, 서버 등)에서 발생하는 데이터를 “메시지” 형태로 빠르게 주고받기 위한 데이터 파이프라인(메시지 브로커)입니다.
- 이 메시지(데이터)는 여러 형식으로 담을 수 있는데,
- *가장 많이 쓰는 포맷이 “JSON”**입니다. Kafka에서 복잡한 데이터를 주고받을 때 구조화된 정보를 한 번에 담을 수 있기 때문입니다.
- 예:
- json{"user_id": 123, "event": "click", "timestamp": "2025-05-18T10:00:00Z"}
즉, Kafka 데이터는 다양한 시스템에서 실시간으로 만들어져Kafka라는 분산 메시지 시스템을 통해 저장·중계되고,실시간 분석·알림·적재·모니터링 등 여러 분야에서 핵심적으로 쓰입니다.
카프카 개념 정리(4) - 카프카는 데이터를 어떻게 저장하고 읽어오는가?
위 글을 통하면 구조를 좀 더 쉽게 이해 할 수 있다.
파일 쿼리
경로를 작은따옴표가 아닌 백틱(')으로 묶어야 합니다.
단일 파일 쿼리
SELECT * FROM json.`${DA.paths.kafka_events}/001.json`
파일 디렉토리 쿼리
SELECT * FROM json.`${DA.paths.kafka_events}`
영구 뷰의 경우 스키마에 등록되어 삭제하지 않는 이상 남아있습니다.
임시뷰는 클러스터 세션에만 유효합니다.
파일 참조 생성
CREATE OR REPLACE VIEW event_view
AS SELECT * FROM json.`${DA.paths.kafka_events}`
파일 임시 참조 생성
CREATE OR REPLACE TEMP VIEW events_temp_view
AS SELECT * FROM json.`${DA.paths.kafka_events}`
이 외에도, 쿼리 내 참조에 CFE를 적용하거나, text.을 통해 원시 문자열로 추출하거나, binaryFile.을 통해 파일의 원시 바이트 및 메타데이터를 추출할 수 있습니다.
직접 쿼리가 작동하지 않는 경우
아래처럼 쿼리가 잘 작동하지 않는 경우에는 따로 조건을 작성해주어야 한다.
%sql
CREATE TABLE IF NOT EXISTS sales_csv
(order_id LONG, email STRING, transactions_timestamp LONG, total_item_quantity INTEGER, purchase_revenue_in_usd DOUBLE, unique_items INTEGER, items STRING)
USING CSV
OPTIONS (
header = "true",
delimiter = "|"
)
LOCATION "${DA.paths.sales_csv}"
%python (pyspark)
spark.sql(f"""
CREATE TABLE IF NOT EXISTS sales_csv
(order_id LONG, email STRING, transactions_timestamp LONG, total_item_quantity INTEGER, purchase_revenue_in_usd DOUBLE, unique_items INTEGER, items STRING)
USING CSV
OPTIONS (
header = "true",
delimiter = "|"
)
LOCATION "{DA.paths.sales_csv}"
""")
외부 테이블은 '읽기 전용'으로 연결된 것
Spark는 이 테이블을 만들면서 파일을 복사하거나 수정하지 않습니다. 그냥 “이 경로에 있는 파일을 읽어서 이렇게 해석해”라고 알려주는 것입니다.
따라서, CSV 파일이 변경돼도 Spark가 그걸 자동으로 반영하지 않습니다. 수동으로 새로고침해야 합니다.
%python
(spark.read
.option("header", "true")
.option("delimiter", "|")
.csv(DA.paths.sales_csv)
.write.mode("append")
.format("csv")
.save(DA.paths.sales_csv, header="true"
위 처럼, 기존 CSV 파일에 데이터를 append 작업을 할 수 있습니다. 즉, 파일 자체는 업데이트됩니다.
하지만, Spark는 이전에 이 테이블을 쿼리했을 때 데이터를 캐시해두었기 때문에 SELECT COUNT(*) FROM sales_csv 같은 것에 반영이 되지 않을 수 있습니다. 따라서 REFRESH TABLE sales_csv; 로 캐시를 무효화 하고 원본 파일을 새로 읽어주어야 합니다. 위 코드를 실행하면 같은 데이터를 추가해준 것이기 때문에 count(**)가 2배가 되었음을 볼 수있습니다.
SQLite에 연결
SQLite는 서버 없이, 하나의 파일로 데이터베이스를 관리하는 가볍고 빠른 오픈소스 RDBMS입니다. 모바일, 데스크톱, 임베디드 등 소규모·단일 사용자 환경에 최적입니다.
- JDBC는 특정 서버나 컴퓨터의 이름이 아니라, 데이터베이스 연결을 위한 소프트웨어적인 표준 인터페이스입니다.
- JDBC 서버의 백엔드 구성은 이 노트북을 단일 노드 클러스터에서 실행한다고 가정합니다. 여러 워커가 있는 클러스터에서 실행하는 경우, 실행기에서 실행 중인 클라이언트는 드라이버에 연결할 수 없습니다
- 드라이버와 워커(Executor)가 같은 서버에 존재합니다.
- JDBC 서버(드라이버)가 실행 중인 서버에서 모든 작업이 이루어집니다.
- 워커(Executor)도 같은 서버에 있으므로, 네트워크 통신 없이 직접 연결이 가능합니다.
- 예: 로컬 개발 환경, 소규모 테스트.
2. 다중 워커 클러스터 (멀티노드)- 드라이버와 워커가 서로 다른 서버에 분산되어 있습니다.
- JDBC 서버(드라이버)는 드라이버 노드에서 실행됩니다.
- 워커(Executor)는 다른 서버에서 실행되며,
- 드라이버 노드의 JDBC 서버에 접근하려면 네트워크 통신이 필요합니다.
- 문제:
- 워커가 드라이버의 IP/포트에 접근할 수 없는 경우 (방화벽, 네트워크 정책 등)
- 드라이버 노드의 JDBC 서버가 외부 접근을 허용하지 않는 경우
- → "연결 불가" 오류 발생.
3. 결론- 단일 노드 클러스터에서는 모든 것이 같은 서버에서 실행되므로 연결 문제가 없습니다.
- 다중 워커 클러스터에서는 드라이버와 워커가 다른 서버에 있기 때문에,
- 네트워크 설정이 제대로 되어 있지 않으면 JDBC 연결이 실패합니다.
- 드라이버와 워커(Executor)가 같은 서버에 존재합니다.
- 1. 단일 노드 클러스터 (싱글노드)
DROP TABLE IF EXISTS users_jdbc;
CREATE TABLE users_jdbc
USING JDBC
OPTIONS (
url = "jdbc:sqlite:${DA.paths.ecommerce_db}",
dbtable = "users"
)
'Data > Databricks' 카테고리의 다른 글
ML공부, 영화추천시스템, ALS 하이퍼파라미터 최적 (2) | 2025.06.07 |
---|---|
날짜/복합 등 함수, 쿼리최적화, databricks 데이터로드 및 시각화, vacuum (3) | 2025.06.06 |
cleaning, 중첩데이터, udfs, 함수s, read&write (0) | 2025.06.06 |