일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 램프 파이썬
- 다중 컬럼 NOT IN
- 다리 만들기 파이썬
- 반도체 설계 파이썬
- 가장 긴 바이토닉 부분 수열 파이썬
- 백준 1167 트리의 지름 파이썬
- autovacuum
- 백준 1516 게임 개발
- 백준 1238 파티 파이썬
- SQL SERVER 장비교체
- aggressive vacuum
- postgresql autovacuum
- 게임 개발 파이썬
- 백준 11054.가장 긴 바이토닉 부분 수열
- SWEA
- 트리의 지름 파이썬
- 백준 1034 램프 파이썬
- 백준 2146 다리 만들기
- 백준 1613 역사
- eager vacuum
- PostgreSQL Vacuum
- postgresql 파티션 테이블
- 백준 2352 반도체 설계 파이썬
- lazy vacuum
- 백준 1043 거짓말 파이썬
- 가장 긴 팰린드롬 파이썬
- postgresql 파티셔닝
- PostgreSQL
- SQL SERVER MIGRATION
- 역사 파이썬
- Today
- Total
공부, 기록
[AIRFLOW, SPARK] Airflow, SPARK 설치 본문
신규 프로젝트를 진행하면서 DW가 필요하였다.
DW를 구축하기 위한 데이터 파이프라인으로 3가지 방안이 있었다.
1. 오픈소스 ETL 프로그램인 Talend 와 윈도우 스케쥴러를 사용한 방법
2. SSDT 툴을 사용하여 SQL Server Agent JOB 을 이용하여 데이터 이관
3. Airflow와 Python을 사용하여 데이터 이관.
1의 방법의 경우 팀내에 이미 사용하고 있던 방법이었고 해당 방법에대한 R&D 및 환경구축이 진행이 되어있었다
(Bulk Insert, 이기종 DBMS간 이관 등) 하지만 단점으로 모니터링이 제한적이라는 점과 퍼포먼스가 있었다.
Talend의 경우 하나의 프로세스에서 Insert Into 구문을 실행하여 데이터가 이관된다.
2의 방법의 경우 동일한 SQL Server간 데이터 이관이 진행되며 SSIS 프로그램내에서 SQL Server끼리의 데이터 이관의 경우 내부적으로 파일을 떨구는 프로세스가 진행이되는 걸로 알고있다. 이를 통해서 Bulk Insert가 진행이되며 이로 인하여 Target 쪽의 DB에서 하나의 트랜잭션으로 실행이되므로 주요 모니터링 항목 중 하나인 Batch Requests/sec 가 불안정하게 증가하지 않으며 속도가 빠르다는 장점이 있다. 단점으로는 DBMS의 Agent Job을 통해서 실행이 되므로 DB에 의존성이 상당히 높아지며 이기종 DBMS 간 이관의 신경이 쓰였다.
3의 방법의 경우 오픈소스인 Apache Airflow의 강력한 스케쥴링 및 모니터링 기능, Spark를 통한 데이터 이관을 통하여 병렬처리가 가능하여 속도 및 대량 데이터 처리에 대해서 퍼포먼스가 좋다는점이 장점이었다.
하지만 신규 도입이 필요한 시점이라 R&D가 필요한 단점이 있었다.
1,2의 방법의 경우 결정만 내려지면 바로 진행할 수 있는 수준으로 준비가 되어있었으므로 3의 방법을 R&D를 진행한 후 비교 및 결정을 하기로 하였다.
Apache Airflow + Spark 를 사용하여 데이터 파이프라인을 구축하는 과정을 정리할 필요성이 느껴져 기록 및 공유하기로하였다.
먼저 Apache Airflow는 현재 Windows 기반에서는 실행이 되지 않으므로 리눅스 서버를 통하여 진행하였다.
파이썬 (3.8) 스파크(최신버전) 에어플로우 (최신버전)을 설치하여 진행하였다.
폐쇄망에서 진행이 되었으며 먼저 프록시 서버 설정이 필요하였다. 설치 및 진행 과정은 다음 순서로 진행하였다.
1. 프록시 설정
yum 프록시 설정
sudo vi /etc/yum.conf
# 맨 밑에 아래 내용을 추가한다.
proxy={{YOUR_PROXY_SERVER}}
proxy_username={{USER_NAME}}
proxy_password={{PASSWORD}}
wget 프록시 설정
sudo vi ~/.wgetrc
# 맨 밑에 아래 내용을 추가한다.
http_proxy={{YOUR_PROXY_SERVER}}
proxy_user={{USER_NAME}}
proxy_password={{PASSWORD}}
Python 3.8버전 설치 (파이썬 2.7버전을 삭제하면 yum 을 사용할 수 없으므로 삭제하지 않고 진행하여야한다.)
# yum install gcc openssl-devel bzip2-devel libffi-devel
python.org 에서 최신 버전을 다운로드 받는다.
# wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz
파일 압축을 해제.
# tar xvfz Python-3.8.9.tgz
# cd Python-3.8.9
소스 컴파일을 진행.
# ./configure --enable-optimizations
# make altinstall
.bashrc 설정.
alias python='/usr/local/bin/python3.8'
alias pip='/usr/local/bin/pip3.8'
설치 확인
# source .bashrc
# python -V
Python 3.8.9
pip 프록시 설정
pip install --proxy='프록시 서버 주소' <library_name>
python 3.10, airflow 2.7.1
pip install apache-airflow==2.7.1 --constraint https://raw.githubusercontent.com/apache/airflow/constraints-2.7.1/constraints-3.10.txt
Spark 설치
Spark 파일 다운로드
wget https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz
압축 해제
mkdir ~/hadoop/spark-3.2.1
tar -xvzf spark-3.2.1-bin-hadoop3.2.tgz -C ~/hadoop/spark-3.2.1 --strip 1
vi ~/.bashrc
export SPARK_HOME=~/hadoop/spark-3.2.1
export PATH=$SPARK_HOME/bin:$PATH
# Configure Spark to use Hadoop classpath
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
# Source the modified file to make it effective:
source ~/.bashrc
Airflow 설치
경로 및 폴더 설정
export AIRFLOW_HOME=~/airflow
설치
pip install apache airflow --proxy 설정
db 초기화
$ airflow db init
유저 계정 생성
airflow users create \
--username {Login_ID} \
--firstname {First_NAME} \
--lastname {Last_NAME} \
--role Admin \
--password {Password} \
--email {Email}
웹서버 데몬으로 실행
airflow webserver -D
스케줄러 데몬으로 실행
airflow scheduler -D
위에 방법으로 진행할 경우 sqlite 버전이 3.15 이하 버전이라 실행이되지 않는다. 높은 버전 설치가 필요하다.
wget 을 통하여 sqlite 설치
wget sqlite-autoconf-338200.tar.gz
cd sqlite-autoconf-338200.tar.gz
sudo ./configure
sudo make clean && sudo make -j 20 && sudo make install
vi ~/.bashrc
export LD_LIBRARY_PATH=”/usr/local/lib”
source ~/.bashrc
오류 2
ModuleNotFoundError: No module named '_sqlite3'
조치
yum install sqlite-devel -y
Python 설치 경로
./configure
make
make altinstall
참조 :
'공부 > 소소한 개발' 카테고리의 다른 글
타입스크립트 (0) | 2022.08.06 |
---|---|
[AIRFLOW, SPARK] AIRFLOW, SPARK 연동 (0) | 2022.08.06 |
JAVA 동시성 이슈 (0) | 2022.07.09 |
Kafka Replication (0) | 2022.06.18 |
Apache Spark (0) | 2022.06.12 |