presto_base
Presto Base
https://www.starburst.io/learn/open-source-presto/presto-connectors/
Presto๋ ๊ธฐ๊ฐ๋ฐ์ดํธ์์ ํํ๋ฐ์ดํธ์ ์ด๋ฅด๋ ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ๋ํด ๋น ๋ฅธ ๋ถ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ ์คํ ์์ค ๋ถ์ฐ SQL ์์ง์ ๋๋ค.
Presto๋ ๋ํํ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ถ์ฐ SQL ์ฟผ๋ฆฌ ์์ง์ ๋๋ค.
๋ํํ ๋ถ์ : ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ฟผ๋ฆฌ์ ๋ฐ๋ก ๋ฐ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ถ์ ๋ฐฉ๋ฒ์ ๋๋ค.
Presto๋ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ ํด๋์ MPP ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฆ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ด ์คํธ๋ฆฌ๋ฐ ์ ํ์ ์ฌ์ฉํ์ฌ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ๋ฌ์ฑํฉ๋๋ค.
Presto์๋ ์ฐ๊ฒฐ๋ ์์ ์ ํ์ด ์๋ ํด๋ฌ์คํฐ๋น ๋จ์ผ ๊ณต์ ์ฝ๋๋ค์ดํฐ๊ฐ ์์ต๋๋ค. Presto๋ ๋ค์ค ํ ๋์๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋์ผํ Presto ์์ ์(๊ณต์ ์คํ๊ธฐ)์์ ๊ฐ๋ฅํ ํ ๋ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฝํ๋ ค๊ณ ํฉ๋๋ค.
MPP(Massively Parallel Processing) ์ํคํ ์ฒ๋ฅผ ํตํด ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ๋๋ ETL ํ๋ก์ธ์ค ์์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ง์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
Presto์ ์ํคํ ์ฒ๋ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ์์ ํ ์ถ์ํํ์ฌ ์ปดํจํ ๊ณผ ์คํ ๋ฆฌ์ง์ ๋ถ๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ์ปค๋ฅํฐ SPI๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ ์์คํ ๋ฐ ๊ฐ์ฒด ์ ์ฅ์, NoSQL ์ ์ฅ์, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๋ฐ ์ฌ์ฉ์ ์ง์ ์๋น์ค์ฉ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค
Presto๋ ๋จ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธด ETL ํ๋ก์ธ์ค๋ฅผ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
Presto์ ์๋ ์ฌ์ฉ ์ฌ๋ก๋ ๋ํํ ๋ถ์, ์๊ท๋ชจ Batch ETL ์์ ๋ฐ A/B ํ ์คํธ์ ์ํฉ๋๋ค.
์จ๋ผ์ธ ๋ถ์ ์ฒ๋ฆฌ ์ํฌ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์ต๊ทผ์๋ Presto๊ฐ ์ฝ์ ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง๋ง Presto๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ๋๋ ๋ฐ์ดํฐ ๋ ์ดํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐํฉํ๋ ๊ฒฝ์ฐ ๋น์ ๋ฐํฉ๋๋ค.
Presto๋ ๋ฐ์ดํฐ ์๋น์์ ๋ฐ์ดํฐ ์ก์ธ์ค์ ๋ํด ๋ณด๋ค ๋ฏผ์ฒฉํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Architecture
https://www.uber.com/blog/presto/
Uber์ Presto ์ํ๊ณ๋ Hadoop์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ค์ํ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ Presto ํด๋ฌ์คํฐ์๋ SQL์ ์ปดํ์ผํ๊ณ ์์ ์ ์์ฝํ๋ ํ๋์ "์ฝ๋๋ค์ดํฐ" ๋ ธ๋์ ๊ณต๋์ผ๋ก ์์ ์ ์คํํ๋ ์ฌ๋ฌ "์์ ์" ๋ ธ๋๊ฐ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ SQL ์ฟผ๋ฆฌ๋ฅผ Presto ์ฝ๋๋ค์ดํฐ์๊ฒ ๋ณด๋ ๋๋ค. Presto ์ฝ๋๋ค์ดํฐ์ ๋ถ์๊ธฐ๋ SQL์ AST (์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ )๋ก ์ปดํ์ผํฉ๋๋ค.
์ฌ๊ธฐ์์ ํ๋๋๋ AST๋ฅผ ์ฟผ๋ฆฌ ๊ณํ ์ผ๋ก ์ปดํ์ผํ์ฌ ๊ณํ์ ์์ ์ผ๋ก ๋ถํ ํ๋ ํ๋๊ทธ๋จผํธ์ ๋ง๊ฒ ์ต์ ํํฉ๋๋ค. ๋ค์์ผ๋ก ์ค์ผ์ค๋ฌ๋ HDFS(Hadoop ๋ถ์ฐ ํ์ผ ์์คํ )์์ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ง๊ณ๋ฅผ ์ํํ๋ ๊ฐ ์์ ์ ํน์ ์์ ์์๊ฒ ํ ๋นํ๊ณ ๋ ธ๋ ๊ด๋ฆฌ์๋ ์งํ ์ํฉ์ ์ถ์ ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ด๋ฌํ ์์ ์ ๊ฒฐ๊ณผ๋ ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆฌ๋ฐ๋ฉ๋๋ค.
Presto๋ ์ฟผ๋ฆฌ ์ ์ฉ ์์ง์ด๊ธฐ ๋๋ฌธ์ ์ปดํจํ ๊ณผ ์คํ ๋ฆฌ์ง๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋ค์ํ ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ์ฐ๊ฒฐํฉ๋๋ค.
Presto๋ ์ฟผ๋ฆฌ ์ค์ธ ๋ฐ์ดํฐ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ(ํ ์ด๋ธ, ์ด, ๋ฐ์ดํฐ ์ ํ)์ Apache Hive ๋ฉํ๋ฐ์ดํฐ ์นดํ๋ก๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Presto ํด๋ฌ์คํฐ๋ ์ฝ๋๋ค์ดํฐ์ ์์ ์๋ผ๋ ๋ ๊ฐ์ง ์ ํ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฝ๋๋ค์ดํฐ ๋ ธ๋๋ EMR ๋ฆฌ๋ ๋ ธ๋์์ ์คํ๋๊ณ ์์ ์ ๋ ธ๋๋ EMR ์ฝ์ด ๋ ธ๋ ๋ฐ ์ ํ์ ์ผ๋ก EMR ์์ ๋ ธ๋(EMR ํด๋ฌ์คํฐ์ ๋๋จธ์ง ๋ ธ๋)์์ ์คํํฉ๋๋ค.
๋ฆฌ๋ ๋ ธ๋ : Presto ํด๋ฌ์คํฐ์๋ ํ๋์ ๋ฆฌ๋ ๋ ธ๋๊ฐ ํ์ํฉ๋๋ค. ์ด ๋ ธ๋๋ ์ฟผ๋ฆฌ ์์ฝ ๋ฐ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค. Amazon EMR 5.23.0 ์ด์์์๋ 3๊ฐ์ ๋ฆฌ๋ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ๋ฅผ ์์ํ์ฌ ๊ณ ๊ฐ์ฉ์ฑ์ ์ง์ํ ์ ์์ต๋๋ค.
์ฝ์ด ๋ ธ๋ : ์ฝ์ด ๋ ธ๋๋ HDFS๋ฅผ ์คํํฉ๋๋ค. ์ฆ, ํ์ฅ ์๋๊ฐ ๋๋ฆฌ๊ณ ์ ๊ทน์ ์ผ๋ก ํ์ฅํ๋ฉด ์ ๋ฉ๋๋ค. ๋๊ท๋ชจ ์ค๊ฐ ๋ฐ์ดํฐ ์ธํธ์ HDFS ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ์ต์ ์ ๋๋ค. ๋ฐ์ดํฐ๊ฐ Amazon S3์ ์๋ ๊ฒฝ์ฐ HDFS๊ฐ ์ ํ๋๊ฑฐ๋ ํ์ํ์ง ์์ผ๋ฏ๋ก ์ต์ํ์ ์ฝ์ด ๋ ธ๋๋ง ํ์ํฉ๋๋ค. ํ๋์ ์ฝ์ด ๋ ธ๋๋ EMR ํด๋ฌ์คํฐ์ ์ต์ ์๊ตฌ ์ฌํญ์ ๋๋ค. HA ๋ฐ ์ฅ์ ์กฐ์น ๋ชฉ์ ์ผ๋ก ๋ ๊ฐ ์ด์์ ์ฝ์ด ๋ ธ๋๋ฅผ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ ๋ ธ๋ : ์์ ๋ ธ๋๋ ์ปดํจํ ์์ ์ ์ญํ ์ ํ๋ฉฐ HDFS๋ฅผ ์คํํ์ง ์์ผ๋ฏ๋ก ๋์ ๋ก๋ ์๊ตฌ ์ฌํญ์ด ์๋ ์ ๊ทน์ ์ธ ์๋ ํ์ฅ์ ์ ํฉํฉ๋๋ค. ์์ ๋ ธ๋๋ HDFS ์คํ ๋ฆฌ์ง๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋์ ํด๋ฌ์คํฐ์์ ๋น ๋ฅด๊ฒ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค. Presto๋ HDFS๋ฅผ ํ์ฉํ์ง ์์ง๋ง ์ฝ์ด ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์ ์ถ๊ฐํ๊ณ ๋ฑ๋กํ๋ ๊ฒ์ ์ฌ์ ํ โโ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค ๋ ํฐ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
Ganglia ์ ๊ฐ์ ์์คํ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ๋ก๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, CPU ์ฌ์ฉ๋ฅ ๋ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์คํ ๊ณํ
https://trino.io/blog/2019/05/30/semijoin-precomputed-hasd.html
Presto๋ ์ฟผ๋ฆฌ ๊ณํ์ ์ฌ๋ฌ ๋ ธ๋์์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ๋จ๊ณ๋ผ๋ ๋ถ๋ถ์ผ๋ก ๋๋๊ณ ๊ฐ ๋ ธ๋๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ธํธ์์ ์๋ํฉ๋๋ค. ๋จ๊ณ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค
๋ฆฌํ ๋จ๊ณ: ์ฟผ๋ฆฌ ๊ณํ์ ๋ฆฌํ์ ์๊ณ Hive ํ ์ด๋ธ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋จ๊ณ์ ๋๋ค.
์ค๊ฐ ๋จ๊ณ: ๋ฆฌํ ๋จ๊ณ ์ด์ธ์ ๋จ๊ณ๋ก ๋ค๋ฅธ ์ ์คํธ๋ฆผ ๋จ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์์ ์ ๋ Exchange์ถ๋ ฅ์ ์๊ณ ์ ์คํธ๋ฆผ ๋จ๊ณ์์ ์ค๊ฐ ๋จ๊ณ๋ก ์ ์กํฉ๋๋ค. GROUP BY๋ฐ ์ ๊ฐ์ ํน์ ์ฐ์ฐ์ JOIN์ ๊ฒฝ์ฐ ๋ฆฌํ ๋จ๊ณ์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ ์ด ๊ฐ์ผ๋ก ๋ถํ ๋๋ฉฐ ์ ํ ์์ ์ ํน์ ํํฐ์ ์ด ํญ์ ์ค๊ฐ ๋จ๊ณ์ ๋์ผํ ์์ ์ ์ํด ์ฒ๋ฆฌ๋๋๋ก ํฉ๋๋ค
GROUP BY ์ด ๋ถํ ์ ๊ตํ ์ค์ ํด๋น ์ด์ ๊ฐ์ ๋ํ ํด์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ฉฐ ๋์ค์ ์ค๊ฐ ๋จ๊ณ์์ ๋๋ JOIN์์ ์ ์คํํ๋ ๋์ ๋์ผํ ํด์๊ฐ ํ์ ํฉ๋๋ค. ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด Presto๋ ๋ฆฌํ ๋จ๊ณ์์ ์ด ํด์ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ฐ์ฐ์์์ ์ฌ์ฉ Exchangeํ๋ฉฐ ์ค๊ฐ ๋จ๊ณ์์ ์ฌ์ฉํ๋๋ก ์ถ๋ ฅ์์ โโ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
๋ฆฌํ ๋จ๊ณ( Stage2)๋ ๋ฐ์ดํฐ ์์ค์์ ํ ์ด๋ธ์ ์ฝ๊ณ ๋ถ๋ถ์ ์ผ๋ก ์ง๊ณ๋ ๋ฐ์ดํฐ๋ฅผ Stage1์ต์ข ์ง๊ณ๊ฐ ๋ฐ์ํ๋ ์์น๋ก ๊ณต๊ธํ๋ฉฐ ๋ง์ง๋ง์ผ๋ก ๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค Stage0์ ์ํด ์์ฑ๋ ๊ฐ ํ ์ ๋์ผํ ๋์์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ๋์ผํ ์์ ์ ์ํด ์ฒ๋ฆฌ๋๋๋ก ํ๊ธฐ ์ํด ๊ทธ ์์ ์๋ ์ด์ Stage2๊ฐ์ผ๋ก ๋ถํ ๋์ด์ผ ํฉ๋๋ค.
Unnest
Unnest๋ Facebook์ ์ผ์ผ Presto ์ํฌ๋ก๋์์ ์ผ๋ฐ์ ์ธ ์์ ์ ๋๋ค. ARRAY, MAP, ๋๋ ROW๋ฅผ ํ๋ฉด ๊ด๊ณ๋ก ๋ณํํฉ๋๋ค
Reference
https://www.starburst.io/learn/open-source-presto/๏ปฟ
https://prestodb.io/blog/2020/08/20/unnest
https://aws.amazon.com/ko/blogs/big-data/top-9-performance-tuning-tips-for-prestodb-on-amazon-emr/
Last updated