embulk
Last updated
Last updated
์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ํฌํ๋ก์ฐ
์์ง(Ingest/Collect) - ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ, ์ ์ ์์ฑ ์ ๋ณด, ๊ด๊ณ ์ ์ธ์, ์๋ํ์น์ฟ ํค
์ ์ฒ๋ฆฌ(Enrich) - ๋ด์ ์ก์ธ์ค ๋ก๊ทธ ์ ์ธ. IP ์ฃผ์๋ก ์์น ์ ๋ณด ์ถ๊ฐ, user-agent์ ๊ตฌ์กฐํ, ๋ง์คํฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ ์ ์ ์์ฑ ์ถ๊ฐ
๋ถ๋ฅ, ์ง๊ณ, ๋ถ์(Model) - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐ, ๋ถ์ ์ฒ๋ฆฌ ์์คํ ์ผ๋ก ์ ์ก, ์์ถํด์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ(์์นด์ด๋ธ), ํต๊ณ ๋ฐ์ดํฐ๋ก ๊ธฐ๋ก
ํ์ฉ(Utilize) - ์ถ์ฒ ์์ง API์ ์ฐธ์กฐ ๋ฐ์ดํฐ, ์ค์๊ฐ ๊ฑฐ๋, BI ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์๊ฐํ
Fluentd๋ ์ค์ค์๊ฐ์ ๋ก๊ทธ ํ์ฉ์ ํ ๋ ์ฒซ ์ฅ์ ๋ฌผ์ธ ๋ก๊ทธ ์์ง์ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ๊ฐ์ข ๋ฐ์ดํฐ์ ์ ๋ ฅ๊ณผ ์์ง์ Input ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ง์ํ๊ณ , ๋ฐ์ดํฐ ๊ฐ๊ณต์ Filter ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, Output ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ง ๋ฏธ๋ค์จ์ด๋ ์คํ ๋ฆฌ์ง๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
2๊ฐ์ง ๊ณผ์
Fluentd์ ์ค์ ํ์ผ์ ๊ฑฐ๋ํ์ ๊ฐ๋ ์ผ์ด๋๋ ์ฌ์ ์ ์ธ ์ฌ์ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ค์ ํ์ผ์ ๋ผ์ธ์๊ฐ ์ฆ๊ฐํ์ฌ ์ ์ง๋ณด์๊ฐ ํ๋ค๊ฒ ๋์์ต๋๋ค.
์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ์ ํนํ๋ Fluentd๋ ์ ๊ธฐ์ ์ผ๋ก ๋ฒํฌ๋ก๋๋ฅผ ํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ํฌํ๋ก์ฐ๋ฅผ ๋ง๋ค๊ธฐ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
๋ฐ์ดํฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ง์ํ๋ ๋๊ตฌ
์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ปฌ๋ ํฐ - fluentd - ์ก์ธ์ค ๋ก๊ทธ / ์ฑ๋ก๊ทธ / ์๋ฒ๋ก๊ทธ
๋ฒํฌ ๋ฐ์ดํฐ ๋ก๋ - embulk - csvํ์ผ/ S3 / MySQL / PostgreWQL ๋ฑ
์ํฌํ๋ก์ฐ ๊ด๋ฆฌ - digdag - ETL ์ฒ๋ฆฌ์ ์๋ํ
Embulk
Embulk๋ Fluentd์ ๊ฐ์ด Input/Filter/Output ํ๋ฌ๊ทธ์ธ์ ์กฐํฉํด์ ์ค์ ํ์ผ์ ์ ์ํฉ๋๋ค. ๋ณ๋ ฌ ๋ถ์ฐ ์ฒ๋ฆฌ์ ๋์ํ ์ฑ๋ฅ๊ณผ ์ฌ์๋ ์ ์ด ๋ฑ์ ์์ ์ฑ์ด ์ฐ์ํ ๋ฐ์ดํฐ ์ ์ก ํ์ดํ๋ผ์ธ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฝ์ด์ CPU ์ฝ์ด๋ฅผ ์ต๋ํ ์ฌ์ฉํด์ ๋ฐฐ์น ์ฒ๋ฆฌํ๋ ๋ฐ ํนํ๋์ด ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํ ๋ฆฌ์ง์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์, ์์์ ์ฒ๋ฆฌ๋ฅผ ํ ๋ค์ ๋ค๋ฅธ ๋ณด๊ด ์ฅ์๋ก ๋ณด๋ด๋ ๋ฐ์ดํฐ์ ๋์ฉ๋์ฒ๋ฆฌ์ ํนํ๋ ETL ์ฒ๋ฆฌ ๋๊ตฌ
Fluentd์ ๋ค๋ฅธ ํน์ง์ผ๋ก ๊ณ ์์ฑ๊ณผ ํธ๋์ญ์ ์ ์ด, ์คํค๋ง๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ๊ฒ์ฌ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ง์ดํฌ๋ก ๋ฐฐ์น์ฒ๋ฆฌ๋ก Redshift, BigQuery, Elasticsearch๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด Fluentd ๋ณด๋ค๋ ๋ณ๋ ฌ์ฒ๋ฆฌ, ์ฒ๋ฆฌ๋, ์ ์ฅํ์ด๋ฐ์ ์์ ๋กญ๊ฒ ์ปจํธ๋กคํ ์ ์๋ Embulk๋ก ์ ์ฅํ๋ ํธ์ด ํ์คํ ์์ ์ ์ ๋๋ค.
Digdag๋ ์ํฌํ๋ก์ฐ์ ์ ์๋ฅผ ์ค์ ํ์ผ๋ก ํ๊ณ ์์ต๋๋ค. Embulk์ ์์์ ์ ธ์คํฌ๋ฆฝํธ์ ์์์ ๋ณ์๋ฅผ ๋ฃ์ด๊ฐ๋ฉฐ, ์์กด ๊ด๊ณ์์ผ๋ก ์ง๋ ฌ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก Job์ ์คํํ ์ ์์ต๋๋ค.
์ํฌํ๋ก์ฐ๊ด๋ฆฌ ๋๊ตฌ๋ก์ ETL ์ฒ๋ฆฌ์ ์๋ํ์ ๋์์ด ๋ฉ๋๋ค.
์ฌ๋ฌ ๋จ๊ณ์์์ ์ฒ๋ฆฌ์ ์์กด๊ด๊ณ์ ์์, ๋ณ๋ ฌ์คํ ๋ฑ์ ํ๋ก๊ทธ๋จ ๊ฐ๋ฅํ YAML ์ค์ ํ์ผ์ ํตํด ์ ์ดํ ์ ์๋ ์ํคํ ์ฒ
์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ์์ค๋ก๋ถํฐ ๋ณ๋ ฌ ๋๋ ์ง๋ ฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ๋ ์ง๋ณ๋ก ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์ ์ฅํ๋ฉฐ ์ง์์ ์ธ 1์ฐจ ์ง๊ณ๋ฅผ ํ ๋ค์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ฒ๋ฆฌ๋ฅผ ์ง๊ด์ ์ผ๋ก ์ค์ ํ์ผ์ ์ค์ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ๊ธฐ๋ฅ
์์ ์ ์์กด๊ด๊ณ์์ผ๋ก ์คํ
๊ณผ๊ฑฐ๋ถ์ ์ผ๊ด์คํ(backfill)
์ ๊ธฐ ์คํ
์๊ฐ ๋ฑ์ ๋ณ์๋ฅผ ํฌํจํด์ ์คํ
ํ์ผ์ด ์์ฑ๋๋ฉด ์คํ
์๋ฌ์ฒ๋ฆฌ
์คํจํ๋ฉด ํต์ง
์คํจํ ์์น์์ ์ฌ์์
์ํ ๊ฐ์
์คํ ์๊ฐ์ด ์ผ์ ์ด์์ด๋ฉด ํต์ง
์์ ์ ์คํ์๊ฐ์ ์๊ฐํ
์คํ ๋ก๊ทธ์ ์์ง๊ณผ ์ ์ฅ
๊ณ ์ํ
์์ ์ ๋ณ๋ ฌ๋ก ์คํ
๋์ ์คํ ์์ ๊ฐ์์ ์ ์ด
๊ฐ๋ฐ์ง์
์ํฌํ๋ก์ฐ์ ๋ฒ์ ๊ด๋ฆฌ
GUI๋ก ์ํฌํ๋ก์ฐ ๊ฐ๋ฐ
์ ๊ธฐ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ์คํํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ ์์ ์คํ
Digdag์๋ ์ค์ผ์ค๋ฌ๋ฅผ ๋ด์ฅํ๊ณ ์์ด์ ๋ฐ๋ชฌ์ผ๋ก ๋์ํ๋ ์๋ฒ ๋ชจ๋์ ์ปค๋งจ๋๋ผ์ธ์์ ์์๋ก ์คํํ๋ ๋ก์ปฌ ๋ชจ๋์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค. ์๋ฒ ๋ชจ๋์์๋ ๊ธฐ๋ฐ ์ ๋ณด์ ํด๋ฆฌ์ ํ์ผ์ ์ปค๋งจ๋๋ผ์ธ์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
Digdag์ ์คํํ๋ ์ปค๋งจ๋
digdag run stage1_load_assets.dig
๋ณ๋ ฌ ์คํ ์์ ์ํ์ ์ค์ ํ์ฌ Digdag์ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํฉ๋๋ค.
digdag run example.dig --max-task-threads 4
ํธ๋ฆฌํ ์คํผ๋ ์ดํฐ
ํ์ผ์ด ๋ํ๋ ๋๊น์ง ๊ณ์ํ๋ s3_wait>:์ gcs_wait>:๋ผ๋ ์คํผ๋ ์ดํฐ
AWS S3์ ํ์ผ์ด ์์ฑ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์๊ธฐ๋ฉด ๋ค์ ํ์คํฌ๋ก ๊ฐ์ Redshift์์ ๊ฐ์ ธ์ค๋ Digdag์ ์ค์ . BigQuery์์ ๊ฐ์ ธ์ค๋ ๊ฒ๋ bq_load>: ์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์์ต๋๋ค.
rb>: ์คํผ๋ ์ดํฐ์ py>: ์คํผ๋ ์ดํธ๋ฅด ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ ์ธ์๋ ๋ฐ์ดํฐ์ ๊ฐ๊ณต๋ ํ ์ ์์ต๋๋ค.
http://www.yes24.com/Product/Goods/64464997
https://github.com/treasure-data/embulk
https://github.com/treasure-data/digdag