์ ๋ฒ ํฌ์คํ
์์๋, Map Reduce ๋ฅผ ๊ณต๋ถํ์์ต๋๋ค.
์ด๋ฒ์๋ ํ๋ก์ ์ฌ๋ฌ ์์ฝ์์คํ
๋ค์ ๋ํด ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Hadoop ์ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ ํํธ์ด๊ธฐ ๋๋ฌธ์, ์์ฝ์์คํ ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๋ด๊ณ ์์ต๋๋ค. ๊ฐ ์์ฝ์์คํ ์ ๋ํ ์ผํ ๋ด์ฉ์ ์ถํ ๊ณต๋ถํ๊ณ ๋ฐ๋ก ํฌ์คํ ํ๊ฒ ์ต๋๋ค. :D
๐ ๋ถ์ฐ ์์คํ
์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๐ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก
๐ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก
๐ Map Reduce ๊ธฐ๋ณธ ์ด๋ก
๐ 1. ํ๋ก ์์ฝ์์คํ ๊ณผ ๊ด๋ จ ํ๋ก์ ํธ
ํ๋ก์ ๋จ์ํ ๋ถ์ฐ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ๋ก ์ถ๋ฐํ์ง๋ง, ํ์ค ์ธ๊ณ์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์๋ง์ ์์ฝ์์คํ
๊ตฌ์ฑ ์์๋ค๋ก ํ์ฅ๋์์ต๋๋ค.
์ด๋ฌํ ์์ฝ์์คํ
๋ค์ ํ๋ก์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ(HDFS์ MapReduce)๋ง์ผ๋ก๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ค์ง์ ์ธ ๋ฌธ์ ๋ค์ ๋ณด์ํ๊ณ , ๋ค์ํ ์ฌ์ฉ ์๋๋ฆฌ์ค์ ๋์ํ๊ธฐ ์ํด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
์๋ ๋ก ๋์๊ฐ๋ณด๋ฉด, ์ด๊ธฐ ํ๋ก์ HDFS๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , MapReduce๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ์์๋์์ต๋๋ค.
์ด ๊ตฌ์กฐ๋ ๋๊ท๋ชจ ๋ฐฐ์น ์ฒ๋ฆฌ์๋ ์ ํฉํ์ง๋ง, ์ฌ๋ฌ๊ฐ์ง ์ ํ์ ์ด ์กด์ฌํ์ต๋๋ค.
๋ช ๊ฐ์ง ์์๋ฅผ ๋ค์ด๋ณด๋ฉด,
MapReduce๋ ๋ฐฐ์น ์ฒ๋ฆฌ์ ์ต์ ํ๋์ด ์์ด, ์ค์๊ฐ ๋ก๊ทธ ๋ถ์, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ๋ฑ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ ์ค์๊ฐ ๋ถ์์๋ ์ ํฉํ์ง ์์์ผ๋ฉฐ,
๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ Java ๊ธฐ๋ฐ์ผ๋ก MapReduce ๋ก์ง์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์, SQL์ ์ ํธํ๋ ๋ฐ์ดํฐ ๋ถ์๊ฐ๋ค์๊ฒ๋ ์ง์
์ฅ๋ฒฝ์ด ๋งค์ฐ ๋์์ต๋๋ค.
๋ํ, ๋ฐฐ์น ์ฒ๋ฆฌ ์ธ์ ETL, ๋จธ์ ๋ฌ๋, ๊ฒ์, ๊ทธ๋ํ ๋ถ์ ๋ฑ ๋ค์ํ ์ํฌ๋ก๋๋ฅผ ์ ์ฐํ๊ฒ ์ง์ํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
์ด๋ฌํ ํ๊ณ์ ์ ๋ณด์ํ๊ธฐ ์ํด, ํ๋ก ๊ธฐ๋ฐ ์์ ์ ๋ฌธ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ค์ํ ์๋ธ ํ๋ก์ ํธ๋ค์ด ์์ฐ์ค๋ฝ๊ฒ ๋ฑ์ฅํ์ต๋๋ค.
ํ๋ก์ ํ๋์ ๊ฑฐ๋ํ ์ผ์ฒดํ ์ํํธ์จ์ด๊ฐ ์๋๋ผ, ์๋ก ๋ค๋ฅธ ์ญํ ์ ์ํํ๋ ์ฌ๋ฌ ํ๋ก์ ํธ๋ค์ด ๋์จํ๊ฒ ๊ฒฐํฉ๋ ๋ชจ๋ํ ์ํ๊ณ(Modular Ecosystem)๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๊ฐ๊ฐ์ ๋๊ตฌ๋ค์ ํน์ ๋ฌธ์ ์์ญ์ ํด๊ฒฐํ๋๋ก ์ค๊ณ๋์๊ณ , ์๋ก ์ฐ๋๋๋ฉด์ ๋ณด๋ค ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ฑํฉ๋๋ค.
์๋์์ ๋ ์์ธํ ์์๋ณด๊ฒ ์ง๋ง, ์ง๊ธ ๋ช ๊ฐ์ง๋ง ๊ฐ๋ตํ๊ฒ ์ด์ผ๊ธฐํด๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์ธ๊ฒ๋๋ค.
- Pig, Hive โ SQL ํน์ DSL๋ก MapReduce ์ถ์ํ โ ์ฌ์ฉ์ ํธ์์ฑ ํฅ์
- HBase โ HDFS ์์ ์ปฌ๋ผ ๊ธฐ๋ฐ DB ๊ตฌ์ถ โ ์ค์๊ฐ ์กฐํ ๊ธฐ๋ฅ ์ ๊ณต
- Zookeeper โ ๋ถ์ฐ ํ๊ฒฝ์์์ ๊ตฌ์ฑ ๊ด๋ฆฌ ๋ฐ ๋ฝ ์ฒ๋ฆฌ โ ๊ณ ๊ฐ์ฉ์ฑ ๋ณด์ฅ
- Oozie, Airflow โ ์ํฌํ๋ก์ฐ์ ์์ ์ค์ผ์ค๋ง โ ์๋ํ๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- YARN โ ์์ ๊ด๋ฆฌ์ ์ค์ ์ง์คํ โ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ง์
- Spark, Tez, Flink โ MapReduce๋ฅผ ๋์ฒดํ๊ฑฐ๋ ๋ณด์ํ๋ ๊ณ ์ ์ฒ๋ฆฌ ์์ง
์ด์ฒ๋ผ ๊ฐ๊ฐ์ ํ๋ก์ ํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก๋ ํ์ฉ ๊ฐ๋ฅํ์ง๋ง, ํ๋ก์ด๋ผ๋ ๊ณตํต๋ ๊ธฐ๋ฐ ์์์ ์ํธ ๋ณด์์ ์ธ ๊ด๊ณ๋ก ์๋ํฉ๋๋ค. ์ด๋ฌํ ์ค๊ณ๋ ํ๋ก์ด ๋จ์ํ ํ๋ ์์ํฌ๋ฅผ ๋์ด, ๋ฒ์ฉ ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ซํผ์ผ๋ก ์งํํ๊ฒ ๋ ํต์ฌ ๋ฐฐ๊ฒฝ์ด๊ธฐ๋ ํฉ๋๋ค.
์์ ๊ฐ์ ์ด์ ์ ์ฌ์์ ๊ฐ์ง๊ณ , ํ๋ก ์์ฝ์์คํ ์ ์คํ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋๊ตฌ๋ ์ฐธ์ฌํ๊ณ ํ์ฅํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ค์ํ ๊ธฐ์ ๊ณผ ์ปค๋ฎค๋ํฐ์์ ์์ ๋ค์ ์๊ตฌ์ ๋ง์ถฐ ํ๋ก์ ์ปค์คํฐ๋ง์ด์งํ๊ณ , ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ ์ ์๊ฒ ๋์์ต๋๋ค.
๋ํ์ ์ธ ์๋ก, Cloudera, Hortonworks, MapR ๋ฑ ์์ฉ ๋์คํธ๋ฆฌ๋ทฐํฐ๋ค์ ํ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ํ ํตํฉ ํ๋ซํผ์ ์ ๊ณตํ๋ฉด์, ๋ณด์, ๋ชจ๋ํฐ๋ง, ํตํฉ ๊ด๋ฆฌ ๋๊ตฌ ๋ฑ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํด ์ํ๊ณ๋ฅผ ๋์ฑ ํ์ฑํ๊ฒ ๋ง๋ค์์ต๋๋ค.
๊ทธ๋ผ ์ง๊ธ๋ถํฐ ๋ํ์ ์ธ ์์ฝ์์คํ ๋ช ๊ฐ์ง๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ 1.1. Apache Avro ์ Parquet ๊ทธ๋ฆฌ๊ณ ORC
ํ๋ก์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ ํ๋ซํผ์ด๋ผ๋ ์ ์ ๋ง์ ๋ถ๋ค์ด ์ด๋ฏธ ์๊ณ ์์ ๊ฒ์ ๋๋ค. ๋ํ, ํ๋ก์ ๋ถ์ฐ ํ์ผ ์์คํ (HDFS)์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ ํ, ๋ฐ์ ํ, ๋น์ ํ ์ฌ๋ถ์ ๊ด๊ณ์์ด Spark, Hive, Pig, Impala, Presto ๋ฑ ๋ค์ํ ์ฒ๋ฆฌ ์์ง์ ํตํด ๊ฐ๊ณตํ๊ณ ๋ถ์ํ ์ ์๋ค๋ ์ ๋ ์ ์๋ ค์ ธ ์์ต๋๋ค.
ํ์ง๋ง ํ๋ก๊ณผ ๊ทธ ์์ฝ์์คํ ์ ํ๋ํ๋ ํ์ตํ๋ค ๋ณด๋ฉด, ์์ฐ์ค๋ฝ๊ฒ โํ๋ก์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ํ์์ผ๋ก ์ ์ฅํด์ผ ํจ์จ์ ์ธ๊ฐ?โ ๋ผ๋ ์ง๋ฌธ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. ์ค์ ๋ก, ๋ฐ์ดํฐ ์ ์ฅ ํ์์ ํ๋ก ํ๊ฒฝ์์ ์ฑ๋ฅ๊ณผ ์์ ํจ์จ์ฑ์ ์ง๊ฒฐ๋๋ ํต์ฌ ์์์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ๋ง์ด ์ฌ์ฉํด์๋ CSV, JSON, XML๊ณผ ๊ฐ์ ์น์ํ ํ์ผ ํฌ๋งท์ ํ๋ก ํ๊ฒฝ์์๋ ๊ทธ๋ฆฌ ์ ํธ๋์ง ์์ต๋๋ค.
์ด์ ๋ ๋ช ํํฉ๋๋ค. ์ด๋ฌํ ํ์์ ํ๋ก์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ค ํ๋์ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์คํ ๋ฆฌ์ง ์ต์ ํ์ ๋ถ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ๋ก์ ์ฌ์ฉํ๋ ์ฃผ์ ๋ชฉ์ ์ค ํ๋๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ ๋์ ์ฒ๋ฆฌ๋๊ณผ ํ์ฅ์ฑ์ ํ๋ณดํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ CSV๋ JSON ๊ฐ์ ํฌ๋งท์ ๊ตฌ์กฐ์
-
์คํค๋ง ์ ๋ณด๊ฐ ์ธ๋ถ์ ๋ณ๋๋ก ์กด์ฌํด์ผ ํ๊ณ
-
์์ถ์ด๋ ์ปฌ๋ผ ๋จ์ ์ ๊ทผ์ ๋นํจ์จ์ ์ด๋ฉฐ
-
๋ฐ์ดํฐ ๋ถํ (partitioning) ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ ์ฝ์ด ์์ต๋๋ค.
์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด, ํ๋ก ๊ธฐ๋ฐ ์์คํ ์์๋ ๋ณดํต Avro, Parquet, ORC(Optimized Row Columnar)์ ๊ฐ์ ์ต์ ํ๋ ๋ฐ์ด๋๋ฆฌ ํฌ๋งท์ ํ์ฉํฉ๋๋ค.
์ด๋ค ํฌ๋งท์ ๊ณตํต์ ๋ ์์ง๋ง, ๊ฐ๊ธฐ ๋ค๋ฅธ ํน์ง๊ณผ ์ฌ์ฉ ๋ชฉ์ , ์ฅ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
์ด์ ๋ถํฐ ์ด ์ธ ๊ฐ์ง ๋ํ์ ์ธ ์ ์ฅ ํฌ๋งท์ ๋น๊ต ๋ถ์ํ๋ฉด์, ์ด๋ค ์ํฉ์ ์ด๋ค ํฌ๋งท์ ์ ํํด์ผ ํ๋์ง ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
โ ๊ณตํต์
-
ํ๋ก์ ์ต์ ํ๋ ์ ์ฅ ํ์
์ธ ํฌ๋งท ๋ชจ๋ HDFS ๋ฑ ํ๋ก์ ๋ถ์ฐ ์คํ ๋ฆฌ์ง ํ๊ฒฝ์์ ๋์ ์ฑ๋ฅ์ ๋ด๋๋ก ์ค๊ณ๋์์ต๋๋ค. -
๋ด์ฅ ์์ถ ๊ธฐ๋ฅ ์ ๊ณต
๊ธฐ๋ณธ์ ์ผ๋ก ์์ถ์ ์ง์ํ๋ฉฐ, ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. -
๊ธฐ๊ณ๊ฐ ์ฝ๋ ๋ฐ์ด๋๋ฆฌ ํ์
์ฌ๋์ด ์ฝ๊ธฐ ํธํ JSON, XML๊ณผ ๋ฌ๋ฆฌ ์ด๋ค ํฌ๋งท์ ๋ฐ์ด๋๋ฆฌ ํํ๋ก ์ ์ฅ๋์ด ๊ธฐ๊ณ๊ฐ ์ฝ๊ธฐ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ด๋ก ์ธํด ํ๋ก์์ JSON/XML์ ์ฌ์ฉํ๋ ค ํ๋ค๋ฉด, ํ๋ก์ ์ฌ์ฉํ๋ ์ด์ ์์ฒด๋ฅผ ์ฌ๊ณ ํด์ผ ํ ์ ๋์ ๋๋ค. -
๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ํ์ฅ์ฑ
์ธ ๊ฐ์ง ํ์ ๋ชจ๋ ํ์ผ์ ์ฌ๋ฌ ๋์คํฌ์ ๋ถ์ฐ ์ ์ฅํ ์ ์์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค.
๋ฐ๋ฉด JSON, XML์ ํ์ผ ๋จ์๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ถํ ์ฒ๋ฆฌ์ ์ ์ฝ์ด ์์ต๋๋ค. -
์คํค๋ง ๋ด์ฅ ์ง์
์ธ ํฌ๋งท ๋ชจ๋ ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ํจ๊ป ์ ์ฅํฉ๋๋ค.
๋ฐ๋ผ์ ํ์ผ๋ง์ผ๋ก๋ ์ด๋ค ๋ฐ์ดํฐ์ธ์ง ์ ์ ์์ด, ์์คํ ๊ฐ ๋ฐ์ดํฐ ์ด๋ ์ ์ ๋ฆฌํฉ๋๋ค. -
Wire Format์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๋จ์ํ ์ ์ฅ ํฌ๋งท์ด ์๋๋ผ, ๋คํธ์ํฌ๋ฅผ ํตํ ์ ์ก์๋ ์ฌ์ฉํ ์ ์๋ ํ์์ ๋๋ค.
์ฆ, Hadoop ํด๋ฌ์คํฐ ๋ด์์ ๋ ธ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์๋ ํ์ฉ๋ฉ๋๋ค.
๐ Wire Format์ด๋?
๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์ ์ฅํ ์ ์๋ ํ์์ ๋งํ๋ฉฐ, ์ด ๋ฐ์ดํฐ๋ ๊ฒฐ๊ตญ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๊ธฐ ๋๋ฌธ์ โwire(์ ์์)โ ํฌ๋งท์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
โ Avro, Parquet, ORC์ ์ฐจ์ด์ : ์ ์ฅ ๋ฐฉ์๊ณผ ํ์ฉ ๋ชฉ์ ์ ์ฐจ์ด
์ธ ํฌ๋งท์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ์์ต๋๋ค.
Avro๋ ํ(Row)-๊ธฐ๋ฐ ํฌ๋งท์ธ ๋ฐ๋ฉด, Parquet์ ORC๋ ์ด(Column)-๊ธฐ๋ฐ ํฌ๋งท์
๋๋ค.
-
์ด ๊ธฐ๋ฐ ํฌ๋งท (Columnar Format)์ ๋ถ์ ์ฟผ๋ฆฌ์ฒ๋ผ ์ผ๋ถ ์ด๋ง ์ ํ์ ์ผ๋ก ์กฐํํ๋ ์์ ์ ์ ๋ฆฌํฉ๋๋ค.
์: ๋ฆฌํฌํธ ์์ฑ, ์ง๊ณ ๋ถ์ ๋ฑ -
ํ ๊ธฐ๋ฐ ํฌ๋งท (Row Format)์ ์ ์ฒด ํ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ฝ๊ฑฐ๋, ์ฐ๊ธฐ ์์ ์ด ๋น๋ฒํ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค.
์: ํธ๋์ญ์ ๊ธฐ๋ก, ๋ก๊ทธ ์์ง ๋ฑ
โ ์์๋ก ์ดํดํ๋ ์ ์ฅ ๋ฐฉ์์ ์ฐจ์ด
โฃ ์์ 1: ์ด ๊ธฐ๋ฐ ํฌ๋งท์ด ์ ๋ฆฌํ ๊ฒฝ์ฐ
์๋๋ฆฌ์ค: 100๋ง ๋ช
์ ์ง์์ ๋ ๋๊ธฐ์
์ HRํ์ด ์ง์ญ๋ณ ๊ธ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๊ฒฝ์ฐ
- ์ฟผ๋ฆฌ ๋ชฉ์ :
๊ธ์ฌ
,์ง์ญ
์ด๋ง ์กฐํ - Parquet/ORC์ฒ๋ผ ์ด ๊ธฐ๋ฐ ํฌ๋งท์ ํ์ํ ์ด๋ง ์ ํ์ ์ผ๋ก ์กฐํ ๊ฐ๋ฅํ๋ฏ๋ก ์ฝ๊ธฐ I/O๊ฐ ์ ๊ณ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค.
- ๋ฐ๋ฉด, Avro๋ ํ ์ ์ฒด๋ฅผ ์ฝ๊ณ ๊ทธ ์ค ํ์ํ ์ด๋ง ํํฐ๋งํด์ผ ํ๋ฏ๋ก ๋นํจ์จ์ ์ ๋๋ค.
โฃ ์์ 2: ํ ๊ธฐ๋ฐ ํฌ๋งท์ด ์ ๋ฆฌํ ๊ฒฝ์ฐ
์๋๋ฆฌ์ค: ํญ๊ณต์ฌ๊ฐ ์ฌ์ฉ์์๊ฒ ํน์ ์๊ฐ๋(์คํ 7์~์์ ) ๋ชจ๋ ํญ๊ณตํธ ์ ๋ณด๋ฅผ ์ ๊ณต
- ์ฟผ๋ฆฌ ๋ชฉ์ : ๋ชจ๋ ์ด ๋ฐ์ดํฐ ํ์
- ์ด ๊ฒฝ์ฐ๋ ์ ์ฒด ํ์ ํต์งธ๋ก ์ฝ๋ ์์ ์ด๋ฏ๋ก Avro ๊ฐ์ ํ ๊ธฐ๋ฐ ํฌ๋งท์ด ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
- Parquet/ORC๋ ์ด ๋จ์ ์ ์ฅ์ผ๋ก ์ธํด ์ ์ด์ ๋ชจ์ผ๋ ๋ฐ ์คํ๋ ค I/O ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค.
โ ์์ถ๋ฅ ์ฐจ์ด
Parquet์ ORC๋ ์ด ๊ธฐ๋ฐ ๊ตฌ์กฐ ๋๋ถ์ ์์ถ๋ฅ ์ด ๋์ต๋๋ค.
์ด ๋จ์๋ก ์ ์ฅ๋๋ฏ๋ก, ์ ์ฌํ ๊ฐ์ด ๋ฐ๋ณต๋๋ ์ด(์: ์ฑ๋ณ, ๊ตญ๊ฐ ์ฝ๋, ์ํ ํ๋๊ทธ ๋ฑ)์ ๋ฌถ์ด ์์ถํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ๊ตฌ์กฐ๋ ํนํ IoT์ฒ๋ผ ๋๋์ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ ๋ ์คํ ๋ฆฌ์ง ํจ์จ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
๋ฐ๋ฉด, Avro๋ ํ ์ ์ฒด๋ฅผ ๋ฌถ์ด ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ค์์ฑ์ด ์ปค์ง๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ถ๋ฅ ์ด ๋ฎ์์ง๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
โ ์คํค๋ง ์งํ ์ง์ (Schema Evolution)
-
Avro๋ ์คํค๋ง ์งํ์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค.
๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ ํ๋ ๋ฉํ๋ฐ์ดํฐ๋ JSON์ผ๋ก ํํํ๊ณ , ์ค์ ๋ฐ์ดํฐ๋ ๋ฐ์ด๋๋ฆฌ๋ก ์ ์ฅํ๋ฏ๋ก ์คํค๋ง ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์์ต๋๋ค. -
ORC๋ Hive์์ ๊ธด๋ฐํ ํตํฉ ๋๋ถ์ Parquet๋ณด๋ค ๋ ๋์ ์คํค๋ง ์งํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
Hive ๋ฉํ์คํ ์ด์์ ํธํ์ฑ๋ ๋ฐ์ด๋๋ฉฐ, ํ๋ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ ๋ํด ์๋์ ์ผ๋ก ์ ๋์ํฉ๋๋ค.
โ ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ฐ๊ฒฐ ๊ธฐ์
-
Avro
Kafka์์ ๋ฉ์์ง๋ฅผ ์ง๋ ฌํํ๋ ํฌ๋งท์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๋ํ ์ ์ก ํฌ๋งท(wire format)์ผ๋ก๋ ์ ํฉํ๋ฉฐ, ๋ฐ์ดํฐ ๊ตํ์ ์ต์ ํ๋์ด ์์ต๋๋ค. -
Parquet
Cloudera ํ๊ฒฝ(CDH)์์ Impala์ ์์ฃผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, Spark, Drill, Hive ๋ฑ ๋ค์ํ ๋ถ์ ๋๊ตฌ์์ ํญ๋๊ฒ ์ง์๋ฉ๋๋ค. -
ORC
Hortonworks ๊ธฐ๋ฐ(HDP)์ Hive์์ ๊ธฐ๋ณธ ํฌ๋งท์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, Presto ๋ฑ์์๋ ์ง์๋ฉ๋๋ค.
โ Apache Spark๋ ์ด ์ธ ํฌ๋งท ๋ชจ๋๋ฅผ ์ง์ํ๋ฏ๋ก, ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ ํฉํ ํฌ๋งท์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
โ ํฌ๋งท๋ณ ์์ฝ ๋น๊ต
๊ตฌ๋ถ | Avro | Parquet | ORC |
---|---|---|---|
์ ์ฅ ๋ฐฉ์ | ํ ๊ธฐ๋ฐ (Row-based) | ์ด ๊ธฐ๋ฐ (Column-based) | ์ด ๊ธฐ๋ฐ (Column-based) |
์ต์ ํ ๋์ | ์ฐ๊ธฐ ์์ , ์ ์ก, Kafka | ์ฝ๊ธฐ ์์ , ๋ถ์ ์ฟผ๋ฆฌ | Hive ์ต์ ํ, ์์ถ ํจ์จ |
์์ถ ํจ์จ | ๋ณดํต | ๋์ | ๋งค์ฐ ๋์ |
์คํค๋ง ์งํ | ๊ฐ๋ ฅํจ | ์ ํ์ | ์๋์ ์ผ๋ก ์ฐ์ |
ํ์ฉ ํ๊ฒฝ | Kafka, ์ ์ก ํฌ๋งท | Impala, Spark, Drill | Hive, Presto, HDP |
โ Hadoop ์์ ๊ฐ ํฌ๋ฉง ์ฌ์ฉ ๋ฐฉ๋ฒ ( Hive ์์ )
๐ 1. TEXTFILE**
CREATE TABLE tb_text (
ymd STRING,
tag STRING,
cnt INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
์์ถ ์ค์ (INSERT ์ ์ ์ ์ฉ):
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
-- ๋๋
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
๋จ์ ํ ์คํธ ์ ์ฅ์ ์ ํฉํ์ง๋ง, ๋๊ท๋ชจ ๋ถ์์๋ ๋นํจ์จ์ ์.
๐ 2. PARQUET
CREATE TABLE tb_parquet (
ymd STRING,
tag STRING,
cnt INT
)
STORED AS PARQUET;
์์ถ ์ค์ :
SET parquet.compression=SNAPPY;
-- ๋๋
SET parquet.compression=GZIP;
SET parquet.compression=UNCOMPRESSED;
์ด ๊ธฐ๋ฐ ํฌ๋งท์ผ๋ก, ๋ถ์ ์ฟผ๋ฆฌ ๋ฐ Spark ํ๊ฒฝ์ ์ต์ ํ๋จ.
Parquet ์ ๊ฒฝ์ฐ ๊ธฐ์กด์๋ ์๋์ฒ๋ผ ๋ฑ๋กํ์์.
CREATE TABLE tb_parquet (
ymd STRING,
tag STRING,
cnt INT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat';
๊ทธ๋ฌ๋ 0.14๋ถํฐ๋ Parquet ๋ฅผ ์ง์ํด์ฃผ์ด์, STORED AS PARQUET;
์ผ๋ก ๋ฑ๋กํ๋ฉด ๋ด๋ถ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๋ฑ๋ก๋จ.
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
๐ 3. ORC
CREATE TABLE tb_orc (
ymd STRING,
tag STRING,
cnt INT
)
STORED AS ORC
TBLPROPERTIES ("orc.compress"="ZLIB");
-- ๋๋
-- TBLPROPERTIES ("orc.compress"="SNAPPY");
-- TBLPROPERTIES ("orc.compress"="NONE");
Hive์์ ๊ถ์ฅํ๋ ํฌ๋งท์ด๋ฉฐ, ๋์ ์์ถ๋ฅ ๊ณผ ์ฑ๋ฅ ์ ๊ณต.
๐ 4. AVRO
CREATE TABLE tb_avro (
ymd STRING,
tag STRING,
cnt INT
)
STORED AS AVRO;
์์ถ ์ค์ :
SET hive.exec.compress.output=true;
SET avro.output.codec=snappy;
-- ๋๋
SET avro.output.codec=deflate;
SET avro.output.codec=bzip2;
์คํค๋ง ์งํ๊ฐ ์์ฃผ ์ผ์ด๋๋ ํ๊ฒฝ (์: Kafka) ์ ์ ํฉ.
| ํฌ๋งท | Hive ๊ถ์ฅ ์ฌ๋ถ | ์์ถ ์ค์ ๋ฐฉ์ | ํน์ง ์์ฝ |
|โโโโ-|โโโโโ-|โโโโโ-|โโโโ|
| TEXTFILE | ๋ฎ์ | SET ๋ฐฉ์ | ๋จ์, ๋นํจ์จ์ |
| PARQUET | ๋์ | SET ๋ฐฉ์ | ๋ถ์ ์ฟผ๋ฆฌ ์ต์ |
| ORC | ๋งค์ฐ ๋์ | TBLPROPERTIES | Hive ์ต์ ํ |
| AVRO | ์ค๊ฐ ์ด์ | SET ๋ฐฉ์ | ์คํค๋ง ์งํ |
โ ํด๋น ๊ธ์, ํ๋ก ์์ฝ ์์คํ
์ ๋ํ ๊ฐ๋จํ ๋ด์ฉ์ ๊ณต๋ถํ๊ณ ๋ค๋ฃน๋๋ค. ๊ฐ ์์ฝ์์คํ
์ ๋ณด๋ค ๋ ์์ธํ ๋ด์ฉ์ ์ถํ ๊ณต๋ถํ์ฌ, ๋ฐ๋ก ํฌ์คํ
ํ ์์ ์
๋๋ค.
๐ 1.2. Apache Flume
๐ 1.3. Apache Sqoop
๐ 1.4. Apache Kerberos
๐ 1.5. Apache Hive
๐ 1.6. Apache Impala
๐ 1.7. Apache HBase
๐ 1.8. Apache Spark
๐ 1.9. Apache Oozie
๐ 1.10. Apache Zookeeper
๐ 1.11. Apache Crunch
๐ 1.12. ๊ทธ ์ธ ํ๋ก์ ํธ์, ํ๋ก์ ํธ์ ํฐ ์ข ๋ฅ
๐ 2. ํ๋ก์ ์ด์๊ณผ ๊ด๋ฆฌ
๐ 2.1. ํ๋ก์ ์ฃผ์ ์ค์ ํ์ผ๊ณผ, ์ค์ ๊ฐ
๐ 2.2. ์ค์ ํ๋ก ํด๋ฌ์คํฐ ๊ตฌ์ถ๊ณผ ๋ณด์
๐ 2.3. ํ์ ์์์ ํ๋ก์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
๐ 3. ๊ธฐํ ํ๋ก์ ๋ํด ์์์ผ ํ ๋ช ๊ฐ์ง
๐ 3.1. ํ๋ก I/O
๐ 3.2. Schema on Read vs Schema on Write
๐ 3.3. ํ๋ก์ ์ธ ๊ฐ์ง ๋ชจ๋
๐ 3.4. CDH
๐ 3.5. Cascading
๐ 3.6. ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์๋ ํ๋ก์ด ๋์ง ์๋ ์ด์ ?
๐ 4. ์ค์ ํ๋ก ๊ด๋ จ ๋ฉด์ ์ง๋ฌธ ์ฌ๋ก ๋ชจ์
โ ์ง๋ฌธ: RDBMS ์ HDFS์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)์ ํ๋ก ๋ถ์ฐ ํ์ผ ์์คํ
(HDFS)์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์คํ
์ด์ง๋ง, ์ค๊ณ ์ฒ ํ๊ณผ ์ฌ์ฉ ๋ชฉ์ ์ด ํฌ๊ฒ ๋ค๋ฆ
๋๋ค.
RDBMS๋ ์ฃผ๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์คํ
์ผ๋ก, ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ช
ํํ๊ฒ ์ ์๋ ์คํค๋ง(schema)์ ๋ฐ๋ผ ์ ์ฅ๋ฉ๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ฉฐ, ํด๋น ๊ตฌ์กฐ์ ๋ง์ง ์๋ ๋ฐ์ดํฐ๋ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ถ์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์๊ณ , ๋ณต์กํ ์ง์(์ฟผ๋ฆฌ)๋ ํธ๋์ญ์
์ฒ๋ฆฌ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก RDBMS๋ OLTP(Online Transaction Processing), ์ฆ ์ํ์ด๋ ERP ์์คํ
์ฒ๋ผ ๋ค์์ ์ฌ์ฉ์๊ฐ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ยท์์ ยท์กฐํํ๋ ํ๊ฒฝ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ฉด HDFS๋ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์ ์ฅํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ JSON, XML, ์ด๋ฏธ์ง, ๋ก๊ทธ ํ์ผ ๋ฑ ๋ฐ๊ตฌ์กฐํ ๋๋ ๋น์ ํ ๋ฐ์ดํฐ๋ ์ ์ฅํ ์ ์์ต๋๋ค. ๋ํ HDFS๋ ๋ฐ์ดํฐ๋ฅผ ์์ญ ๋์์ ์์ฒ ๋์ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ด, ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋งค์ฐ ํจ๊ณผ์ ์
๋๋ค.
์คํค๋ง ์ ์ฉ ๋ฐฉ์์์๋ ๋ ์์คํ
์ ๋ค๋ฆ
๋๋ค. RDBMS๋ โ์คํค๋ง ์จ ๋ผ์ดํธ(schema-on-write)โ ๋ฐฉ์์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ๊ฒ์ฌํฉ๋๋ค. ์ด๋ก ์ธํด ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ ํฉ์ฑ์ ๋์ง๋ง, ์ ์ฐ์ฑ์ด ๋จ์ด์ง๊ณ ์ด๊ธฐ ์ฒ๋ฆฌ ์๋๋ ๋๋ฆด ์ ์์ต๋๋ค. ๋ฐ๋ฉด HDFS๋ โ์คํค๋ง ์จ ๋ฆฌ๋(schema-on-read)โ ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์๊ณ , ์ค์ ๋ถ์์ด๋ ๊ฒ์ ์์ ์ ์คํค๋ง๋ฅผ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํด์ํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๋ค๋ฃจ๋ ํ๊ฒฝ์์ ๋งค์ฐ ์ ๋ฆฌํฉ๋๋ค.
๋ํ, RDBMS๋ ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ์๋ฒ ๋๋ ์๊ท๋ชจ ํด๋ฌ์คํฐ์์ ๋์ํ๋ฉฐ, ๊ณ ์ฑ๋ฅ์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ๋ชฉํ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ์๋๊ฐ ๋น ๋ฅธ ๋ฐ๋ฉด, HDFS๋ ์ฐ๊ธฐ ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฐ์ด๋๋ฉฐ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์์งํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ผ์ด์ ์ค ์ธก๋ฉด์์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. RDBMS๋ ์์ฉ ์ ํ์ด ๋ง์ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ง๋ง, Hadoop์ ์คํ์์ค ๊ธฐ๋ฐ์ผ๋ก ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ์ ๋ ํฐ ์ฅ์ ์
๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, RDBMS๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ๋น ๋ฅธ ํธ๋์ญ์
๊ณผ ์ ํฉ์ฑ์ด ํ์ํ ํ๊ฒฝ์ ์ ํฉํ๊ณ , HDFS๋ ๋ค์ํ ํํ์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์ ์ฅํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ ํฉํ ํ๋ซํผ์
๋๋ค.
โ ์ง๋ฌธ: ๋น ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ 5V๋ ๋ฌด์์ธ๊ฐ์?
๋น
๋ฐ์ดํฐ๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ผ๋ก๋ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ธ ๋งํผ ๊ฑฐ๋ํ๊ณ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ธฐ ์ํด ํํ 5๊ฐ์ง ํต์ฌ ํน์ฑ์ผ๋ก ์์ฝ๋ โ5Vโ ๊ฐ๋
์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ๋ Volume(๋ณผ๋ฅจ)์
๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์์ ์๋ฏธํ๋๋ฐ, ๋น
๋ฐ์ดํฐ๋ ํ
๋ผ๋ฐ์ดํธ(TB), ํํ๋ฐ์ดํธ(PB), ์์ฌ๋ฐ์ดํธ(EB)๋ฅผ ๋์ด์๋ ๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด, SNS, IoT ์ผ์, CCTV ์์, ์ ์์๊ฑฐ๋ ๋ก๊ทธ ๋ฑ์์ ์์ฑ๋๋ ๋ฐ์ดํฐ๋ ํ๋ฃจ์๋ ์์ญ~์๋ฐฑ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ์ด๋ฅผ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ๋ Velocity(์๋)์
๋๋ค. ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ณ ์ ๋ฌ๋๋ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค๋ ๋ป์
๋๋ค. ๊ณผ๊ฑฐ์๋ ๋ฐ์ดํฐ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฐ์น(batch)๋ก ์์ง๋์์ง๋ง, ์ค๋๋ ์ ๋น
๋ฐ์ดํฐ ํ๊ฒฝ์์๋ ์ด๋น ์์ฒ~์๋ง ๊ฑด์ ์ด๋ฒคํธ๊ฐ ์ค์๊ฐ์ผ๋ก ์์ฑ๋๊ณ ๋ถ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค์๊ฐ ์์น ๊ธฐ๋ฐ ์ถ์ฒ ์๋น์ค๋ ๊ธ์ต ๊ฑฐ๋ ์ด์ ํ์ง ์์คํ
์ ๋น ๋ฅธ ๋ฐ์ดํฐ ์๋๋ฅผ ์๊ตฌํฉ๋๋ค.
์ธ ๋ฒ์งธ๋ Variety(๋ค์์ฑ)์
๋๋ค. ๋น
๋ฐ์ดํฐ๋ ๋จ์ํ ์ ํ ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ, ๋ก๊ทธ ํ์ผ, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค, ์ผ์ ๋ฐ์ดํฐ ๋ฑ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ด์ง์ ์ธ ๋ฐ์ดํฐ ์ ํ์ ํตํฉํ์ฌ ๋ถ์ํ ์ ์๋ ์ ์ฐ์ฑ์ด ํ์์ ์
๋๋ค.
๋ค ๋ฒ์งธ๋ Veracity(์ ํ์ฑ)์
๋๋ค. ๋ฐ์ดํฐ๊ฐ ์๋ฌด๋ฆฌ ๋ง๊ณ ๋น ๋ฅด๊ฒ ์์ง๋๋๋ผ๋, ๊ทธ ํ์ง์ด ๋ฎ๊ฑฐ๋ ๋ถํ์คํ๋ค๋ฉด ์ ๋ขฐํ ์ ์๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ๋น
๋ฐ์ดํฐ ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ ์ ์ (cleaning) ๋ฐ ํ์ง ๊ฒ์ฆ์ด ์ค์ํ ๊ณผ์ ๊ฐ ๋ฉ๋๋ค.
๋ค์ฏ ๋ฒ์งธ๋ Value(๊ฐ์น)์
๋๋ค. ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ๋ ๋ชฉ์ ์ ๋น์ฆ๋์ค ๋๋ ์ฌํ์ ๊ฐ์น ์ฐฝ์ถ์
๋๋ค. ์์ ๋ฐ์ดํฐ(raw data) ๊ทธ ์์ฒด๋ณด๋ค๋, ๊ทธ๋ก๋ถํฐ ์ ์๋ฏธํ ํต์ฐฐ(insight)์ ๋์ถํ๋ ๊ฒ์ด ํต์ฌ์
๋๋ค.
โ ์ง๋ฌธ: RDBMS์ HDFS์ ์ฐจ์ด์ ์?
Hadoop์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋ ์คํ์์ค ํ๋ ์์ํฌ์
๋๋ค. 2000๋
๋ ์ค๋ฐ, ๊ตฌ๊ธ์ GFS์ MapReduce ๋
ผ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ, ํ์ฌ๋ ๋ค์ํ ๋น
๋ฐ์ดํฐ ํ๋ซํผ์ ๊ธฐ๋ฐ์ด ๋๊ณ ์์ต๋๋ค.
Hadoop์ ํต์ฌ ๊ตฌ์ฑ์์๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ๋ HDFS (Hadoop Distributed File System)์
๋๋ค. HDFS๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ธ๋ก์ผ๋ก ๋๋ ๋ค, ์ด๋ฅผ ์ฌ๋ฌ ๋
ธ๋์ ๋ถ์ฐ ์ ์ฅํฉ๋๋ค. ํ๋์ ํ์ผ์ด ์๋ฐฑ MB ๋๋ ์ GB ๋จ์์ผ์ง๋ผ๋, ๋ธ๋ก ๋จ์๋ก ์ชผ๊ฐ์ ์ ์ฅ๋๋ฉฐ, ๋ณต์ (replication) ๋ฉ์ปค๋์ฆ์ ํตํด ์ฅ์ ์ ๊ฐํ ์ ์ฅ์๋ฅผ ๊ตฌํํฉ๋๋ค.
๋ ๋ฒ์งธ๋ YARN (Yet Another Resource Negotiator)์
๋๋ค. YARN์ ํ๋ก ํด๋ฌ์คํฐ ๋ด์์ ์ปดํจํ
์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์์
(job)์ ์ค์ผ์ค๋งํ๊ณ ์คํํ๋ ์ญํ ์ ํฉ๋๋ค. MapReduce, Spark, Tez, Hive ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ง๋ค์ด YARN ์์์ ์คํ๋๋ฉฐ, ์์ ํ ๋น๊ณผ ์คํ ์ํ ๋ชจ๋ํฐ๋ง ๋ฑ์ YARN์ด ์ฑ
์์ง๋๋ค.
์ด ์ธ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ฉ ์ปดํฌ๋ํธ๋ก๋ MapReduce, Apache Spark, Hive, HBase, Pig, Flink ๋ฑ์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ SQL ์ฒ๋ฆฌ, ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, ๋จธ์ ๋ฌ๋ ๋ฑ์ ํนํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, Hadoop์ HDFS์ YARN์ด๋ผ๋ ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐํ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ์ํ๊ณ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ์คํ์์ค ํด๊ณผ ๊ฒฐํฉํด ์ ์ฐํ ๋ถ์ ํ๋ซํผ์ผ๋ก ํ์ฉ๋ฉ๋๋ค.
โ ์ง๋ฌธ: Hadoop์ ์ฌ์ฉํ๋ ๋ฐ ์์ด ํํ ๋ฐ์ํ๋ ๊ณผ์ ๋?
โ
1. NameNode์ ๋จ์ผ ์ฅ์ ์ง์ ๋ฌธ์
Hadoop์ ์ด๊ธฐ ๊ตฌ์กฐ์์๋ NameNode๊ฐ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋จ๋
์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
๋ฐ๋ผ์ NameNode๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ฉด ์ ์ฒด ํด๋ฌ์คํฐ์ ์ด์์ด ์ค๋จ๋๊ณ , ์ต์
์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด High Availability(HA) ๊ตฌ์ฑ์ด ๋์
๋์์ง๋ง, ๊ธฐ๋ณธ ๊ตฌ์กฐ ์์ฒด๊ฐ ๊ฐ๋ ์ํ์ฑ์ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
โ
2. ๋ณด์ ์ทจ์ฝ์ฑ
๊ธฐ๋ณธ Hadoop์ ๋ณด์ ๊ธฐ๋ฅ์ด ์ ํ์ ์
๋๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ์ ๊ทผ ์ ์ด๊ฐ ์ธ๋ถํ๋์ด ์์ง ์๊ณ , ๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋์ง ์ถ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
Kerberos ๊ฐ์ ์ธ์ฆ ์์คํ
์ด ์์ง๋ง, ์ค์ ์ด ๋ณต์กํ๊ณ ์ ์ง ๋น์ฉ์ด ํฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
์ถ๊ฐ ๋ณด์ ๊ณ์ธต(Sentry, Ranger ๋ฑ)์ ๋์
ํด์ผ ์ค์ง์ ์ธ ๋ฐ์ดํฐ ๋ณดํธ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ ์ด์ ๋ณต์ก๋๋ฅผ ๋์ด๋ ์์ธ์ด ๋ฉ๋๋ค.
โ
3. ์ค์๊ฐ ์ฒ๋ฆฌ ๋ฏธ์ง์
Hadoop์ ํต์ฌ ์ฒ๋ฆฌ ๋ชจ๋ธ์ธ MapReduce๋ ๋ฐฐ์น ์ฒ๋ฆฌ ๊ธฐ๋ฐ์
๋๋ค.
์ด ๋ฐฉ์์ ๋์ฉ๋ ๋ก๊ทธ ๋ถ์ ๋ฑ์๋ ํจ๊ณผ์ ์ด์ง๋ง, ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ๋ถ์ ํฉํฉ๋๋ค.
๊ทธ๋์ Spark, Flink ๊ฐ์ ๋ณ๋์ ์ค์๊ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ๊ฐ ์ด๋ฅผ ๋ณด์ํฉ๋๋ค.
โ
4. ์์ ํ์ผ ์ฒ๋ฆฌ ๋นํจ์จ
Hadoop์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ต์ ํ๋์ด ์์ต๋๋ค.
๊ฐ ํ์ผ๋ง๋ค ๋ฉํ๋ฐ์ดํฐ๊ฐ NameNode์ ์ ์ฅ๋๋ฉฐ, ํ์ผ ์๊ฐ ๋ง์์ง์๋ก NameNode ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ธ์ฆํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ํ์ผ๋ค์ ๊ฐฏ์๊ฐ ๋์ด๋๋ฉด ์๋ต ์ง์ฐ ๋ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Hadoop Archive ๋ฑ์ ์ ๊ทผ์ด ํ์ํฉ๋๋ค.
โ ์ง๋ฌธ: Hadoop์์ Distributed Cache์ ๋ชฉ์ ์ ๋ฌด์์ธ๊ฐ์?
Hadoop์ ๋ถ์ฐ ์บ์(Distributed Cache)๋ MapReduce ์์
์คํ ์ ๋ชจ๋ ๋
ธ๋์ ํ์ํ ์ฝ๊ธฐ ์ ์ฉ ํ์ผ(์: JAR ํ์ผ, ์ค์ ํ์ผ, ์ฐธ์กฐ์ฉ ์์ ๋ฐ์ดํฐ ํ์ผ ๋ฑ)์ ๋ฏธ๋ฆฌ ๋ก์ปฌ์ ๋ฐฐํฌํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ๋ฅ์
๋๋ค.
HDFS์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฝ๋ ๋์ , ์์
์์ ์ ๋
ธ๋ ๋ก์ปฌ ๋์คํฌ์ ์บ์๋์ด ํ์ผ์ ๋ฐ๋ณต ๋ค์ด๋ก๋ํ์ง ์๋๋ก ๋ฐฉ์งํ๊ณ ,
์์ ์ฐธ์กฐ ํ์ผ์ ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์์ด ์ฒ๋ฆฌ ์๋๊ฐ ๊ฐ์ ๋ฉ๋๋ค.
๋ํ Mapper/Reducer๊ฐ ๋์ผํ ์ฐธ์กฐ ํ์ผ์ ํ์ฉ ํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, MapReduce ์์
40๊ฐ๊ฐ ์๊ณ , ๊ฐ ์์
์ด ๋์ผํ ์์ ์ฐธ์กฐ ํ์ผ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฝ์ด์ผ ํ๋ค๋ฉด, ์ด ํ์ผ์ด HDFS์๋ง ์กด์ฌํ ๊ฒฝ์ฐ ๋งค๋ฒ ๋คํธ์ํฌ I/O๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ง๋ง ๋ถ์ฐ ์บ์์ ๋ฑ๋กํ๋ฉด ํด๋น ํ์ผ์ด ๊ฐ ๋
ธ๋ ๋ก์ปฌ ๋์คํฌ์ ๋ณต์ฌ๋์ด, ๋ชจ๋ ์์
์ด ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค.
โ ์ง๋ฌธ: Hadoop์ด ์คํํ ์ ์๋ ์ธ ๊ฐ์ง ๋ชจ๋๋?
Hadoop์ ์ฌ์ฉํ๋ ๋ชฉ์ ๊ณผ ํ๊ฒฝ์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ์คํ ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์คํ ๋ฐฉ์์ ๋ก์ปฌ ๋ชจ๋(๋๋ ๋
๋ฆฝํ ๋ชจ๋)์
๋๋ค. ์ด ๋ชจ๋๋ Hadoop์ด ๋จ์ผ Java ํ๋ก์ธ์ค๋ก ์คํ๋๋ฉฐ, HDFS ๋์ ๋ก์ปฌ ํ์ผ ์์คํ
์ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ ์ค์ ๊ทธ๋๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ core-site.xml
, hdfs-site.xml
, mapred-site.xml
๊ฐ์ ์ค์ ํ์ผ์ ๋ฐ๋ก ๊ตฌ์ฑํ ํ์๊ฐ ์์ต๋๋ค.
๋ํ ๋ง์คํฐ๋ ์ฌ๋ ์ด๋ธ ๋
ธ๋๋ฅผ ์ ์ํ์ง ์์๋ ๋๋ฉฐ, ๋๋ฒ๊น
์ฉ๋๋ก ๊ฐ์ฅ ์ ์ฉํ๊ณ ๋น ๋ฅด๊ฒ ์คํ๋๋ ๋ชจ๋์
๋๋ค.
๋ ๋ฒ์งธ๋ ์์ฌ ๋ถ์ฐ ๋ชจ๋(Pseudo-Distributed Mode)์
๋๋ค.
์ด ๋ชจ๋์์๋ ๊ฐ Hadoop ๋ฐ๋ชฌ(NameNode, DataNode, ResourceManager, NodeManager ๋ฑ)์ด ๊ฐ๊ฐ ๋ณ๋์ Java ํ๋ก์ธ์ค๋ก ์คํ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํด๋ฌ์คํฐ๊ฐ ์๋ ๋จ์ผ ๋จธ์ ์์ ๋ถ์ฐ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์
ํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ค์ ํ์ผ(core-site.xml, hdfs-site.xml, mapred-site.xml)์ ์ผ๋ถ ์์ ํด์ผ ํ๋ฉฐ, ์ค์ ๋ถ์ฐ ํ๊ฒฝ๊ณผ ์ ์ฌํ ์กฐ๊ฑด์์ ํ
์คํธํ๊ฑฐ๋ ๋๋ฒ๊น
์ ์ํํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
์
๋ ฅ ๋ฐ ์ถ๋ ฅ ๊ฒฝ๋ก๋ก๋ HDFS๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์์ ๋ถ์ฐ ๋ชจ๋(Fully-Distributed Mode)๋ Hadoop์ด ์ค์ ์ด์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๋ฐฐํฌ ๋ฐฉ์์
๋๋ค.
์ฌ๋ฌ ๋์ ๋จธ์ ์ด ํ๋์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ฉฐ, ํด๋ฌ์คํฐ ๋ด์์ ํน์ ๋
ธ๋๋ ๋ง์คํฐ ์ญํ (NameNode, ResourceManager)์, ๋๋จธ์ง ๋
ธ๋๋ ์ฌ๋ ์ด๋ธ ์ญํ (DataNode, NodeManager)์ ์ํํฉ๋๋ค.
์ด ๋ชจ๋๋ ํ์ฅ์ฑ, ์ฅ์ ๋ณต๊ตฌ, ๋ณด์ ๋ฑ ๋ค์ํ ์ํฐํ๋ผ์ด์ฆ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํฌ ์ ์๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๋ชจ๋ ๊ตฌ์ฑ ํ์ผ๊ณผ ํ๊ฒฝ ๋ณ์๋ฅผ ์ธ๋ฐํ๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค.
์์ ๋ถ์ฐ ๋ชจ๋๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ ๋ ์ ํฉํ ๋ฐฉ์์
๋๋ค.
โ ์ง๋ฌธ: ๋ถ์ฐ ์บ์์ ์๋ ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ์?
ํจ์ ์ง๋ฌธ์
๋๋ค.
๋ถ์ฐ ์บ์๋ Hadoop์์ ์์
์คํ ์ ์ ๋ชจ๋ ๋
ธ๋์ ๋์ผํ ํ์ผ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด๋๋ ๊ธฐ๋ฅ์
๋๋ค. ์ด๋ ๋ณต์ฌ๋ ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ(read-only) ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์คํ ์ค์๋ ๋ณ๊ฒฝํ๊ฑฐ๋ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์ฆ, ์ด๋ค ๋
ธ๋์์ ๋ถ์ฐ ์บ์์ ์๋ ํ์ผ์ ์์ ํ๋๋ผ๋, ๋ค๋ฅธ ๋
ธ๋์ ์บ์์๋ ์ ํ ๋ฐ์๋์ง ์์ต๋๋ค. ๊ฐ ๋
ธ๋๊ฐ ๊ฐ์ง๊ณ ์๋ ํ์ผ์ ์์
์ด ์์๋ ๋์ ์ํ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
โ ์ง๋ฌธ: Hadoop์์ Data Locality์ด๋ ๋ฌด์์ธ๊ฐ์?
Hadoop์์ ๋ฐ์ดํฐ ์ง์ญ์ฑ์ด๋, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ค๋ฅธ ์์น๋ก ์ฎ๊ธฐ์ง ์๊ณ , ๊ณ์ฐ ์์
(Task)์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ก ์ด๋์ํค๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ํ๊ฒฝ์์ ๋คํธ์ํฌ ์ ์ก ๋น์ฉ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํ ํต์ฌ ๊ฐ๋
์
๋๋ค.
๋น
๋ฐ์ดํฐ ํ๊ฒฝ์์๋ ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ์ ์์ด ๋งค์ฐ ๋ฐฉ๋ํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋น์ฉ์ด ์๋นํ ํฝ๋๋ค. ๋ฐ๋ผ์ Hadoop์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํค๋ ๋์ , ๊ณ์ฐ์ ๋ฐ์ดํฐ๊ฐ ์์นํ ์๋ฒ(๋ฐ์ดํฐ ๋
ธ๋)์์ ์ํํจ์ผ๋ก์จ ์ ์ฒด ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ด๊ณ ์์คํ
ํจ์จ์ ๋์
๋๋ค.
Hadoop์ ์์
์ค์ผ์ค๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ ์์ ๊ท์น์ ๋ฐ๋ผ ์์
์ ์ค์ผ์ค๋งํฉ๋๋ค
- ๋ก์ปฌ(local): ๋จผ์ , ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ฐ์ ๋ ธ๋์์ ์์ ์ ์คํํ ์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ์ด์์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
- ๋(local rack): ๋ง์ฝ ํด๋น ๋ ธ๋์ ์์ ์ ์คํํ ์ ์๋ค๋ฉด, ๊ฐ์ ๋(Rack) ๋ด์ ์๋ ๋ค๋ฅธ ๋ ธ๋์์ ์คํ์ ์๋ํฉ๋๋ค. ๊ฐ์ ๋์ ๋คํธ์ํฌ ์ง์ฐ์ด ์ ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์๊ฒฉ(other rack): ์์ ๋ฐฉ๋ฒ๋ค์ด ๋ชจ๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋์ ์์นํ ๋ณต์ ๋ณธ์ด ์ ์ฅ๋ ๋ ธ๋์์ ์์ ์ ์คํํฉ๋๋ค.
์๋ฅผ๋ค๋ฉด, ์ด๋ค ํ์ฌ์์ ๊ณ ๊ฐ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด Hadoop ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ก๊ทธ ๋ฐ์ดํฐ๋ logs.csv๋ผ๋ ์ด๋ฆ์ผ๋ก HDFS์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์ด 300GB ํฌ๊ธฐ๋ก ์ธ ๋
ธ๋์ ๋ถ์ฐ ์ ์ฅ๋์ด ์์ต๋๋ค.
Node1์๋ logs.csv์ ๋ธ๋ก 1์ด ์ ์ฅ๋์ด ์๊ณ , Node2์๋ ๋ธ๋ก 2, Node3์๋ ๋ธ๋ก 3์ด ์ ์ฅ๋์ด ์์ต๋๋ค. ๊ฐ ๋ธ๋ก์ ๋ณต์ (replication factor = 3) ๋์ด, ์ธ ๋
ธ๋ ์ค ๋ ๊ณณ์ ์ถ๊ฐ๋ก ๋ณต์ฌ๋ณธ์ด ์กด์ฌํฉ๋๋ค.
Hadoop์ ๋จผ์ ๊ฐ ๋ธ๋ก์ ์ ์ฅํ๊ณ ์๋ ๋
ธ๋์์ ํด๋น ๋ธ๋ก์ ์ฒ๋ฆฌํ๋ ์์
์ ์คํํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Block 1์ ์ฒ๋ฆฌํ๋ ์์
์ ์ฐ์ Node1์์ ์คํ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ ๋์คํฌ์์ ๋ฐ๋ก ์ฝํ๋ฏ๋ก ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋ง์ฝ Node1์ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํด์ ์์
์ ์คํํ ์ ์๋ค๋ฉด, Hadoop์ Block 1์ ๋ณต์ ๋ณธ์ด ์๋ ๋ค๋ฅธ ๋
ธ๋์์ ์คํ์ ์๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Block 1์ ๋ณต์ ๋ณธ์ด Node2์๋ ์๋ค๋ฉด, Hadoop์ Node2์์ ์์
์ ์คํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ๋ก์ปฌ ๋์คํฌ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ฑ๋ฅ์ด ์ข์ต๋๋ค.
๋ง์ฝ Block 1์ ๊ฐ์ง ์ด๋ค ๋
ธ๋์์๋ ์์
์ ์คํํ ์ ์๋ค๋ฉด, Hadoop์ ๊ฐ์ ๋(rack) ๋ด์ ๋ค๋ฅธ ๋
ธ๋์์ ์์
์ ์คํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๋ฌ๋์ง๋ง, ๋ ๋ด๋ถ ํต์ ์ ์๋์ ์ผ๋ก ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ค์ด ํฌ์ง ์์ต๋๋ค.
๊ฐ์ฅ ๋์ ๊ฒฝ์ฐ๋, ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋
ธ๋๊ฐ ๋ชจ๋ ๋ฐ์๊ณ , ๋ค๋ฅธ ๋์ ์๋ ๋
ธ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ๋ฐ์์์ผ ํ ๋์
๋๋ค. ์ด ๊ฒฝ์ฐ๋ ๋คํธ์ํฌ ๋ณ๋ชฉ์ด ๋ฐ์ํ ์ ์๊ณ , ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง๋๋ค.
โ ์ง๋ฌธ: MapReduce๊ฐ ๊ถ์ฅ๋์ง ์๋ ๊ฒฝ์ฐ๋?
๋ฐ๋ณต ์ฒ๋ฆฌ ์์
์๋ MapReduce ๊ฐ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
MapReduce๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋ฐฉ์์
๋๋ค. ํ์ง๋ง ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ์์
์๋ ์ ๋ง์ง ์์ต๋๋ค.
MapReduce๋ ์์
ํ๋๊ฐ ๋๋ ๋๋ง๋ค ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ HDFS ๊ฐ์ ๋์คํฌ์ ์ ์ฅํ๊ณ , ๋ค์ ์์
์ ๊ทธ๊ฒ์ ๋ค์ ๋์คํฌ์์ ์ฝ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ๋์คํฌ ์
์ถ๋ ฅ์ ๋คํธ์ํฌ๋ณด๋ค๋ ํจ์ฌ ๋๋ฆฌ๊ณ , CPU๋ ๋ฉ๋ชจ๋ฆฌ์ ๋นํด์๋ ๋น๊ตํ ์ ์์ ์ ๋๋ก ๋๋ฆฝ๋๋ค. ์ด๋ฐ ๊ตฌ์กฐ ๋๋ฌธ์, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ ์ฝ๊ณ ์ฒ๋ฆฌํด์ผ ํ๋ ์์
์ ๋งค๋ฒ ๋์คํฌ I/O ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ๋งค์ฐ ๋นํจ์จ์ ์
๋๋ค.
โ ์ง๋ฌธ: NameNode ๋ ์ด๋ป๊ฒ DataNode ์ ์ฅ์ ๋ฅผ ํ์ธํ๋๊ฐ?
๋ค์๋
ธ๋๋ ํด๋ฌ์คํฐ ๋ด ๊ฐ ๋ฐ์ดํฐ๋
ธ๋๋ก๋ถํฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํํธ๋นํธ(์ ํธ)๋ฅผ ์์ ํ์ฌ ํด๋น ๋
ธ๋๊ฐ ์ ์์ ์ผ๋ก ์๋ ์ค์ธ์ง ํ๋จํฉ๋๋ค. ๋ง์ฝ ํน์ ๋ฐ์ดํฐ๋
ธ๋๊ฐ ํํธ๋นํธ๋ฅผ ์ผ์ ์๊ฐ ๋์ ๋ณด๋ด์ง ์์ผ๋ฉด, ๋ค์๋
ธ๋๋ ํด๋น ๋
ธ๋๋ฅผ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ํ๋ก ๊ฐ์ฃผํฉ๋๋ค.
๋ํ ๋ธ๋ก ๋ณด๊ณ (Block Report)๋ฅผ ํตํด ๊ฐ ๋ฐ์ดํฐ๋
ธ๋๊ฐ ๋ณด์ ํ๊ณ ์๋ ๋ธ๋ก ์ ๋ณด๋ฅผ ํ์
ํ๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋
ธ๋์ ๋ชจ๋ ๋ธ๋ก ๋ชฉ๋ก์ด ๋ค์๋
ธ๋์ ์ ์ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํํธ๋นํธ๋ฅผ ๋ณด๋ด์ง ๋ชปํ๋ ๋
ธ๋๋ ๋ธ๋ก ๋ณต์ ๋ฑ์ ๊ณผ์ ์ ํตํด ์๋์ผ๋ก ๋์ฒด๋๊ฑฐ๋ ๋ณต๊ตฌ๋ฉ๋๋ค.
โ ์ง๋ฌธ: NameNode ๊ฐ ์ฌ์คํ ๋๋ ๋จ๊ณ๋ฅผ ์ค๋ช ํ์ธ์.
๋ค์๋
ธ๋ ๋ณต๊ตฌ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
๋จผ์ ํ์ผ ์์คํ
๋ฉํ๋ฐ์ดํฐ ๋ณต์ ๋ณธ(FSImage) ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ค์๋
ธ๋๋ฅผ ์์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณต์ ๋ณธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ ๋ค, ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋
ธ๋๊ฐ ์๋ก์ด ๋ค์๋
ธ๋๋ฅผ ์น์ธํ๋๋ก ํฉ๋๋ค.
์๋ก์ด ๋ค์๋
ธ๋๋ ๋ง์ง๋ง ์ฒดํฌํฌ์ธํธ ๊ธฐ์ค์ผ๋ก FSImage์ EditLog๋ฅผ ํตํด ์ํ๋ฅผ ๋ณต์ํ๋ฉฐ, ์ดํ ๋ฐ์ดํฐ๋
ธ๋๋ก๋ถํฐ ๋ธ๋ก ์ ๋ณด๋ฅผ ์์ ํ์ฌ ํด๋ฌ์คํฐ ์ด์์ ์ฌ๊ฐํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ํตํด ํด๋ผ์ด์ธํธ ์๋น์ค๊ฐ ์ ์์ ์ผ๋ก ์ฌ์์๋ฉ๋๋ค.
โ ์ง๋ฌธ: Mapreduce ์์ Combiner ๋?
์ปด๋ฐ์ด๋๋ MapReduce ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์์ ๋งต ๋จ๊ณ์ ๋ฆฌ๋์ค ๋จ๊ณ ์ฌ์ด์ ์์นํ๋ ์ ํ์ ๊ตฌ์ฑ ์์๋ก, โ๋ฏธ๋ ๋ฆฌ๋์(mini reducer)โ ์ญํ ์ ํฉ๋๋ค. ๋งตํผ ๋
ธ๋์์ ์์ฑ๋ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ๋์๋ก ์ ์กํ๊ธฐ ์ ์ ๋ก์ปฌ์์ ๋ถ๋ถ ์ง๊ณ๋ฅผ ์ํํ์ฌ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์ญํ ์ ํฉ๋๋ค.
์ปด๋ฐ์ด๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฆฌ๋์๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ ์์ด ํฌ๊ฒ ๊ฐ์ํ๊ณ , ์ด์ ๋ฐ๋ผ ๋คํธ์ํฌ I/O๊ฐ ์ค์ด๋ค์ด ์ ์ฒด MapReduce ์์
์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋จ์ด ์ ์ธ๊ธฐ(Word Count) ์์
์์๋ ๊ฐ ๋งตํผ๊ฐ ์ฒ๋ฆฌํ ๋จ์ด ์ถํ ๋น๋๋ฅผ ๋จผ์ ์ปด๋ฐ์ด๋์์ ์ง์ญ์ ์ผ๋ก ํฉ์ฐํด ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ค์ธ ํ ๋ฆฌ๋์๋ก ์ ๋ฌํจ์ผ๋ก์จ ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์
๋๋ค.
์์ฝํ์๋ฉด, ์ปด๋ฐ์ด๋๋ ๋คํธ์ํฌ ํธ๋ํฝ ๊ฐ์ ๋ฐ ๋ฆฌ๋์ ๋ถํ ๋ถ์ฐ์ ํตํด ๋ถ์ฐ ์ฒ๋ฆฌ์ ํจ์จ์ฑ์ ๋์ด๋ ์ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์
๋๋ค.
๐ 5. ์ฌ๋ผ์ง๋ ํ๋ก, ๊ทธ๋ฌ๋ ํ๋ก์ ์์์ผ ํ๋ ์ด์
ํ๋ก์ ๋ ์ด์ ๋น ๋ฐ์ดํฐ ์ํ๊ณ์ ์ค์ฌ์ ์์ง ์์ง๋ง, ๊ทธ ๊ทผ๊ฐ์ ์๋ ์ํคํ ์ฒ์ ์ฌ๊ณ ๋ฐฉ์๊ณผ ๊ธฐ์ ์๋ฆฌ๋ ์ฌ์ ํ ์ ํจํฉ๋๋ค. MapReduce, HDFS, YARN์ ๋ถ์ฐ ์์คํ ์ ์ค๊ณ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ณธ์ง์ ์ดํดํ๋ ๋ฐ ํ์์ ์ธ ๊ฐ๋ ์ด๋ฉฐ, ์ค๋๋ ์ Spark, Flink, Iceberg, Delta Lake ๊ฐ์ ์ต์ ๊ธฐ์ ๋ค๋ ๊ทธ ์ฐ์ฅ์ ์์ ์กด์ฌํฉ๋๋ค.
์ฆ, ํ๋ก์ โ๊ณผ๊ฑฐ์ ๊ธฐ์ โ์ด ์๋๋ผ โํ์ฌ๋ฅผ ์ค๋ช ํ๋ ๊ธฐ์ ์ ๋ฌธ๋ฒโ์ ๋๋ค. ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ๋ซํผ์ผ๋ก ์ ํ๋๋ ์ง๊ธ ์ด ์์ ์์๋, ํ๋ก์ ๊ตฌ์กฐ์ ์ฒ ํ์ ์ดํดํ ๊ฐ๋ฐ์๋ ๊ธฐ์ ๋ณํ์ ๋์ฑ ์ ์ฐํ๊ฒ ๋์ํ ์ ์์ต๋๋ค.
ํ๋ก์ ๊ณต๋ถํ๋ค๋ ๊ฒ์ ๋จ์ํ ์ค๋๋ ๊ธฐ์ ์ ์ตํ๋ ๊ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ ์์ง๋์ด๋ก์์ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ง๊ณ , ์๋ก์ด ๊ธฐ์ ๋ค์ ๋ ๊น์ด ์๊ฒ ์ดํดํ๊ธฐ ์ํ ์ค๋น์ ๋๋ค. ๊ฒฐ๊ตญ ์ฌ๋ผ์ง๋ ๊ฒ์ ์ด๋ฆ์ผ ๋ฟ, ๊ทธ ๋ฟ๋ฆฌ๋ ์ง๊ธ๋ ์ด์ ์๋ค๊ณ ํ ์ ์๊ฒ ์ต๋๋ค.
โ๏ธ ๊ฒฐ๋ก
ํ๋ก์ ์ด๋ก ์ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถํ ๊ฒฐ๊ณผ, ํ๋ก์ ์ค๋๋ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ์ ์ ์ดํดํ๋ ๋ฐ ์ฌ์ ํ ์ค์ํ โ๊ธฐ์ ์ ๋ฌธ๋ฒโ์์ ์ ์ ์์์ต๋๋ค.
์ ์ฐจ ์ฌ๋๋ค์ ๊ธฐ์ต์์ ์ํ์ง๊ณ ์์ง๋ง, ํ๋ก์ด ๋จ๊ธด ๋ถ์ฐ ์ฒ๋ฆฌ์ ์ฒ ํ๊ณผ ๊ตฌ์กฐ์ ์ฌ๊ณ ๋ฐฉ์์ Spark, Flink, Iceberg ๊ฐ์ ํ๋ ๊ธฐ์ ๋ค ์์ ๊น์ด ๋ น์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์์ง๋์ด๋ก์ ํ๋ก์ ์ดํดํ๋ค๋ ๊ฒ์ ๋จ์ง ์ค๋๋ ๊ธฐ์ ์ ํ์ตํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์ ์ ๋ฟ๋ฆฌ๋ฅผ ๊ฟฐ๋ซ๊ณ ๋ฏธ๋ ๊ธฐ์ ์ ๋ณธ์ง๊น์ง ์ดํดํ๋ ํ์ ๊ธฐ๋ฅด๋ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์ ๊ทธ ์ฒซ๊ฑธ์์ผ๋ก์จ ์ถฉ๋ถํ ์๋ฏธ๊ฐ ์์๋ค๊ณ ๋ด ๋๋ค.
๋ค์ ์๊ฐ์๋ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ธ HDFS์ YARN์ ์ง์ ์ค์ตํด๋ณด๊ณ , ํ๋ก ์์ฝ์์คํ ์ค์์๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ Hive๊น์ง ๊ฐ๋จํ ์ค์ตํด๋ณผ ์์ ์ ๋๋ค.
์ด๋ก ์ผ๋ก ๋ฐฐ์ด ๊ฐ๋ ๋ค์ด ์ค์ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ๋์ฉ ํ์ธํด๋ณด๋ฉฐ, ํ๋ก ์ํคํ ์ฒ์ ๋ํ ์ดํด๋ฅผ ๋ ๊น๊ฒ ๋ค์ ธ๋ณด๊ฒ ์ต๋๋ค.
๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ
๐ 2. ํ์ผํฌ๋งท orc, parquet, avro.. ๋ณ ํ ์ด๋ธ ์์ฑ๊ณผ ์์ถ๋ฐฉ๋ฒ