[Ray] ๋ถ„์‚ฐ ์‹คํ–‰ ํ”„๋ ˆ์ž„์›Œํฌ Ray ์„ค๋ช…
ยท
๐Ÿ’ป Programming/Distributed Computing
RayRay๋Š” ๋ฒ”์šฉ ๋ถ„์‚ฐ ์‹คํ–‰ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๊ธฐ์กด์˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์€ ETL, ํ•™์Šต, ์„œ๋น™์ฒ˜๋Ÿผ ๋ชฉ์ ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ Ray๋Š” ๋‹จ์ผ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(Ray Data), ๋ถ„์‚ฐ ํ•™์Šต(Ray Train), ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”(Ray Tune), ๋ชจ๋ธ ์„œ๋น™(Ray Serve)๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. Ray๋Š” Uber์—์„œ ๋‚ด๋ถ€ ๋ถ„์‚ฐ ๊ฐ•ํ™”ํ•™์Šต ํ”Œ๋žซํผ์œผ๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์—…์—์„œ ๋Œ€๊ทœ๋ชจ ML ํ•™์Šต, ์„œ๋น™, ์‹คํ—˜ ์ž๋™ํ™”์— ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ํŠนํžˆ GPU ์Šค์ผ€์ค„๋ง๊ณผ ๋™์  ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚˜, ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋…ธ๋“œ์™€ GPU๋ฅผ ๋‹ค๋ฃจ๋Š” ํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์“ฐ์ธ๋‹ค.1. Ray Core ๊ฐœ๋…1.1 TaskRay์—์„œ Task๋Š” ๋ถ„์‚ฐ ์‹คํ–‰์˜ ๊ธฐ๋ณธ ๋‹จ์œ„์ด๋‹ค. Python ํ•จ์ˆ˜์— @r..
[PySpark] Spark Job ์‹คํ–‰ ๊ฐ€์ด๋“œ: Ad-hoc vs Batch
ยท
๐Ÿ’ป Programming/Distributed Computing
1. Spark Job์˜ ๊ฐœ๋…Spark์—์„œ Action ์—ฐ์‚ฐ(collect(), count(), saveAsTable() ๋“ฑ)์ด ํ˜ธ์ถœ๋˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ Job์ด ์ƒ์„ฑ๋œ๋‹ค. Job์€ DAG(Directed Acyclic Graph)๋กœ ์ชผ๊ฐœ์ ธ Stage์™€ Task๋กœ ๋‚˜๋‰˜์–ด ํด๋Ÿฌ์Šคํ„ฐ์˜ Executor์—์„œ ๋ณ‘๋ ฌ ์‹คํ–‰๋œ๋‹ค. ์ฆ‰, Job์€ Spark ํด๋Ÿฌ์Šคํ„ฐ์— ์ œ์ถœ๋˜์–ด ์‹คํ–‰๋˜๋Š” ๋‹จ์œ„ ์ž‘์—…์ด๋‹ค. ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ํ™˜๊ฒฝ์—์„œ PySpark๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Spark Job์ด ์‹คํ–‰๋œ๋‹ค. ๋…ธํŠธ๋ถ ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ ๋“œ๋ผ์ด๋ฒ„(Driver) ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ Executor์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ๋…ธํŠธ๋ถ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋™์ผํ•˜๊ฒŒ Spark ..
[PySpark] ์ฃผ์š” ์—ฐ์‚ฐ ๊ฐ€์ด๋“œ: Transformation, Action
ยท
๐Ÿ’ป Programming/Distributed Computing
1. ๊ฐœ์š”PySpark์˜ ์—ฐ์‚ฐ์€ ํฌ๊ฒŒ Transformation๊ณผ Action์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์ด ๊ตฌ๋ถ„์„ ์ดํ•ดํ•˜๋ฉด “์–ด๋””์„œ ์„ฑ๋Šฅ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€, ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š”์ง€”๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด ์ „์ฒ˜๋ฆฌ์™€ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋‹จ๊ณ„์—์„œ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 2. Transformation vs Action2.1 ์ •์˜Transformation: ์ƒˆ๋กœ์šด DataFrame์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค(=lazy). Spark๋Š” lineage(์—ฐ์‚ฐ ์ด๋ ฅ)๋งŒ ์Œ“๋Š”๋‹ค.Action: Spark๊ฐ€ ์‹ค์ œ Job์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ๊ธฐ๋กํ•œ๋‹ค.2.2 ์‹คํ–‰ ๋ชจ๋ธ ์š”์•ฝAction์„ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” Job์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.Action์„ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ DAG๊ฐ€ Job → Stage(์…”ํ”Œ..
[PySpark] ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ณธ๊ธฐ: ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด
ยท
๐Ÿ’ป Programming/Distributed Computing
1. ๊ฐœ์š”PySpark๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฌด์‹ฌ์ฝ” ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ML ์—”์ง€๋‹ˆ์–ด ์ž…์žฅ์—์„œ๋Š” Spark ๋‚ด๋ถ€ ์—”์ง„์„ ๊นŠ์ด ์•Œ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ๊ธฐ๋ณธ์ ์ธ ์ตœ์ ํ™” ์›๋ฆฌ์™€ ์‹ค๋ฌด ํŒจํ„ด์„ ์ดํ•ดํ•˜๋ฉด ์ „์ฒ˜๋ฆฌ์™€ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ค€๋น„์—์„œ ํฐ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” PySpark ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. 2. Lazy Evaluation๊ณผ ์บ์‹œ ํ™œ์šฉPySpark๋Š” Lazy evaluation ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. Transformation์€ ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  lineage๋กœ๋งŒ ๊ธฐ๋ก๋˜๋ฉฐ, Action์ด ํ˜ธ์ถœ๋  ๋•Œ ์‹ค์ œ Job์ด ์‹คํ–‰๋œ๋‹ค.Action(count(), collect(), write() ๋“ฑ)์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ผ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต ์‹คํ–‰๋  ์ˆ˜ ์žˆ..
[PySpark] ์–ด๋””์—, ์™œ ์“ธ๊นŒ? | ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ์™€ ML ํ™œ์šฉ ๊ฐ€์ด๋“œ
ยท
๐Ÿ’ป Programming/Distributed Computing
1. ๊ฐœ์š”PySpark๋Š” Apache Spark์˜ Python API์ด๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๋„๊ตฌ์ด๋‹ค. ML ๋ฆฌ์„œ์น˜ ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ PySpark๋Š” ํŒ๋‹ค์Šค์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด ์ž์›์„ ํ™œ์šฉํ•ด ํ™•์žฅ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ ์—์„œ ์œ ์šฉํ•˜๋‹ค. ์ด ๊ธ€์—์„œ๋Š” PySpark๋ฅผ ์–ด๋””์—, ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค๋ฌด์ž๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์ค‘์ ์ ์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค. 2. PySpark๋Š” ์–ด๋””์— ์“ฐ๋Š”๊ฐ€PySpark๋Š” ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ML ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ๋„ ๋ฐ์ดํ„ฐ ์ค€๋น„์™€ ์ „์ฒ˜๋ฆฌ์— ํ•ต์‹ฌ ๋„๊ตฌ๋กœ ํ™œ์šฉ๋œ๋‹ค. ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์„ ๋‹ค๋ฃฐ ๋•Œ Pandas๋กœ๋Š” ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ PySpark๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ML ์‹คํ—˜์„ ์œ„ํ•ด์„œ๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜..
[PySpark] ์ž์ฃผ ์“ฐ๋Š” ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ ์ •๋ฆฌ
ยท
๐Ÿ’ป Programming/Distributed Computing
PySpark๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ํšจ๊ณผ์ ์ธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ PySpark์˜ ์ž์ฃผ ์“ฐ๋Š” ๊ธฐ๋Šฅ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•œ๋‹ค.PySpark๋Š” ์™œ SQL์ด ์•„๋‹Œ ํ•จ์ˆ˜ํ˜• ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋‚˜?PySpark์—์„œ๋Š” SQL์ฒ˜๋Ÿผ ํ•œ ์ค„๋กœ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€ ๋‹จ๊ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์€...๋ณต์žกํ•œ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ๋””๋ฒ„๊น…์ด ์šฉ์ดํ•˜๋‹ค.์ปฌ๋Ÿผ ๋‹จ์œ„ ์กฐ์ž‘์ด ์ž์œ ๋กญ๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ณ  ํŠœ๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค.์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.๋”ฐ๋ผ์„œ ์‹ค๋ฌด์—์„œ๋Š” SQL ์ฟผ๋ฆฌ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์ž‘์—…์„ ๋๋‚ด๊ธฐ๋ณด๋‹ค๋Š”, ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹จ๊ณ„๋ณ„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ๋” ..