ํ
์ ๋ค๋ฅธ ํ์ผ ํ์์ด ํ์ํ๊ฐ์?
MapReduce ๋ฐ Spark์ ๊ฐ์ HDFS ์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ์ฝ๊ณ ์ฐ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ๊ณ ์ ๋ ์คํค๋ง๊ฐ ์๋ ์งํํ๋ ์คํค๋ง๊ฐ ์๊ฑฐ๋ ์ผ๋ถ ์ ์ฅ ์ ์ฝ์ด ์๋ ๊ฒฝ์ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ด๋ ค์์ด ์๊ธฐ ๋๋ฌธ์ ๋์ฑ ๋ณต์กํด์ง๋๋ค.
๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์คํ ๋ฆฌ์ง ํ์ ์์คํ ์ ๋ก๋๊ฐ ์ฆ๊ฐํฉ๋๋ค. Hadoop์ ๋ด๊ฒฐํจ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์ ์ฅํฉ๋๋ค. ๋์คํฌ ์ธ์ ํ๋ก์ธ์, ๋คํธ์ํฌ, ์ ์ถ๋ ฅ ์์คํ ๋ฑ์ด ๋ก๋๋ฉ๋๋ค. ๋ฐ์ดํฐ์ ์์ด ๋์ด๋๋ฉด ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ฅํ๋ ๋ฐ ๋๋ ๋น์ฉ๋ ๋์ด๋ฉ๋๋ค.
๋ค์ํ ํ์ผ ํ์
- ์ฝ๋ ์๊ฐ์ด ๋นจ๋ผ์ง๋๋ค.
- ๋ นํ ์๊ฐ์ด ๋ ๋นจ๋ผ์ก์ต๋๋ค.
- ๊ณต์ ๋ ํ์ผ.
- ์คํค๋ง ๋ฐ์ ์ ์ง์ํฉ๋๋ค.
- ํ์ฅ๋ ์์ถ ์ง์.
์ผ๋ถ ํ์ผ ํ์์ ์ผ๋ฐ์ ์ธ ์ฉ๋๋ก ๋ง๋ค์ด์ก๊ณ , ๋ค๋ฅธ ํ์ผ ํ์์ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ฉ๋๋ก ์ฌ์ฉ๋์์ผ๋ฉฐ, ์ผ๋ถ๋ ํน์ ๋ฐ์ดํฐ ํน์ฑ์ ์ถฉ์กฑํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ ํ์ ํญ์ด ์ ๋ง ๋์ต๋๋ค.
์๋ธ๋ก ํ์ผ ํ์
์ ๋ฐ์ดํฐ ์ง๋ ฌํ Avro๋ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌธ์์ด ๊ธฐ๋ฐ, ์ฆ Hadoop์ ๋ฌธ์์ด ๋ฐ์ดํฐ ์ ์ฅ ํ์์ ๋๋ค. ์คํค๋ง๋ฅผ JSON ํ์์ผ๋ก ์ ์ฅํ๋ฏ๋ก ๋ชจ๋ ํ๋ก๊ทธ๋จ์์ ์ฝ๊ฒ ์ฝ๊ณ ํด์ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ฒด๋ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ๋์ด ์์ด ์ปดํฉํธํ๊ณ ํจ์จ์ ์ ๋๋ค.
Avro์ ์ง๋ ฌํ ์์คํ ์ ์ธ์ด ์ค๋ฆฝ์ ์ ๋๋ค. ํ์ผ์ ํ์ฌ C, C++, C#, Java, Python ๋ฐ Ruby ๋ฑ ๋ค์ํ ์ธ์ด๋ก ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
Avro์ ์ฃผ์ ๊ธฐ๋ฅ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณํํ๋, ์ฆ ์งํํ๋ ๋ฐ์ดํฐ ์คํค๋ง์ ๋ํ ๊ฐ๋ ฅํ ์ง์์ ๋๋ค. Avro๋ ํ๋ ์ญ์ , ์ถ๊ฐ, ๋ณ๊ฒฝ๊ณผ ๊ฐ์ ์คํค๋ง ๋ณ๊ฒฝ ์ฌํญ์ ์ดํดํฉ๋๋ค.
Avro๋ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ด, ์ด๊ฑฐ ์ ํ ๋ฐ ํ์ ๋ ์ฝ๋๊ฐ ํฌํจ๋ ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด ํ์์ ๋ฐ์ดํฐ ๋ ์ดํฌ(
๋ฐ๋ผ์ ์ด ํ์์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ฐ์ดํฐ ๋ ์ดํฌ์ ๋๋ฉ ์กด์ ์ฐ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
- ์ด ์์ญ์ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ด์คํธ๋ฆผ ์์คํ ์ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ ์ฒด์ ์ผ๋ก ์ฝํ์ง๋ฉฐ, ์ด ๊ฒฝ์ฐ ํ ๊ธฐ๋ฐ ํ์์ด ๋ ํจ์จ์ ์ ๋๋ค.
- ๋ค์ด์คํธ๋ฆผ ์์คํ ์ ํ์ผ์์ ์คํค๋ง ํ ์ด๋ธ์ ์ฝ๊ฒ ๊ฒ์ํ ์ ์์ผ๋ฏ๋ก ์ธ๋ถ ๋ฉํ ์คํ ๋ฆฌ์ง์ ๋ณ๋๋ก ์คํค๋ง๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ต๋๋ค.
- ์๋ ์คํค๋ง์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค(์คํค๋ง ์งํ).
๋ง๋ฃจ ํ์ผ ํ์
Parquet์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ Hadoop์ฉ ์คํ ์์ค ํ์ผ ํ์์ ๋๋ค. ํ๋ซ ์ปฌ๋ผ ํ์์ ์ค์ฒฉ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
์ ํต์ ์ธ ํ ์ ๊ทผ ๋ฐฉ์์ ๋นํด Parquet๋ ์ ์ฅ ๋ฐ ์ฑ๋ฅ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ ๋๋ค.
์ด๋ ๋์(๋ง์ ์ด) ํ ์ด๋ธ์์ ํน์ ์ด์ ์ฝ๋ ์ฟผ๋ฆฌ์ ํนํ ์ ์ฉํฉ๋๋ค. ํ์ผ ํ์ ๋๋ถ์ ๊ผญ ํ์ํ ์ปฌ๋ผ๋ง ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ I/O๊ฐ ์ต์ํ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
์์ ์ฌ๋ด๊ณผ ์ค๋ช : Hadoop์ Parquet ํ์ผ ํ์์ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์ด ๊ธฐ๋ฐ(์ฆ, ์ด ํ์) ํ์์ด ๋ฌด์์ธ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด ํ์์ ๊ฐ ์ด์ ๋ํด ์ ์ฌํ ๊ฐ์ ํจ๊ป ์ ์ฅํฉ๋๋ค.
ID
์ฑํจ
ํ๊ณผ
1
emp1
d1
2
emp2
d2
3
emp3
d3
๋ฌธ์์ด ํ์์ผ๋ก ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
1
emp1
d1
2
emp2
d2
3
emp3
d3
์ด ํ์ ํ์ผ ํ์์์๋ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
1
2
3
emp1
emp2
emp3
d1
d2
d3
ํ ์ด๋ธ์์ ์ฌ๋ฌ ์ด์ ์ฟผ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด ํ์์ด ๋ ํจ์จ์ ์ ๋๋ค. ์ธ์ ํ ์ด์ด๋ฏ๋ก ํ์ํ ์ด๋ง ์ฝ์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก I/O ์์ ์ด ์ต์ํ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด NAME ์ด๋ง ํ์ํฉ๋๋ค. ์์
๋ฐ๋ผ์ ์ด ํ์์ ์ฌ์ฉํ๋ฉด ํ์ํ ์ด์ ๋๋ฌํ๋ ๋ฐ ํ์ํ ์กฐํ ์๊ฐ์ด ์ค์ด๋ค๊ณ ์ํ๋ ์ด๋ง ์ฝ๊ธฐ ๋๋ฌธ์ I/O ์์ ์๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๋
ํนํ ํน์ง ์ค ํ๋
Hadoop์ Parquet ํ์ผ ํ์์ ์ดํดํ๋ ค๋ฉด ๋ค์ ์ฉ์ด๋ฅผ ์์์ผ ํฉ๋๋ค.
- ํ ๊ทธ๋ฃน (ํ ๊ทธ๋ฃน): ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ๋ ผ๋ฆฌ์ ์ผ๋ก ์ํ ๋ถํ ํฉ๋๋ค. ํ ๊ทธ๋ฃน์ ๋ฐ์ดํฐ ์ธํธ์ ์๋ ๊ฐ ์ด์ ์กฐ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๊ธฐ๋ฅ ์กฐ๊ฐ (์ด ์ฒญํฌ): ํน์ ์ด์ ์กฐ๊ฐ์ ๋๋ค. ์ด๋ฌํ ์ด ์กฐ๊ฐ์ ํน์ ํ ๊ทธ๋ฃน์ ์์ผ๋ฉฐ ํ์ผ์์ ์ฐ์์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
- ํ์ด์ง (ํ์ด์ง): ์ด ์กฐ๊ฐ์ด ์ฐจ๋ก๋ก ์์ฑ๋ ํ์ด์ง๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ํ์ด์ง์๋ ๊ณตํต ์ ๋ชฉ์ด ์์ผ๋ฏ๋ก ์ฝ์ ๋ ๋ถํ์ํ ํ์ด์ง๋ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
์ฌ๊ธฐ ์ ๋ชฉ์๋ ๋งค์ง ๋๋ฒ๋ง ํฌํจ๋์ด ์์ต๋๋ค. PAR1 ํ์ผ์ Parquet ํ์ผ๋ก ์๋ณํ๋ (4๋ฐ์ดํธ)์
๋๋ค.
๋ฐ๋ฅ๊ธ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ๋์ ์์ต๋๋ค.
- ๊ฐ ์ด์ ๋ฉํ๋ฐ์ดํฐ ์์ ์ขํ๋ฅผ ํฌํจํ๋ ํ์ผ ๋ฉํ๋ฐ์ดํฐ์ ๋๋ค. ์ฝ์ ๋ ๋จผ์ ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๊ด์ฌ ์๋ ๋ชจ๋ ์ด ์กฐ๊ฐ์ ์ฐพ์์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ถ๋ถ์ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ผ ํฉ๋๋ค. ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ์๋ ํ์ ๋ฒ์ , ์คํค๋ง ๋ฐ ์ถ๊ฐ ํค-๊ฐ ์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ ๊ธธ์ด(4๋ฐ์ดํธ)์ ๋๋ค.
- ๋งค์ง๋๋ฒ PAR1 (4 ๋ฐ์ดํธ).
ORC ํ์ผ ํ์
์ต์ ํ๋ ํ-์ด ํ์ผ ํ์ (์ต์ ํ๋ ํ ์ด,
ORC ํ์์ ์ฅ์ :
- ํ๋์ ํ์ผ์ ๊ฐ ์์ ์ ์ถ๋ ฅ์ผ๋ก, NameNode(๋ค์ ๋ ธ๋)์ ๋ถํ๋ฅผ ์ค์ฌ์ค๋๋ค.
- DateTime, XNUMX์ง์ ๋ฐ ๋ณตํฉ ๋ฐ์ดํฐ ์ ํ(๊ตฌ์กฐ์ฒด, ๋ชฉ๋ก, ๋งต ๋ฐ ๊ณต์ฉ์ฒด)์ ํฌํจํ Hive ๋ฐ์ดํฐ ์ ํ์ ์ง์ํฉ๋๋ค.
- ์๋ก ๋ค๋ฅธ RecordReader ํ๋ก์ธ์ค์์ ๋์ผํ ํ์ผ์ ๋์์ ์ฝ์ต๋๋ค.
- ๋ง์ปค๋ฅผ ์ค์บํ์ง ์๊ณ ํ์ผ์ ๋ถํ ํ๋ ๊ธฐ๋ฅ.
- ํ์ผ ๋ฐ๋ฅ๊ธ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๊ธฐ/์ฐ๊ธฐ ํ๋ก์ธ์ค์ ๋ํด ๊ฐ๋ฅํ ์ต๋ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ถ์ ํฉ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ๋ ํ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ ์ ์๋ ํ๋กํ ์ฝ ๋ฒํผ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
ORC๋ ๋ฌธ์์ด ์ปฌ๋ ์
์ ๋จ์ผ ํ์ผ์ ์ ์ฅํ๊ณ ์ปฌ๋ ์
๋ด์์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์ด ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
ORC ํ์ผ์ ์คํธ๋ผ์ดํ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ค ๊ทธ๋ฃน๊ณผ ํ์ผ ๋ฐ๋ฅ๊ธ์ ์ง์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ํ์ผ ๋์ ์๋ Postscript์๋ ์์ถ ๋งค๊ฐ๋ณ์์ ์์ถ๋ ๋ฐ๋ฅ๊ธ์ ํฌ๊ธฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ ์คํธ๋ผ์ดํ ํฌ๊ธฐ๋ 250MB์ ๋๋ค. ์ด๋ฌํ ํฐ ์คํธ๋ผ์ดํ๋ก ์ธํด HDFS์์ ์ฝ๋ ์์ ์ ํฐ ์ฐ์ ๋ธ๋ก์์ ๋ ํจ์จ์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
ํ์ผ ๋ฐ๋ฅ๊ธ์๋ ํ์ผ์ ๋ ์ธ ๋ชฉ๋ก, ๋ ์ธ๋น ํ ์, ๊ฐ ์ด์ ๋ฐ์ดํฐ ์ ํ์ด ๊ธฐ๋ก๋ฉ๋๋ค. ๊ฐ ์ด์ ๊ฐ์, ์ต์๊ฐ, ์ต๋๊ฐ ๋ฐ ํฉ๊ณ์ ๊ฒฐ๊ณผ ๊ฐ๋ ์ฌ๊ธฐ์ ๊ธฐ๋ก๋ฉ๋๋ค.
์คํธ๋ฆฝ์ ๋ฐ๋ฅ๊ธ์๋ ์คํธ๋ฆผ ์์น ๋๋ ํ ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
ํ ๋ฐ์ดํฐ๋ ํ ์ด๋ธ์ ์ค์บํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ธ๋ฑ์ค ๋ฐ์ดํฐ์๋ ๊ฐ ์ด์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ, ๊ฐ ์ด์ ํ ์์น๊ฐ ํฌํจ๋ฉ๋๋ค. ORC ์ธ๋ฑ์ค๋ ์คํธ๋ผ์ดํ ๋ฐ ํ ๊ทธ๋ฃน ์ ํ์๋ง ์ฌ์ฉ๋๋ฉฐ ์ฟผ๋ฆฌ ์๋ต์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๋ค์ํ ํ์ผ ํ์ ๋น๊ต
Avro์ ์ชฝ๋ชจ์ด ์ธ๊ณต ๋ง๋ฃจ
- Avro๋ ํ ์ ์ฅ ํ์์ธ ๋ฐ๋ฉด Parquet๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ ์ ์ฅํฉ๋๋ค.
- Parquet๋ ๋ถ์ ์ฟผ๋ฆฌ์ ๋ ์ ํฉํฉ๋๋ค. ์ฆ, ์ฝ๊ธฐ ์์ ๊ณผ ๋ฐ์ดํฐ ์ฟผ๋ฆฌ๊ฐ ์ฐ๊ธฐ๋ณด๋ค ํจ์ฌ ๋ ํจ์จ์ ์ด๋ผ๋ ์๋ฏธ์ ๋๋ค.
- Avro์ ์ฐ๊ธฐ ์์ ์ Parquet๋ณด๋ค ๋ ํจ์จ์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
- Avro๋ ํ๋ก ์งํ๋ฅผ ๋ณด๋ค ์ฑ์ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. Parquet๋ ์คํค๋ง ์ถ๊ฐ๋ง ์ง์ํ๋ ๋ฐ๋ฉด Avro๋ ๋ค๊ธฐ๋ฅ ์งํ, ์ฆ ์ด ์ถ๊ฐ ๋๋ ๋ณ๊ฒฝ์ ์ง์ํฉ๋๋ค.
- Parquet๋ ๋ค์ค ์ด ํ ์ด๋ธ์์ ์ด ํ์ ์งํฉ์ ์ฟผ๋ฆฌํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. Avro๋ ๋ชจ๋ ์ด์ ์ฟผ๋ฆฌํ๋ ETL ์์ ์ ์ ํฉํฉ๋๋ค.
ORC ๋ ๋ง๋ฃจ
- Parquet๋ ์ค์ฒฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ์ฅํฉ๋๋ค.
- ORC๋ ์กฐ๊ฑด์ ํธ์๋ค์ด์ ๋ ์ ํฉํฉ๋๋ค.
- ORC๋ ACID ์์ฑ์ ์ง์ํฉ๋๋ค.
- ORC๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์์ถํฉ๋๋ค.
์ฃผ์ ์ ๋ํด ๋ ์ฝ์ ๋ด์ฉ:
ํด๋ผ์ฐ๋์์์ ๋น ๋ฐ์ดํฐ ๋ถ์: ๊ธฐ์ ์ด ๋ฐ์ดํฐ ์งํฅ์ ์ด ๋๋ ๋ฐฉ๋ฒ .๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ํ ๊ฒธ์ํ ๊ฐ์ด๋ .๋์งํธ ํ์ ์ ๊ดํ ์ ๋ณด ์ฑ๋ .
์ถ์ฒ : habr.com