πŸ“’ Spark(3)

KimdongkiΒ·2024λ…„ 6μ›” 18일

Spark

λͺ©λ‘ 보기
3/22

πŸ“Œ Spark 데이터 μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜


πŸ“Œ 데이터 λ³‘λ ¬μ²˜λ¦¬μ˜ 쑰건

  • 데이터가 λ¨Όμ € λΆ„μ‚°λ˜μ–΄μ•Ό ν•œλ‹€.

    • Hadoop Map의 데이터 처리 λ‹¨μœ„λŠ” λ””μŠ€ν¬μ— μžˆλŠ” 데이터 블둝이닀.(128MB)
      -> hdfs-site.xml에 μžˆλŠ” γ…‡fs.block.size ν”„λ‘œνΌν‹°κ°€ κ²°μ •ν•œλ‹€.

    • Sparkμ—μ„œλŠ” 이λ₯Ό νŒŒν‹°μ…˜(Partition)이라고 ν•œλ‹€. (128MB)
      -> spark.sql.files.maxPartitionBytes: HDFS등에 μžˆλŠ” νŒŒμΌμ„ μ½μ–΄μ˜¬ λ•Œλ§Œ μ μš©λœλ‹€.

  • λ‚˜λˆ„μ–΄μ§„ 데이터λ₯Ό 각각 λ”°λ‘œ λ™μ‹œ 처리

    • MapReduceμ—μ„œ N개의 데이터 λΈ”λ‘μœΌλ‘œ κ΅¬μ„±λœ 파일 μ²˜λ¦¬μ‹œ N개의 Map Taskκ°€ μ‹€ν–‰λœλ‹€.
    • Sparkμ—μ„œλŠ” νŒŒν‹°μ…˜ λ‹¨μœ„λ‘œ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜μ–΄ Executorκ°€ λ°°μ •λœλ‹€.

처리 데이터λ₯Ό λ‚˜λˆ„κΈ° -> νŒŒν‹°μ…˜ -> λ³‘λ ¬μ²˜λ¦¬


πŸ“Œ Spark 데이터 처리 흐름

  • λ°μ΄ν„°ν”„λ ˆμž„μ€ μž‘μ€ νŒŒν‹°μ…˜λ“€λ‘œ κ΅¬μ„±λœλ‹€.

    • λ°μ΄ν„°ν”„λ ˆμž„μ€ ν•œ 번 λ§Œλ“€μ–΄μ§€λ©΄ μˆ˜μ • λΆˆκ°€ν•˜λ‹€(Immutable)
  • μž…λ ₯ λ°μ΄ν„°ν”„λ ˆμž„μ„ μ›ν•˜λŠ” κ²°κ³Ό λ„μΆœκΉŒμ§€ λ‹€λ₯Έ 데이터 ν”„λ ˆμž„μœΌλ‘œ 계속 λ³€ν™˜ν•œλ‹€.


πŸ“Œ μ…”ν”Œλ§ : νŒŒν‹°μ…˜κ°„μ— 데이터 이동이 ν•„μš”ν•œ 경우 λ°œμƒ

  • μ…”ν”Œλ§: 기쑴의 νŒŒν‹°μ…˜μœΌλ‘œλŠ” λΆˆκ°€λŠ₯ν•˜μ—¬ μƒˆλ‘œ νŒŒν‹°μ…˜μ„ λ§Œλ“  ν›„ λ„€νŠΈμ›Œν¬λ₯Ό 타고 데이터가 μ΄λ™ν•œλ‹€.

  • μ…”ν”Œλ§μ΄ λ°œμƒν•˜λŠ” 경우

    • λͺ…μ‹œμ  νŒŒν‹°μ…˜μ„ μƒˆλ‘­κ²Œ ν•˜λŠ” 경우(ex: νŒŒν‹°μ…˜ 수 쀄이기)
    • μ‹œμŠ€ν…œμ— μ˜ν•΄ μ΄λ£¨μ–΄μ§€λŠ” μ…”ν”Œλ§(ex: κ·Έλ£Ήν•‘ -> aggregation & sorting)
  • μ…”ν”Œλ§μ΄ λ°œμƒν•  λ•Œ λ„€νŠΈμ›Œν¬λ₯Ό 타고 데이터가 μ΄λ™ν•˜κ²Œ λœλ‹€.

    • λͺ‡κ°œμ˜ νŒŒν‹°μ…˜μ΄ 결과둜 λ§Œλ“€μ–΄μ§€λŠ”κ°€
      • spark.sql.shuffle.partitions이 κ²°μ •ν•œλ‹€.(κΈ°λ³Έ/μ΅œλŒ€ 200)

      • μ˜€νΌλ ˆμ΄μ…˜μ— 따라 νŒŒν‹°μ…˜ μˆ˜κ°€ κ²°μ •λœλ‹€.

        • random, hashing partition, range partition λ“±λ“±

        • sorting의 경우 range partition을 μ‚¬μš©ν•œλ‹€.

    • λ˜ν•œ Data Skew λ°œμƒ κ°€λŠ₯ν•˜λ‹€.

  • μ…”ν”Œλ§: hashing partition
    -> Aggregation μ˜€νΌλ ˆμ΄μ…˜

πŸ“Œ Data Skewness

  • Data Partitioning은 데이터 μ²˜λ¦¬μ— 병렬성을 μ£Όμ§€λ§Œ 단점도 μ‘΄μž¬ν•œλ‹€.
    • μ΄λŠ” 데이터가 κ· λ“±ν•˜κ²Œ λΆ„ν¬ν•˜μ§€ μ•ˆλŠ” κ²½μš°μ΄λ‹€.
      -> 주둜 데이터 μ…”ν”Œλ§ 후에 λ°œμƒν•œλ‹€.
    • μ…”ν”Œλ§μ„ μ΅œμ†Œν™”ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.
    • νŒŒν‹°μ…˜ μ΅œμ ν™”κ°€ μ€‘μš”ν•˜λ‹€.

0개의 λŒ“κΈ€