본문 바로가기

빅데이터 플랫폼 & 아키텍처

8편. 데이터 적재 파이프라인 구축 – Sqoop/Oozie/Spark Batch 실전

반응형

 

🟧 8편. 데이터 적재 파이프라인 구축 – Sqoop/Oozie/Spark Batch 실전

금융권 Hadoop 플랫폼의 데이터 적재는 단순 “ETL”이 아니다.
보안·운영·스케줄·감사 로그까지 충족해야 하는 구조이기 때문에 설계 자체가 까다롭다.

현업에서 직접 구축했던 사례 기준으로 “그대로 적용 가능한 수준”으로 정리했다.


■ 1) 전체 적재 파이프라인 구성도

[출발] → OLTP(RDB)
           │
           ▼
     Sqoop Import
           │
           ▼
   HDFS Raw Zone
           │
           ▼
   Spark Batch(정제)
           │
           ▼
   Hive 테이블(분석/모델링)
           │
           ▼
      BI / ML / API

금융권에서는 Raw → Refined → Mart 3계층을 거의 반드시 사용한다.


■ 2) Sqoop 기반 RDB → HDFS 적재 예시

하루 500만 건 적재하던 실제 스케줄링 예시.

sqoop import \
  --connect "jdbc:mysql://10.10.1.21:3306/bank" \
  --username user \
  --password-file /user/bank/.passwd \
  --table transaction_log \
  --target-dir /data/raw/transaction_log/dt=2024-01-01 \
  --incremental append \
  --check-column updated_at \
  --last-value "2024-01-01 00:00:00" \
  --as-parquetfile \
  --num-mappers 4

실무 팁: 금융권은 비밀번호 평문 금지 → password-file 사용이 필수다.


■ 3) Spark 정제(Refined Zone 생성) Job 예시

df = spark.read.parquet("/data/raw/transaction_log/dt=2024-01-01")

df2 = df.select(
    "cust_id",
    "amount",
    "txn_type",
    "merchant",
    to_date("txn_time").alias("dt")
)

df2.write.mode("overwrite").partitionBy("dt").parquet(
    "/data/refined/transaction/"
)

■ 4) Oozie 스케줄링 워크플로우 예시

<workflow-app name="transaction-workflow" xmlns="uri:oozie:workflow:0.5">
    <start to="sqoop-node"/>

    <action name="sqoop-node">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <command>import --connect ...</command>
        </sqoop>
        <ok to="spark-node"/>
        <error to="fail"/>
    </action>

    <action name="spark-node">
        <spark xmlns="uri:oozie:spark-action:0.2">
            <master>yarn</master>
            <mode>cluster</mode>
            <name>TxnSparkJob</name>
            <jar>spark-job.jar</jar>
            <class>com.bank.job.TxnJob</class>
        </spark>
        <ok to="end"/>
        <error to="fail"/>
    </action>

    <kill name="fail">
        <message>Workflow failed</message>
    </kill>

    <end name="end"/>
</workflow-app>

실전 TIP 3개

① Sqoop은 동시 접속 과다 시 원본 DB 부하를 준다
→ 금융권에서는 DB Connection Pool을 반드시 DBA와 사전 협의해야 한다.

② Spark 정제 시 컬럼 스키마를 명확히 유지하라
→ 스키마 drift 발생 시 BI 매트릭스에서 오류 발생함.

③ 적재 실패 시 “부분 완료 체크포인트”를 저장해둬라
→ 다음 실행 시 중복 적재를 막고 복구 속도가 빨라진다.


 

반응형