Daehong Blog
โ ๊ฐ์ธ ๋ฉ๋ชจ์ฅ
Flink Table Maintenance
๐ข ์ฌ๋ด ์ด์ ํด๊ฒฐ
๐จ๐ปโ๐ป ์ด๋ ฅ์
๐ป ๊ฐ๋ฐ ์ผ์ง
๐ ๊ฐ์ธ ๊ณต๋ถ
๐ Apache Hadoop
1. ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
2. ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก
3. YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก
4. Map Reduce ๊ธฐ๋ณธ ์ด๋ก ๊ณผ ์ค์ต
5. ํ๋ก ์์ฝ์์คํ ๊ณผ ์ด์ ๋ฐ ๊ด๋ฆฌ
6. ํ๋ก ํด๋ฌ์คํฐ, YARN, ๊ธฐ๋ณธ ์์ฝ์์คํ ์ค์ต
๐๏ธ ์คํ์์ค ๊ธฐ์ฌ
๐ Apache Iceberg
1. Iceberg Flink Catalog v2.0 MiniClusterWithClientResource ์ข ์์ฑ ์ ๊ฑฐ
2. Flink 1.19 ๋ฐ 1.20์ MiniClusterWithClientResource ์ข ์์ฑ ์ ๊ฑฐ Backport
๐ Spring Kafka
1. Kafka RetryTopic ๊ด๋ จ ๊ธฐ๋ณธ Template Bean ์ด๋ฆ ๋ณ๊ฒฝ
Home
Contact
Copyright ยฉ 2024 |
Daehong
Home
>
๐ ๊ฐ์ธ ๊ณต๋ถ
> ๐ Apache Hadoop
Now Loading ...
๐ Apache Hadoop
๐ ํ๋ก ํด๋ฌ์คํฐ, YARN, ๊ธฐ๋ณธ ์์ฝ์์คํ ์ค์ต
์ ๋ฒ ํฌ์คํ ๊น์ง๋ ํ๋ก์ ๊ธฐ๋ณธ๊ณผ YARN, MapReduce ๊ทธ๋ฆฌ๊ณ ์์ฝ์์คํ ๋ฑ์ ํฌ์คํ ํ์์ต๋๋ค. ์ค๋์ ๊ณต๋ถํ ๋ด์ฉ์ ํ ๋๋ก, ํ๋ก์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ ์ค์นํ ๋ด์ฉ์ ํฌ์คํ ํด๋ณด๊ณ , ํ๋ก์ ๊ธฐ๋ณธ ๊ณต๋ถ์ ๋ํ ๋ด์ฉ์ ๋ง๋ฌด๋ฆฌํ๊ณ ์ ํฉ๋๋ค. ์ค๋ ํ๋ก ํฌ์คํ ์ดํ์๋, ํ๋ก์ ์ฌํ์ ์ธ ๋ถ๋ถ๋ค์ ํ๋์ฉ ๋๋ ๊ฐ๋ฉฐ, ์ค๋ฌด์ ์ผ๋ก ๊ฒช์๋ ์ฌ๋ก๋ค์ ์์ฃผ๋ก ์กฐ๊ธ์ฉ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ๐ ์ฐธ๊ณ ๋ก ์ค๋ ์ค์ต์ ์ ๋ง ๊ธฐ๋ณธ์ ์ธ ์ค์ต ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค. ์ค๋ฌด์ ์ผ๋ก ์ฐ์ด๊ฑฐ๋, ์ฌํ๋ ๋ด์ฉ์ ์ถํ ๊ณต๋ถํ์ฌ ์ถ๊ฐ๋ก ์ ๋ฆฌ ํ ์์ ์ ๋๋ค. ๐ ์์ฝ์์คํ ์ค์ต ์ญ์, ๊ธฐ๋ณธ์ ์ธ ๋์ ์ค์ต๋ง ๊ฐ๋จํ๊ฒ ์ง์์ ๊ตฌํํ ๋ถ๋ถ์ ์ ๋ฆฌํ์์ต๋๋ค. ์์ฝ ์์คํ ๋ ์ถํ ๊ณต๋ถํ์ฌ ๋ ์์ธํ๊ฒ ์ ๋ฆฌ ํ ์์ ์ ๋๋ค. ๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ๐ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก ๐ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก ๐ Map Reduce ๊ธฐ๋ณธ ์ด๋ก ๊ณผ ์ค์ต ๐ ํ๋ก ์์ฝ์์คํ ๊ณผ ์ด์ ๋ฐ ๊ด๋ฆฌ โ ๐ 1. ์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ ๐ 1.1. Version JDK 8 Hadoop 3.1.3 Hive 3.1.3 ๐ 1.2. VM & CentOS ์ค์น ๐ 1.3. ๋ฐฉํ๋ฒฝ ๋ฐ ํฌํธ ์ค์ ๐ 1.4. JDK ์ค์น ๋ฐ ํ๊ฒฝ๋ณ์ ์ค์ ๐ 1.5. Hadoop ์ค์น ๋ฐ ํ๊ฒฝ๋ณ์ ์ค์ ๐ 2. ์์ฌ๋ถ์ฐ ๋ชจ๋ ๊ตฌ์ถ ๐ 2.1. xmlํ์ผ ์ค์ ๐ 3. ์์ ๋ถ์ฐ ๋ชจ๋ ๊ตฌ์ถ ๐ 3.1. ๋คํธ์ํฌ ๋ฐ ํธ์คํธ ์ค์ ๐ 3.2. SSH ์ค์ ๐ 3.3. xmlํ์ผ ์ค์ ๐ 3.4. ์ด์ : DataNode Cluster ID ์ถฉ๋ ๋ฌธ์ ํด๊ฒฐ ๐ 4. HA ์์ ๋ถ์ฐ ๋ชจ๋ ๊ตฌ์ถ ๐ 5. Observer NameNode ์ค์ต ๐ 6. Yarn ์ค์ต ๐ 7. ํ๋ก ์์ฝ์์คํ Hive ๊ธฐ๋ณธ ์ค์ต ๐ 7.1. MySQL ์ค์น Cent OS ์ง์ ์ข ๋ฃ๋ก ์ธํ, yum repository ๋ณ๊ฒฝ ๐ 7.2. ๋ฉํ ์คํ ์ด ์ด๊ธฐ ๋ฑ๋ก schematool -dbType mysql -initSchema ๐ 8. ํ๋ก ์์ฝ์์คํ Hbase ๊ธฐ๋ณธ ์ค์ต โ๏ธ ๊ฒฐ๋ก โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-04-15
๐ ํ๋ก ์์ฝ์์คํ ๊ณผ ์ด์ ๋ฐ ๊ด๋ฆฌ
์ ๋ฒ ํฌ์คํ ์์๋, 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. ์ค์ ํ๋ก ๊ด๋ จ ๋ฉด์ ์ง๋ฌธ ์ฌ๋ก ๋ชจ์ โ ์ง๋ฌธ: 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์์ ์์ ์คํ ์ ์ ๋ชจ๋ ๋ ธ๋์ ๋์ผํ ํ์ผ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด๋๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ ๋ณต์ฌ๋ ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ(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 ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค. โ ๐ 5. ์ ์ฐจ ์ฌ๋ผ์ง๋ ํ๋ก, ๊ทธ๋ฌ๋ ํ๋ก์ ์๊ฒ๋ผ๋ ๊ณต๋ถํด์ผ ํ๋ ์ด์ โ โ๏ธ ๊ฒฐ๋ก โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ https://ngela.tistory.com/111
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-04-05
๐ Map Reduce ๊ธฐ๋ณธ ์ด๋ก ๊ณผ ์ค์ต
์ ๋ฒ ํฌ์คํ ์์๋, YARN ์ ๋ํ์ฌ ๊ณต๋ถํ์์ต๋๋ค. ์ด๋ฒ์๋ ํ๋ก์ ํต์ฌ ์์ ์ค ํ๋์ธ Map Reduce ์ ๋ํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ํฌ์คํ ํ๊ฒ ์ต๋๋ค. ๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ๐ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก ๐ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก โ ๐ 1. Map Reduce MapReduce๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ์๋ 2004๋ ๊ตฌ๊ธ์์ ๋ฐํ๋์์ผ๋ฉฐ, Apache Hadoop์ ์ด๋ฅผ ์คํ์์ค ํ๋ ์์ํฌ๋ก ๊ตฌํํ์์ต๋๋ค. Hadoop์ MapReduce๋ ํนํ HDFS์ ํจ๊ป ์ฌ์ฉ๋์ด, ์๋ฐฑ GB์์ ์ PB ๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋์ ์ปดํจํฐ์ ๋๋ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. MapReduce๋ ๋ฐ์ดํฐ๋ฅผ Key-Value ํํ๋ก ๊ฐ๊ณตํ๋ฉฐ, ์ฒ๋ฆฌ ๊ณผ์ ์ ํฌ๊ฒ Map ๋จ๊ณ์ Reduce ๋จ๊ณ๋ก ๋๋ฉ๋๋ค. Map ๋จ๊ณ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ฉฐ, Reduce ๋จ๊ณ์์๋ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์์งํ๊ณ ํตํฉํฉ๋๋ค. ์ด ๊ตฌ์กฐ ๋๋ถ์ ๊ฐ๋ฐ์๋ Map๊ณผ Reduce ํจ์๋ง ์ ์ํ๋ฉด ๋๊ณ , ๋๋จธ์ง ์์ (Job ๋ถํ , Task ๋ฐฐ์ , ์ฅ์ ๋ณต๊ตฌ ๋ฑ)์ Hadoop์ด ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ํ Java๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ์ง๋ง, C++, Python ๋ฑ ๋ค์ํ ์ธ์ด๋ ์ง์๋ฉ๋๋ค (์: Hadoop Streaming ์ฌ์ฉ ์). ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ์ธํ๋ผ ๊ฑฑ์ ์์ด ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์ ์ง์คํ ์ ์์ต๋๋ค. ๐ 2. MapReduce ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ตฌ๋๋ฐฉ์ MapReduce๋ ํฌ๊ฒ ๋ ๊ฐ์ง ํจ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๐ Map Function ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ (key1, value1) ํํ๋ก ๋ฐ์, ์ด๋ฅผ (key2, value2) ํํ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ก ๋ณํํฉ๋๋ค. ex : (key1, value1) โ (key2, value2) ๐ Reduce Function Map ๋จ๊ณ์์ ์์ฑ๋ ์ค๊ฐ ๊ฒฐ๊ณผ๋ค์ key ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ ๋ค, ๊ฐ์ key๋ฅผ ๊ฐ๋ ๊ฐ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ ์ต์ข ๊ฒฐ๊ณผ (key3, value3)์ ์์ฑํฉ๋๋ค. ex : (key2, List<value2>) โ (key3, value3) ์ด๋ฌํ ๋ ๋จ๊ณ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ ๋ถ์ฐ ํ๊ฒฝ์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ต์ข ์ ์ผ๋ก ์ง๊ณ ๋ฐ ๊ฐ๊ณต๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ๋ํ MapReduce ์ ๊ตฌ๋ ๋ฐฉ์์ ํฌ๊ฒ ์ธ ๊ฐ์ง์ ๋๋ค. ๐น Local ๋จ์ผ JVM ์์ ์ ์ฒด Job ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก, ํ ์คํธ ์ฉ๋ ์ ๋๋ก๋ง ์ฐ์ด์ง ์ค์ ๋ก๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ด์ํ์ง ์์ต๋๋ค. ๐น Classic Hadoop 1.0 ๋ฒ์ ๋๊น์ง ์ ์งํ๋ Map Reduce ๋ถ์ฐ ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ฉฐ, 1๊ฐ์ Job Tracker ์ ์ฌ๋ฌ๊ฐ์ Task Tracker ๋ฅผ ์ฌ์ฉํ๋ ์ด๊ธฐ Map Reduce ๋ฐฉ์์ ๋๋ค. ๐น YARN Hadoop 2.0 YARN ๋์ ์ดํ์ Map Reduce ๋ฐฉ์์ ๋๋ค. Map Reduce ์ด์ธ์ ์ํฌ๋ก๋๋ ์์ฉ์ด ๊ฐ๋ฅํ ๋ฒ์ ์ ๋๋ค. ์ด๋ฌํ Map Reduce ๋, ๋จ์ํ๊ณ ์ฌ์ฉ์ด ํธ๋ฆฌํ๋ฉฐ, ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ ์คํค๋ง์ ์์กด์ ์ด์ง ์์ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ณ ์๊ณ , ์ ์ฅ ๊ตฌ์กฐ๋ ๋ ๋ฆฝ์ ์ ๋๋ค. ๋ํ ๋ฐ์ดํฐ ๋ณต์ ์ ๊ธฐ๋ฐํ ๋ด๊ตฌ์ฑ๊ณผ ์์ฒด ์ฌ์๋ ๋ก์ง์ ํตํ ๋ด๊ณ ์ฅ์ฑ๋ ํ๋ณดํ๊ณ ์์ผ๋ฉฐ, ํ๋ก์ ํ์ฉํ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋, ๊ณ ์ ๋ ๋จ์ผ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ์ง๊ณ ์๊ณ , Hive ๋ฑ์ด ์์ง๋ง ์ฌ์ ํ DBMS ๋ณด๋ค๋ ๋ถํธํ ์คํค๋ง ์ง์, ๊ทธ๋ฆฌ๊ณ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํ์ง ์๊ณ , ๊ธฐ์ ์ง์์ด ์ด๋ ต๋ค๋ ๋จ์ ๋ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ผ ์ง๊ธ๋ถํฐ, MapReduce ์ ๋ํด ์ข ๋ ์์ธํ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ๐ 3. Map Reduce 1.0 & ๊ธฐ๋ณธ ํํธ๋ฅผ 1.0 ๊ณผ 2.0 ์ผ๋ก ๋๋๊ธฐ๋ ํ์์ง๋ง, Map Reduce 1.0 ๊ณผ 2.0 ์ด ํฌ๊ฒ ์ฐจ์ด๊ฐ ์์ง๋ ์์ต๋๋ค. ์ด๋์ ๋ ๋จ์ ์ ๋ณด์ํด์ฃผ๊ณ , YARN ์ ํตํด ๊ตฌ๋ํ๋๊ฐ ์ํ๋๊ฑฐ ์ ๋๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ํ์ฌ 1.2 ํํธ์์๋ 1.0๊ณผ ํ์ฌ Map Reduce ์ ๊ธฐ๋ณธ์ด ๋๋ ๋ถ๋ถ์ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ์์ต๋๋ค. ๋ค์ ํํธ์ธ MapReduce 2.0 ์์๋ ๋ณ๋์ฌํญ๋ง ์ ๋ฆฌํ ์์ ์ ๋๋ค. ๐ 3.1. Hadoop 1.x์์์ MapReduce ๊ตฌ์ฑ ์์ Hadoop 1.x์์๋ ํด๋์ MapReduce ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. JobTracker (1๊ฐ): ํด๋ฌ์คํฐ ์ ์ฒด์์ Job์ ์คํ์ ์ด๊ดํ๋ ๋ง์คํฐ ์ญํ ์ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ก๋ถํฐ Job์ ๋ฐ์ Task๋ก ๋๋๊ณ , ์ ์ ํ TaskTracker์๊ฒ ๋ถ๋ฐฐํฉ๋๋ค. TaskTracker (์ฌ๋ฌ ๊ฐ): ๊ฐ๊ฐ์ ๋ ธ๋์ ์กด์ฌํ๋ฉฐ, JobTracker๋ก๋ถํฐ Task๋ฅผ ํ ๋น๋ฐ์ ์ค์ ๋ก Map ๋๋ Reduce ์์ ์ ์ํํฉ๋๋ค. Client: ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํ MapReduce Job์ hadoop jar ๋ช ๋ น์ด๋ก ์คํํ๋ฉด, ์ด Job์ ์ ์ถํ๋ ์ฃผ์ฒด๊ฐ ๋ฉ๋๋ค. HDFS: Job ์คํ ์ค ์ฌ์ฉ๋๋ ์ ๋ ฅ ํ์ผ, ์ค๊ฐ ํ์ผ, ์ถ๋ ฅ ํ์ผ ๋ฑ์ ๋ชจ๋ HDFS ์์ ์ ์ฅ๋ฉ๋๋ค. Mapper/Reducer ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ HDFS๋ฅผ ํตํด ์ํ๋ฉ๋๋ค. ๐ 3.2. MapReduce๋ ์ธ์ ๋์ํ๋๊ฐ? MapReduce๋ ๋จ์ํ ํ์ผ ์ ๋ก๋, ๋ค์ด๋ก๋, ์ญ์ ์ ๊ฐ์ ๋ช ๋ น์ด์์๋ ๋์ํ์ง ์์ต๋๋ค. ์ฆ, hdfs dfs -put, -get, -ls, -rm ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋๋ MapReduce๊ฐ ๊ด์ฌํ์ง ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ HDFS ํด๋ผ์ด์ธํธ๊ฐ ์ง์ NameNode์ DataNode์ ์์ฒญ์ ๋ณด๋ด ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ MapReduce ์์ง์ด ์ค์ ๋ก Job์ ์คํํฉ๋๋ค. hadoop jar๋ก ์คํํ MapReduce ํ๋ก๊ทธ๋จ Hive, Pig, Oozie ๋ฑ์์ MapReduce ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ์คํ Sqoop import/export ์์ ๊ธฐํ ์ฌ์ฉ์ ์ ์ ๋ถ์ Job ์ด์ฒ๋ผ MapReduce๋ โ๋ถ์ฐ ์ฒ๋ฆฌ Jobโ์ด ํ์ํ ๊ฒฝ์ฐ์๋ง ์คํ๋๋ฉฐ, ์ฝ๊ฒ ํ์ด๋ณด๋ฉด Hadoop ์์ ์์ฒด์์ ๋์ํ๋ ค๋ฉด MapReduce ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ฝ๋ฉ์ด ํ์ํ๊ณ , Hive ์ ๊ฐ์ ์์ง์์๋ Hive์์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ฉด, Hive๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด ์ฟผ๋ฆฌ๋ฅผ MapReduce ์์ (๋๋ Spark, Tez ๊ฐ์ ๋ค๋ฅธ ์คํ ์์ง)์ผ๋ก ๋ณํํด ์ฃผ๊ฒ ๋ฉ๋๋ค. ( Hive ์ค์ ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ MapReduce๊ฐ ๊ธฐ๋ณธ ์คํ ์์ง์ด๊ฑฐ๋ ๋ค๋ฅธ ์์ง์ผ ์ ์์ต๋๋ค. ) ๐ 3.3. MapReduce Task ๊ตฌ๋ ์ ์ฐจ ์ถ์ฒ : Map Reduce 1.0 ์์ธ ๊ตฌ๋ ์ ์ฐจ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ์์ MapReduce ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, ๋ด๋ถ์ ์ผ๋ก JobClient๊ฐ ์์ฑ๋๊ณ ์คํ๋ฉ๋๋ค. Job ID ๋ฐ๊ธ ์์ฒญ JobClient๋ ํด๋ฌ์คํฐ์ JobTracker์ ์ฐ๊ฒฐํ์ฌ ์๋ก์ด Job ID๋ฅผ ์์ฒญํฉ๋๋ค. Job ๋ฆฌ์์ค HDFS ์ ๋ก๋ ์คํ์ ํ์ํ ์ฝ๋, ์ค์ ํ์ผ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ HDFS์ ์ ๋ก๋ํฉ๋๋ค. JobTracker์ Job ์ ์ถ JobClient๋ JobTracker์๊ฒ Job์ ์ ์ถํ๋ฉฐ, ์ดํ ์์ ์ค์ผ์ค๋ง์ JobTracker๊ฐ ๊ด๋ฆฌํฉ๋๋ค. Job ์ด๊ธฐํ JobTracker๋ ์ ์ถ๋ Job์ ๋ํ ์ด๊ธฐํ ์์ ์ ์ํํฉ๋๋ค (๋ฉํ์ ๋ณด ๊ตฌ์ฑ, ๋๋ ํฐ๋ฆฌ ์์ฑ ๋ฑ). InputSplit ๊ฒ์ HDFS์์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ๋๋ ํ, ๊ฐ ๋ธ๋ก์ ์์น ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก InputSplit์ ๊ตฌ์ฑํฉ๋๋ค. InputSplits ๋, ๋ฌผ๋ฆฌ์ Block ๋ค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃจํ ํ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. InputSplit ์ Mapper ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ๋ฐฉ์์ ์ ๊ณตํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ์์น์ ์ฝ์ด ๋ค์ด๋ ๊ธธ์ด๋ฅผ ์ ์ํฉ๋๋ค. Task ํ ๋น ์์ฒญ (Heartbeat) TaskTracker๋ ์ฃผ๊ธฐ์ ์ผ๋ก JobTracker์ ํํธ๋นํธ๋ฅผ ๋ณด๋ด๋ฉฐ, ์คํ ๊ฐ๋ฅํ Task๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. Job ๋ฆฌ์์ค ๋ก์ปฌ ๋ณต์ฌ Task๊ฐ ํ ๋น๋๋ฉด, TaskTracker๋ HDFS์์ ํ์ํ Job ๋ฆฌ์์ค๋ฅผ ์์ ์ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค. Child JVM ์คํ TaskTracker๋ ์์ JVM ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ, Map ๋๋ Reduce Task๋ฅผ ์คํํ ์ค๋น๋ฅผ ํฉ๋๋ค. Map ๋๋ Reduce Task ์คํ ํ ๋น๋ฐ์ Task๋ฅผ ์คํํ์ฌ ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(Map ๋๋ Reduce ๋ก์ง)๋ฅผ ์ํํฉ๋๋ค. ๐ฌ ์ฐธ๊ณ : ์ ์ ์ฐจ๋ Hadoop 1.x (MapReduce v1) ๊ธฐ์ค์ ๋๋ค. Hadoop 2.x ์ด์์์๋ YARN์ด ๋์ ๋๋ฉฐ JobTracker/TaskTracker๊ฐ ResourceManager/NodeManager๋ก ๋์ฒด๋ฉ๋๋ค. ๐ 3.4. MapReduce ๋์ ๊ณผ์ MapReduce ๋ ๋ค์ 6๊ฐ์ง ๋์ ๊ณผ์ ์ ๊ฐ์ง๋๋ค. ์ ๋ ฅ ๋ฐ์ดํฐ ๋ถํ (Input Splitting) ๋์ฉ๋ ์ ๋ ฅ ํ์ผ์ ์ฌ๋ฌ ๊ฐ์ Input Split์ผ๋ก ๋๋๋๋ค. ๊ฐ Split์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ ์ต์ ๋จ์์ ๋๋ค. ๋ณดํต HDFS ๋ธ๋ก ํฌ๊ธฐ(์: 128MB)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ฉ๋๋ค. ๋งต(Map) ๋จ๊ณ ๊ฐ Input Split์ ๋ํด Map ํจ์๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋ฉ๋๋ค. Map ํจ์๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํค-๊ฐ ์ (key-value pair)์ผ๋ก ๋ณํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์คํธ ํ์ผ์ ์ค ๋จ์๋ก ์ฝ์ด ๋จ์ด๋ณ๋ก (๋จ์ด, 1) ์์ ๋ง๋ญ๋๋ค. Map ํจ์ ๊ฒฐ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์์ ์ ์ฅ๋ฉ๋๋ค. ์ค๊ฐ ์ ๋ ฌ ๋ฐ ๋ณํฉ (Sort and Merge) Map ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ด๋ถ์์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค. ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ ๋์คํฌ์ ์์ ์ ์ฅ๋๋ฉฐ, ์ฌ๋ฌ Map ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉ(merge)ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ํ์ ์์ ์ธ Shuffle์ ์ํํ๊ฒ ๋ง๋ญ๋๋ค. ์ ํ(Shuffle) ๊ฐ Mapper์์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ Reducer๋ก ์ ์กํฉ๋๋ค. ๋์ผํ ํค๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ์ด ํ๋์ Reducer์ ๋ชจ์ด๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ์ด๋์ํต๋๋ค. ์ด ๊ณผ์ ์ Map๊ณผ Reduce ์์ ์ ์ค๊ฐ ๋จ๊ณ๋ก ๋คํธ์ํฌ I/O๋ฅผ ๋ง์ด ๋ฐ์์ํต๋๋ค. ๋ฆฌ๋์ค(Reduce) ๋จ๊ณ Reducer๋ ์ ๋ฌ๋ฐ์ ํค๋ณ๋ก ๊ทธ๋ฃนํ๋ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ง๊ณ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, (๋จ์ด, [1,1,1,...]) ๊ฐ์ ๋ฐ์ ๋จ์ด ๋ฑ์ฅ ํ์๋ฅผ ํฉ์ฐํฉ๋๋ค. Reduce ํจ์ ๊ฒฐ๊ณผ๋ ์ต์ข ์ถ๋ ฅ(key-value ์)์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ฒฐ๊ณผ ์ ์ฅ (Output) Reduce ์์ ์ ๊ฒฐ๊ณผ๋ HDFS ๊ฐ์ ๋ถ์ฐ ํ์ผ ์์คํ ์ ์ ์ฅ๋ฉ๋๋ค. ์ถ๋ ฅ ํ์ผ์ ์ฌ๋ฌ ํํฐ์ ์ผ๋ก ๋๋์ด ์ ์ฅ๋ ์ ์์ต๋๋ค. ์์ฝํด๋ณด๋ฉด, ์๋ ํ์ฒ๋ผ ๋ณผ ์ ์๊ฒ ์ต๋๋ค. ๋จ๊ณ ์ค๋ช 1. ์ ๋ ฅ ๋ถํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ Split์ผ๋ก ๋๋ 2. ๋งต(Map) ๊ฐ Split์ ๋ํด Map ํจ์ ์คํ 3. ์ ๋ ฌ ๋ฐ ๋ณํฉ Map ๊ฒฐ๊ณผ๋ฅผ ํค๋ณ๋ก ์ ๋ ฌ, ๋ณํฉ 4. ์ ํ(Shuffle) ํค๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ Reducer์ ์ ์ก 5. ๋ฆฌ๋์ค(Reduce) ํค๋ณ๋ก ์ง๊ณ ์์ ์ํ 6. ์ถ๋ ฅ ์ ์ฅ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ฐ ํ์ผ ์์คํ ์ ์ ์ฅ ๐ 3.5. MapReduce ์์ ์ถ์ฒ : Map Reduce ์์ ์ ๋ ฅ ๋ฐ์ดํฐ ๋ถํ (Input Splitting) 100GB์ง๋ฆฌ ํ ์คํธ ํ์ผ์ด ์๋ค๊ณ ํฉ์๋ค. ์ด ํ์ผ์ HDFS์ ์ ์ฅ๋๊ณ , 128MB ํฌ๊ธฐ ๋จ์๋ก ์ชผ๊ฐ์ง๋๋ค. ๊ฐ 128MB ์กฐ๊ฐ ํ๋๊ฐ ํ๋์ Input Split์ด ๋ฉ๋๋ค. ๋งต(Map) ๋จ๊ณ ๊ฐ Input Split์ ๋ณ๋์ Map Task์ ํ ๋น๋์ด ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. Map ํจ์๋ ํ ์คํธ๋ฅผ ์ค ๋จ์๋ก ์ฝ๊ณ , ๊ฐ ์ค์์ ๋จ์ด๋ฅผ ๋ถ๋ฆฌํด (๋จ์ด, 1) ์์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ โAndy and Bobโ์ด ์์ผ๋ฉด (Andy, 1), (and, 1), (Bob, 1) ์ด๋ฐ ์์ ๋๋ค. ์ด๋ ๊ฒ ๋ชจ๋ ๋จ์ด์ ๋ํด 1์ฉ ๋ถ์ฌ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ญ๋๋ค. ์ค๊ฐ ์ ๋ ฌ ๋ฐ ๋ณํฉ (Sort & Merge) ๊ฐ Map Task๊ฐ ๋ง๋ (๋จ์ด, 1) ์๋ค์ ํค(๋จ์ด) ๊ธฐ์ค์ผ๋ก ๋ด๋ถ ์ ๋ ฌ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๊ฐ ์ฐจ๋ฉด ๋์คํฌ์ spill ํ์ฌ ์์ ์ ์ฅ๋๊ณ , ์ฌ๋ฌ ๋ฒ spill๋ ๋ฐ์ดํฐ๋ ํ๋๋ก ๋ณํฉ๋ฉ๋๋ค. ์ด ๊ณผ์ ๋๋ถ์ ํ์ ์์ ์ธ Shuffle์ด ํจ์จ์ ์ผ๋ก ์งํ๋ฉ๋๋ค. ์ ํ(Shuffle) ๊ฐ Map Task๊ฐ ์ ๋ ฌํ ๋จ์ด๋ณ ๋ฐ์ดํฐ๋ฅผ, ๋์ผํ ๋จ์ด๋ฅผ ์ฒ๋ฆฌํ Reduce Task๋ก ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํฉ๋๋ค. ์ฆ, โAndyโ์ ํด๋นํ๋ ๋ชจ๋ (Andy, 1) ๋ฐ์ดํฐ๋ ํน์ Reduce Task๋ก ๋ชจ์ ๋๋ค. ์ด ๋จ๊ณ๋ Map๊ณผ Reduce ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ถ๋ฐฐํ๋ ์ค์ํ ๊ณผ์ ์ ๋๋ค. ๋ฆฌ๋์ค(Reduce) ๋จ๊ณ Reduce Task๋ ํ ๋จ์ด์ ๋ํ ๋ชจ๋ 1๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌ๋ฐ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, (Andy, [1, 1, 1, 1])์ด๋ฉด ์ต์ข ์ ์ผ๋ก (Andy, 4)๊ฐ ๋ฉ๋๋ค. ์ด ๊ณ์ฐ์ ๋ชจ๋ ๋จ์ด์ ๋ํด ์ํํฉ๋๋ค. ๊ฒฐ๊ณผ ์ ์ฅ (Output) ์ต์ข (๋จ์ด, ์ดํ์) ๊ฒฐ๊ณผ๋ค์ HDFS ๊ฐ์ ๋ถ์ฐ ํ์ผ ์์คํ ์ ์ ์ฅ๋ฉ๋๋ค. ๊ฒฐ๊ณผ ํ์ผ๋ค์ ์ฌ๋ฌ ๊ฐ์ ํํฐ์ ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. MapReduce ์ ํด๋น ๊ณผ์ ์ ํตํด, ์๋ฐฑ GB ํ ์คํธ ํ์ผ์์๋ ๋จ์ด๋ณ ๋ฑ์ฅ ํ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ ์์ต๋๋ค. ๐ 3.6. MapReduce ์์ ๊ตฌํ์ ์ํ ์ธํฐํ์ด์ค MapReduce๋ ๋ค์๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค ํ๋ฆ์ ํตํด ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ๋ ฅ๊น์ง ์์ฑํฉ๋๋ค: Input โ Mapper โ Combiner(์ ํ ์ฌํญ) โ Partitioner โ Shuffle/Sort โ Reducer โ Output ๐น Input: TextInputFormat ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ (k1, v1) ํํ๋ก ์ฝ์ด์ค๋ ์ญํ ์ ํฉ๋๋ค. ๋ณดํต k1์ byte offset, v1์ ํ ์คํธ ์ค(String)์ ๋๋ค. ์ ๋ ฅ ํฌ๋งท์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๐น Mapper: (k1, v1) โ (k2, v2) ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ด ๊ตฌํ๋๋ ๋ถ๋ถ์ ๋๋ค. ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ฐฉ์์ผ๋ก (k2, v2) ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ์์๋ฅผ ์๋ ์นด์ดํธ๋ก ๋ค์ด๋ณด๋ฉด, (0, "Hello world") โ ("Hello", 1), ("world", 1) ๊ฐ ๋ฉ๋๋ค. ๐น Combiner (์ ํ ์ฌํญ): (k2, list(v2)) โ (k2, v2') ๋ก์ปฌ์์ ์ค๋ณต๋ key๋ฅผ ๋จผ์ ํฉ์ณ Shuffle ํธ๋ํฝ์ ์ค์ด๋ ์ญํ ์ ํฉ๋๋ค. ์์ ๋ก์ปฌ reduce ์ญํ ์ ํ๋ฉฐ, ๊ฒฐ๊ณผ ์ ํ์ฑ์ ์ํฅ์ ์ฃผ์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์์๋ฅผ ๋ค์ด๋ณด๋ฉด, ("word", [1,1,1]) โ ("word", 3) ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๐น Partitioner: (k2, v2') โ #Reducer ๊ฐ key๋ฅผ ์ด๋ค Reducer์ ๋ณด๋ผ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ hash(k2) % numReducers ๋ฐฉ์์ด๋ฉฐ, ์ฌ์ฉ์ ์ ์๋ ๊ฐ๋ฅํฉ๋๋ค. ๋์ผํ key๋ ํญ์ ๊ฐ์ Reducer๋ก ๊ฐ์ผ ํ๋ฏ๋ก ์ ํฉ์ฑ์ ์ค์ํฉ๋๋ค. ๐น Shuffle/Sort ๊ฐ Mapper์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด Reducer๋ก ์ ์กํฉ๋๋ค. ์ด ๊ณผ์ ์์ key๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ(Sort)ํ๊ณ , ๊ฐ์ key๋ฅผ ํ๋๋ก ๋ณํฉ(Merge)ํฉ๋๋ค. MapReduce ์ ์ฒด์์ ๊ฐ์ฅ ๋ง์ ํธ๋ํฝ์ด ๋ฐ์ํ๋ ๊ตฌ๊ฐ์ ๋๋ค. ๐น Reducer: (k2, list(v2')) โ (k3, v3) ์ ๋ ฌ๋๊ณ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ์ํ reduce() ํจ์๊ฐ ์คํ๋ฉ๋๋ค. ์์๋ฅผ ๋ค์ด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.("Hello", [1,1,1]) โ ("Hello", 3) ๐น Output: TextOutputFormat ์ต์ข ๊ฒฐ๊ณผ๋ฅผ (k3, v3) ํ์์ผ๋ก ์ถ๋ ฅ ํ์ผ์ ์ ์ฅํฉ๋๋ค. ๋ณดํต HDFS์ ํ ์คํธ ํ์ผ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค. ๐ธ Combiner์ Partitioner๋ ์ฑ๋ฅ ์ต์ ํ์ ํฐ ์ญํ ์ ํ๋ฉฐ, ๋คํธ์ํฌ ๋ณ๋ชฉ์ ์ค์ด๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๐ 3.7. Combiner ์ Reducer ์ ์ฐจ์ด Combiner๋ Hadoop MapReduce์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํ ์ ํ์ ์ธ ์ฒ๋ฆฌ ๋จ๊ณ์ ๋๋ค. Reducer์ฒ๋ผ ๋์ํ์ง๋ง, Map Task๊ฐ ๋๋ ํ ๋ก์ปฌ ๋ ธ๋์์ ์คํ๋์ด ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ตํํ๋ ์ญํ ์ ํฉ๋๋ค. ์ฆ, Reduce ์์ ์ ๋ฏธ๋ฆฌ ์ผ๋ถ ์ํํจ์ผ๋ก์จ, ์ ์ฒด์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋์ ์ค์ฌ์ฃผ๋ ๋ณด์กฐ์ ์ธ ๋๊ตฌ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ์ด ๋๋ฌธ์ ์ข ์ข โ๋ก์ปฌ Reducer(Local Reducer)โ, โ์ธ๋ฏธ Reducer(Semi-Reducer)โ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค. MapReduce์์ ๊ฐ์ฅ ๋ณ๋ชฉ(Bottleneck)์ด ์ฌํ ๋จ๊ณ๋ Map โ Reduce ์ฌ์ด์ Shuffle ๋จ๊ณ์ ๋๋ค. Map Task๋ (key, value) ์๋ค์ ์์ฑํ๋ฉฐ, ์ด ๊ฒฐ๊ณผ๋ ๋คํธ์ํฌ๋ฅผ ํตํด Reducer๋ก ์ ์ก๋๋ฉฐ, ์ด ๊ณผ์ ์์ ๋งค์ฐ ๋ง์ ์์ ๋ฐ์ดํฐ ์ ์ก์ด ๋ฐ์ํ ์ ์์ต๋๋ค. Combiner๋ ์ด ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ก์ปฌ์์ ๋จผ์ ์ง๊ณํ์ฌ, Shuffle ๋จ๊ณ๋ก ๋์ด๊ฐ๋ ๋ฐ์ดํฐ์ ์์ ์ค์ฌ์ค๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. Hello Hello Hello World World Bye Combiner ์์ด ์ฒ๋ฆฌํ ๊ฒฝ์ฐ Map Task๋ ๊ฐ ๋จ์ด๋ฅผ ๋ง๋๋ฉด ๋ค์๊ณผ ๊ฐ์ (๋จ์ด, 1) ํ์์ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค ("Hello", 1) ("Hello", 1) ("Hello", 1) ("World", 1) ("World", 1) ("Bye", 1) ์ด ๋ชจ๋ ๊ฐ์ ๊ทธ๋๋ก Shuffle ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ Reducer์๊ฒ ์ ๋ฌ๋๋ฉฐ, ๋คํธ์ํฌ๋ก 6๊ฐ์ ๋ ์ฝ๋๊ฐ ์ ์ก๋ฉ๋๋ค. ํ์ง๋ง Combiner๊ฐ ์์ ๊ฒฝ์ฐ Combiner๋ Map Task์ ์ถ๋ ฅ๊ฐ์ ๋ฐ์ ๋ก์ปฌ์์ ๋จผ์ ์ง๊ณ๋ฅผ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํฉ์ณ์ง๊ฒ ๋ฉ๋๋ค. ("Hello", 3) ("World", 2) ("Bye", 1) ์ด์ Shuffle์ ํตํด Reducer๋ก ๋ณด๋ด์ผ ํ ๋ฐ์ดํฐ๋ ๋จ 3๊ฐ์ ๋๋ค. ๋คํธ์ํฌ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ์ ์ ๋๋ค. ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด, ์๋์ ๊ฐ์ต๋๋ค. ์ถ์ฒ : Combiner ์ฌ์ฉ ์ , ํ ์ด๋ฏธ์ง ๋จ, Combiner ๋ฅผ ์ฌ์ฉ ํ ๋์๋ ์ฃผ์ํ ์ ์ด ์์ต๋๋ค. ๋จผ์ Combiner๋ ์คํ์ด ๋ณด์ฅ๋์ง ์์ต๋๋ค. Hadoop์ด ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ ์ฌ๋ถ๋ฅผ ํ๋จํด์ ์คํํ ์๋ ์๊ณ , ํ์ง ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Reducer์ ๋์ผํ ๋ก์ง์ ์ฌ์ฉํ์ง๋ง, ํญ์ ์์ ํ ๊ฒ์ ์๋๋๋ค. Combiner๊ฐ ์์ ํ๊ฒ ์ฌ์ฉ๋๋ ค๋ฉด ์ฐ์ฐ์ด ๋ค์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค ๊ฒฐํฉ ๋ฒ์น(Associative): (a + b) + c == a + (b + c) ๊ตํ ๋ฒ์น(Commutative): a + b == b + a ์๋ฅผ๋ค๋ฉด, Sum, Count, Min, Max๋ ์์ ํ๋ค๊ณ ํ ์ ์์ต๋๋ค. ํ์ง๋ง Average, TopK, Percentile ๋ฑ์ ๋ถ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Combiner ๋ ๋ฐ์ดํฐ ์ค๋ณต์ด ๋ง๊ณ , ์ค๊ฐ ๊ฒฐ๊ณผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ถ์ ๋, ๊ทธ๋ฌ๋ฉด์ ์ฐ์ฐ์ด ๊ฒฐํฉ ๊ฐ๋ฅํ๊ณ ๊ตํ ๊ฐ๋ฅํ ๋ ์ฆ, Word Count, Histogram, Sum, Max/Min ๊ณ์ฐ ๋ฑ ๋์ ํฉ์ฐ ๋๋ ๋จ์ ํต๊ณ์ฑ ์์ ์ผ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ํ๋ก ๋ด๋ถ์ ์ผ๋ก๋ ๊ทธ๋ ๊ฒ ํ๋จํ๊ณ ๋์ํฉ๋๋ค. ๐ 3.8. MapReduce ์คํ ํ๋ฆ ๋ฐ ์ํ ๊ฐฑ์ MapReduce ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด, ํด๋ผ์ด์ธํธ ๋ ธ๋์์ ์ฌ์ฉ์๊ฐ ์์ฑํ Job์ด JobClient๋ฅผ ํตํด JobTracker์๊ฒ ์ ์ถ๋ฉ๋๋ค. JobTracker๋ ์ ์ฒด Job์ ์ฌ๋ฌ ๊ฐ์ Task๋ก ๋ถํ ํ๊ณ , ํด๋ฌ์คํฐ ๋ด ์ ์ ํ ๋ ธ๋์ Task๋ฅผ ๋ถ๋ฐฐํ์ฌ ์คํํ๋๋ก ํฉ๋๋ค. ๊ฐ Task๋ ์์ปค ๋ ธ๋์์ ์คํ๋๋ฉฐ, ํด๋น ๋ ธ๋์ TaskTracker๊ฐ ์ด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ค์ Map ๋๋ Reduce ์์ ์ Child JVM์์ ์ํ๋๋ฉฐ, ์ด๋ ๊ฐ Task๊ฐ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ก ํ๊ธฐ ์ํ ๊ตฌ์กฐ์ ๋๋ค. Task๋ ์คํ ๋์ค์ ํ์ฌ ์งํ ์ํฉ์ด๋ ์นด์ดํฐ ๊ฐ ๋ฑ์ TaskTracker๋ฅผ ํตํด JobTracker์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ๋ํ TaskTracker๋ ์ผ์ ํ ์ฃผ๊ธฐ๋ก heartbeat๋ฅผ ๋ณด๋ด์ด ์์ ์ ์ ์ ๋์ ์ฌ๋ถ๋ฅผ JobTracker์๊ฒ ์๋ฆฝ๋๋ค. ์ฌ์ฉ์๋ JobClient๋ฅผ ํตํด Job์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ํ์ธํ ์ ์์ผ๋ฉฐ, JobTracker๋ TaskTracker๋ก๋ถํฐ ๋ฐ์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ฒด ์์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ง์ฝ Task๊ฐ ์คํ ์ค ์ฅ์ ๊ฐ ๋ฐ์ํ๊ฑฐ๋, TaskTracker๊ฐ ์ผ์ ์๊ฐ ๋์ heartbeat๋ฅผ ๋ณด๋ด์ง ์์ผ๋ฉด, JobTracker๋ ํด๋น Task๋ฅผ ์คํจ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ดํ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ค๋ฅธ ๋ ธ๋์ ํด๋น Task๋ฅผ ์ฌ์คํํ๋๋ก ๋ช ๋ นํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ผ๋ถ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์ฒด Job์ ์๋์ผ๋ก ๋ณต๊ตฌ๋๋ฉฐ, ์ผ์ ์๊ฐ์ ์ง์ฐ์ด ์์ ์๋ ์์ง๋ง ๋๋ถ๋ถ ์ ์์ ์ผ๋ก ์๋ฃ๋ฉ๋๋ค. ์ด์ฒ๋ผ MapReduce๋ ์ฅ์ ํ์ฉ์ฑ์ ๊ฐ์ถ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด ์์ด, Job ์ํ ๊ด๋ฆฌ์ ๋ณต๊ตฌ๊ฐ ์ฌ์ฉ์ ๊ฐ์ ์์ด ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๐ 3.9. ๋ถ์ฐ ์บ์ฑ ๋ถ์ฐ ์บ์๋ ํ๋ก ๋งต๋ฆฌ๋์ค์์ ๋งต(Map)๊ณผ ๋ฆฌ๋์ค(Reduce) ์์ ์ ํ์ํ ์ ์ ํ์ผ(์ฐธ์กฐ ๋ฐ์ดํฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ํ์ผ ๋ฑ)์ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ๋ ธ๋์ ์๋์ผ๋ก ๋ฐฐํฌํ์ฌ, ๊ฐ ๋ ธ๋์ ๋ก์ปฌ ๋์คํฌ์์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋งค๋ฒ HDFS์์ ํด๋น ํ์ผ์ ์ฝ์ง ์๊ณ , ๋ก์ปฌ์ ์บ์๋ ํ์ผ์ ์ฌ์ฉํจ์ผ๋ก์จ I/O ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ ๋๋๋ค. ์ฃผ๋ก ์์ ํฌ๊ธฐ์ ์ฐธ์กฐ ๋ฐ์ดํฐ, ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ํ์ผ ๋ฑ์ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋งต๋ฆฌ๋์ค ํ๋ ์์ํฌ๋ ๋ถ์ฐ ์บ์์ ๋ฑ๋ก๋ ํ์ผ์ ์์ ์คํ ์์ ์ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ๋ ธ๋์ ์๋์ผ๋ก ๋ฐฐํฌํ๊ณ , ๋ก์ปฌ์ ์บ์ฑํ๋ ์์ ์ ์๋์ผ๋ก ์ํํฉ๋๋ค. ๊ฐ TaskTracker(NodeManager) ๋ ธ๋๋ ๋ถ์ฐ ์บ์์ ๋ฑ๋ก๋ ํ์ผ์ ์๋์ผ๋ก HDFS์์ ๋ค์ด๋ก๋ํ์ฌ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ๋ฉฐ, ์์ ์ค์ธ ํ์คํฌ๋ ๋ถ์ฐ ์บ์์ ๋ฑ๋ก๋ ํ์ผ์ ๋ก์ปฌ ๊ฒฝ๋ก๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค. ์ฆ, ๋ถ์ฐ ์บ์์ ๋ฑ๋ก๋ ํ์ผ์ โ๋ฐฐํฌ ๋ฐ ๋ก์ปฌ ์บ์ฑโ์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ด ๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํ ํ์๋ ์์ต๋๋ค. ํ์ง๋ง ๋ถ์ฐ ์บ์ ๊ธฐ๋ฅ์ด ์๋ ๋ฐฐํฌ๋ฅผ ์ง์ํ๋๋ผ๋, ๋ค์ ๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ํํด์ผ ํฉ๋๋ค. ๋ถ์ฐ ์บ์์ ์ฌ์ฉํ ํ์ผ์ ์ฌ์ ์ HDFS์ ์ ๋ก๋ํด์ผ ํฉ๋๋ค. ๋น์ฐํ ์๋ฆฌ์ด๊ธด ํ์ง๋ง, ๋ถ์ฐ ์บ์๋ HDFS์ ์ ์ฅ๋ ํ์ผ์ ํด๋ฌ์คํฐ ์ ์ฒด๋ก ๋ฐฐํฌํ๋ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋งต๋ฆฌ๋์ค ์์ ์คํ ์ ๋ถ์ฐ ์บ์์ ์ฌ์ฉํ ํ์ผ์ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Java API์์๋ ์๋์ ๊ฐ์ด ๋ถ์ฐ ์บ์์ ํ์ผ์ ๋ฑ๋กํฉ๋๋ค. DistributedCache.addCacheFile(new URI("/path/in/hdfs/file.txt"), job.getConfiguration()); ๐ 4. Map Reduce 2.0 ๋ณ๋์ฌํญ MapReduce 1.0์ ์ผ๊ด ์ฒ๋ฆฌ(batch processing)๋ง์ ์ง์ํ๋ฉฐ, ๋ฐ์ดํฐ ๊ฐ์ ์ํธ์์ฉ์ด ์๋ ๋น๋ํํ ์ฒ๋ฆฌ ๋ฐฉ์์ด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ MapReduce Job์ ์์ฑํ๋ ๊ฒ์ด ๋ณต์กํ๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์๋ จ๋ ๊ฐ๋ฐ์๊ฐ ๋ถ์กฑํ๋ค๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋ํ, MapReduce Job์ ๋ค์ํ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ถํฉํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ณ , ๊ธฐ์ ์์ ํ์๋ก ํ๋ ๋ณด์์ฑ์ด๋ ๊ณ ๊ฐ์ฉ์ฑ(high availability) ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ค๋ ์ ๋ ํฐ ์ ์ฝ์ด์์ต๋๋ค. ์ฆ, MapReduce 1.0์ ๋จ์ํ๊ณ ์ ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ์ ํฉํ์ง๋ง, ์ ์ฐํ๊ณ ๋ค์ํ ์ฒ๋ฆฌ ์๊ตฌ๋ฅผ ์์ฉํ๊ธฐ์๋ ๊ตฌ์กฐ์ ์ผ๋ก ํ๊ณ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ ์ง๋ง Hadoop 2.x ๊ณผ ํจ๊ป ๋ค์ด์จ MapReduce 2.0์ ๊ธฐ์กด MapReduce 1.0 ๊ตฌ์กฐ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด JobTracker์ ์ญํ ์ ๋ถ๋ฆฌํ๋ ์ํคํ ์ฒ ๊ฐ์ ์ ๋์ ํ์์ต๋๋ค. ๊ธฐ์กด์๋ JobTracker๊ฐ ์์๊ด๋ฆฌ(Resource Management)์ ์์ ์ค์ผ์ค๋ง, Job ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฑ ๋ชจ๋ ์ญํ ์ ์ํํ์ผ๋, 2.0์์๋ ์ด๋ฅผ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด YARN (Yet Another Resource Negotiator) ๊ตฌ์กฐ๋ฅผ ๋์ ํ์ต๋๋ค. YARN์ ํด๋ฌ์คํฐ ์ ์ฒด์ ์์์ ์ค์์์ ๊ด๋ฆฌํ๊ณ , ๋ค์ํ ํํ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ฆ, ๊ธฐ์กด MapReduce ์ธ์๋ ์ค์๊ฐ ์ฒ๋ฆฌ, ๋ํํ ์ฟผ๋ฆฌ, ๊ทธ๋ํ ์ฒ๋ฆฌ, ์คํธ๋ฆฌ๋ฐ ๋ฑ ๋ค์ํ ์ํฌ๋ก๋๋ฅผ ์ง์ํ ์ ์๊ฒ ๋์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด Hadoop์ด ์ผ๊ด์ฒ๋ฆฌ ํ๋ซํผ์์ ๋ฒ์ฉ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ซํผ์ผ๋ก ์งํํ ์ ์์์ต๋๋ค. MapReduce 2.0์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ๊ฐ์ง๋๋ค. ์์ ๊ด๋ฆฌ์ Job ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ์ ๋ถ๋ฆฌ๋ก ์ธํ ๊ตฌ์กฐ์ ํจ์จ์ฑ ํฅ์ ์ฌ๋ฌ ํํ์ ๋ถ์ฐ Job ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์ง์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ ์คํ ๊ฐ๋ฅ (์: Spark, Tez, Flink ๋ฑ) ๋ํํ ์ฒ๋ฆฌ ๋ฐ ์ค์๊ฐ ์ฒ๋ฆฌ ์ง์ MapReduce ์ฝ๋๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ๋๋ ํ๋ ์์ํฌ ์ฌ์ฉ ๊ฐ๋ฅ ๋ ๋ง์ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ์ ํฉ ๋ณด์์ฑ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ ๊ฐ์ ๋ถ์ฐ ์บ์ ๊ธฐ๋ฅ ํฅ์ ํนํ, ๋ถ์ฐ ์บ์ ๊ธฐ๋ฅ์ด ํฅ์๋จ์ ๋ฐ๋ผ, DistributedCache ๋ ๋์ด์ ์ฌ์ฉ๋์ง ์๊ฒ ๋์์ผ๋ฉฐ, ์๋์ฒ๋ผ addCacheFile ์ ์ฌ์ฉํฉ๋๋ค. Job job = Job.getInstance(conf, "Example Distributed Cache Job"); job.addCacheFile(new URI("/path/in/hdfs/file.txt#alias")); // alias ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ๋๋ค. ์ alias ๋ฅผ ํตํด ์ถํ ํ์ผ์ ์ฝ๊ฒ ์ฐพ์ ์ฝ์ ์ ์์ต๋๋ค. ํญ๋ชฉ MapReduce 1.0 MapReduce 2.0 (YARN ๊ธฐ๋ฐ) ์ฒ๋ฆฌ ๋ฐฉ์ ์ผ๊ด ์ฒ๋ฆฌ๋ง ์ง์ ์ผ๊ด + ์ค์๊ฐ + ์คํธ๋ฆฌ๋ฐ ๋ฑ ๋ค์ ์คํ ๊ตฌ์กฐ JobTracker ๋จ์ผ ๊ตฌ์ฑ ResourceManager + ApplicationMaster๋ก ๋ถ๋ฆฌ ํ์ฅ์ฑ ๋ฎ์ ๋์ ์ ์ฐ์ฑ ์ ์ ๋์ , ๋ค์ํ ํ๋ ์์ํฌ ์ง์ ๋ณด์ / ๊ฐ์ฉ์ฑ ๋ถ์กฑํจ ๋ณด์์ฑ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ ๊ฐํ ์ง์ ์ ํ๋ฆฌ์ผ์ด์ MapReduce๋ง ์ง์ Spark, Tez, Flink ๋ฑ ๋ค์ํ ์์ง ์ง์ Job ์์ฑ ๋ณต์กํ MapReduce ์ฝ๋ ํ์ ๋ค์ํ API ์ฌ์ฉ ๊ฐ๋ฅ (Java, SQL, Scala ๋ฑ) ๊ธฐ์ ์ ์ฉ์ฑ ๋ฎ์ ๋ค์ํ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ์ ์ฉ ๊ฐ๋ฅ MapReduce 1.0์ ๋จ์ผ JobTracker ๊ตฌ์กฐ๋ก ์ธํด ์ฒ๋ฆฌ ์ ํ, ํ์ฅ์ฑ, ์ ์ฐ์ฑ์์ ํ๊ณ๊ฐ ์์์ผ๋ฉฐ, ๋ค์ํ ๊ธฐ์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ๋ฐ๋ฉด MapReduce 2.0์ YARN ๊ธฐ๋ฐ์ผ๋ก ์ํคํ ์ฒ๋ฅผ ๊ฐ์ ํ์ฌ ์์ ๊ด๋ฆฌ์ Job ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๊ณ , ๋ค์ํ ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ํ๋ ์์ํฌ๋ฅผ ์ง์ํจ์ผ๋ก์จ ๋ณด๋ค ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ซํผ์ผ๋ก ๋ฐ์ ํ์์ต๋๋ค. ๐ 5. Map Reduce ๊ธฐ๋ฅ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ค์ต ๐ 6. Map Reduce ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ๐ 6.1 ํ๋ก๊ทธ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ Java ํ๋ก๊ทธ๋๋ฐ์ผ๋ก MapReduce ํ๋ ์์ํฌ์ ์ธํฐํ์ด์ค์ ๋ง์ถ์ด ๋์ฉ๋ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ ํฐ ๋ฐ์ ์ ๋๋ค. ํ์ง๋ง, MapReduce ์์ ์ ํ๋ ค๋ฉด ๋ฐ์ดํฐ ํ์ฑ๋ถํฐ ์ฒ๋ฆฌ, ์ ๋ ฌ, ์กฐ์ธ๊น์ง ๋ชจ๋ ๊ณผ์ ์ Java๋ก ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ํ ๋ก๊ทธ ํ์ผ์์ ํน์ ์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์ง๊ณํ๋ ค๋ฉด, ๋ก๊ทธ ํ์์ ํ์ฑํ๋ ์ฝ๋๋ถํฐ ์์ํด์, ์ํ๋ ์ง๊ณ ๋ก์ง์ ๋ชจ๋ Java ์ฝ๋๋ก ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ณต์กํ๊ณ ์๊ฐ์ด ๋ง์ด ์์๋ฉ๋๋ค. ๋ฐ๋ผ์ SQL์ด๋ Pig, Hive์ ๊ฐ์ ๋ฐ์ดํฐ ์กฐ์์ ์ฝ๊ฒ ํ ์ ์๋ ๋๊ตฌ๋ค์ด ๋ง์ด ๋ฑ์ฅํ ์ด์ ๊ฐ ๋ฐ๋ก ์ฌ๊ธฐ์ ์์ต๋๋ค. ์ด๋ค์ ๋ณต์กํ MapReduce ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ฏ๋ก ๊ฐ๋ฐ ์๊ฐ์ ํฌ๊ฒ ์ค์ฌ ์ค๋๋ค. ๐ 6.2 ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์คํค๋ง์ ๋ถ์ฌ MapReduce์์๋ HDFS์ ์ ์ฅ๋ ํ์ผ์ ํ์๋ง ์ง์ ํ ์ ์์ ๋ฟ, ํ์ผ ์์ ๋ด์ฉ์ ํด์ํ๋ ์ฑ ์์ ์ ์ ์ผ๋ก ๊ฐ๋ฐ์์๊ฒ ์์ต๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ์ฑํ๊ณ , ์ด๋ค ํ๋๋ฅผ ์ฝ์ด๋ค์ผ์ง ๋ชจ๋ ์ง์ ์ฝ๋ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, CSV ํ์ผ์ด ์กฐ๊ธ์ด๋ผ๋ ํ์์ด ๋ฐ๋๊ฑฐ๋ ์๋ก์ด ํ๋๊ฐ ์ถ๊ฐ๋๋ฉด, ํ์ฑ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ฉฐ, ์ด๋ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๋ํ, ๋ณต์กํ ๋ฐ์ดํฐ ํ์ ์ด๋ ๊ณ์ธต์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํํํ๋ ๊ฒ๋ ์ฝ์ง ์์ต๋๋ค. ์์ธ ์ฒ๋ฆฌ ๋ํ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก, ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ์์ฌ ์์ ๋ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ๋ชจ๋ ๊ฐ๋นํด์ผ ํฉ๋๋ค. ์ด์ฒ๋ผ ์คํค๋ง์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์์ผ๋ฉด ๋ฐ์ดํฐ์ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ๊ธฐ ์ด๋ ต๊ณ , ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ๋ญ๋๋ค. ๐ 6.3 ๊ณ ์ ๋ ๋ฐ์ดํฐ ํ๋ฆ MapReduce ์์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก Map ๋จ๊ณ์ Reduce ๋จ๊ณ๋ผ๋ ๊ณ ์ ๋ ๋ ๋จ๊ณ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ฐ๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด, โ๋จ์ด ์ ์ธ๊ธฐโ ๊ฐ์ ์์ ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ Map์์ ํค-๊ฐ ์์ผ๋ก ๋ณํํ๊ณ , Reduce์์ ์ง๊ณํ๋ ๊ตฌ์กฐ๋ก ๋งค์ฐ ๋ช ํํฉ๋๋ค. ํ์ง๋ง ๋ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ด๋ ์ฌ๋ฌ ๋จ๊ณ๊ฐ ํ์ํ ๊ฒฝ์ฐ, ์ฌ๋ฌ MapReduce ์์ ์ ์ฒด์ธ์ฒ๋ผ ์ฐ๊ฒฐํด์ผ ํ๋ฉฐ, ๊ฐ ์์ ๋ง๋ค ์ปดํ์ผ๊ณผ ์คํ ๊ณผ์ ์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ๊ณผ ํ ์คํธ ์ฌ์ดํด์ด ๊ธธ์ด์ง๊ณ , ๋น ๋ฅด๊ฒ ์์ด๋์ด๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ๋ํ, MapReduce ์์ฒด๋ ๋์ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ ๋ถ๊ธฐ ์ฒ๋ฆฌ์ ๊ฐ์ ์ ์ฐํ ์์ ํ๋ฆ์ ์ง์ํ์ง ์์ผ๋ฏ๋ก, ๋ณต์กํ ์ํฌํ๋ก์ฐ ๊ตฌํ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค. ๐ 6.4 ๋ฎ์ ํจ์จ์ฑ๊ณผ ๋๋ฆฐ ์๋ MapReduce๋ ์ฅ์ ํ์ฉ(fault tolerance)๊ณผ ํ์ฅ์ฑ(scalability)์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ HDFS์ ์ ์ฅํ๋ ์ฒดํฌํฌ์ธํธ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Map ์์ ์ด ๋๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Reduce ์์ ์ด ์ฝ์ด ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๋๋ฌธ์ ๋คํธ์ํฌ์ ๋์คํฌ ์ ์ถ๋ ฅ์ด ๋ง์์ง๊ณ , ์ ์ฒด ์์ ์๋๊ฐ ๋๋ ค์ง๋๋ค. ๋ํ, ๋ฐ์ดํฐ ๊ทธ๋ฃนํ์ ์ํด ์ธ๋ถ ์ ๋ ฌ๊ณผ ๋ณํฉ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ, ์ด ๊ณผ์ ์ญ์ ๋ง์ ์์์ ์๋ชจํฉ๋๋ค. ๋๋ฌธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ ์์ ๋ ์ธ๋ถ ์ ๋ ฌ ๋ฑ์ผ๋ก ์ธํด ์์ฐจ์ ์ธ ๋จ๊ณ๊ฐ ์๊ฒจ ์ ์ฒด ์ฒ๋ฆฌ ์๋๊ฐ ์ ํ๋ฉ๋๋ค. ๋ณต์กํ ์์ ์ด๋ ๊ธด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ฆ์์๋ ์ด๋ฐ ๋นํจ์จ์ฑ์ด ํฌ๊ฒ ๋์ ๋์ด, ์ต์ ๋ถ์ฐ ์ฒ๋ฆฌ ์์คํ ๋ค์ด MapReduce ๋์ DAG ๊ธฐ๋ฐ์ ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋๊ธฐ๋ ํฉ๋๋ค. ( Hive ์ Tez ๋ DAG ๊ธฐ๋ฐ์ ๋๋ค. ) ์ด์ฒ๋ผ MapReduce๋ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ง๋ง, ์ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์, ๊ณ ์ ๋ ์ฒ๋ฆฌ ํ๋ฆ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ์์ ํ๊ณ๋ก ์ธํด ํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๊ฒฝ์์๋ ์ด๋ฅผ ๋ณด์ํ๊ฑฐ๋ ๋์ฒดํ ์ ์๋ ๋ค์ํ ํ๋ ์์ํฌ์ ๋๊ตฌ๋ค์ด ํจ๊ป ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. โ โ๏ธ ๊ฒฐ๋ก MapReduce๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋๋ ์ ์, ์ฒ์ ์ ํ ๋๋ ๊ทธ ๊ตฌ์กฐ์ ํ๋ฆ์ด ๋ณต์กํ๊ณ ์ด๋ ต๊ฒ ๋๊ปด์ก์ง๋ง, ์ค์ ๋ก๋ ๋งค์ฐ ์ง๊ด์ ์ด๊ณ ์ฒด๊ณ์ ์ธ ๋ถ์ฐ ์ฒ๋ฆฌ ๋ชจ๋ธ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ๋๋๊ณ , ๊ฐ ๋จ์ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์์ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ผ๋ ๊ฑธ ์์ผ ๊นจ๋ฌ์์ต๋๋ค. ํนํ, ์์ ๊ด๋ฆฌ์ ์์ ์ค์ผ์ค๋ง์ด ์๋ํ๋์ด ์์ด ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ๋ถ์ฐ ํ๊ฒฝ์ ๋ฌธ์ ๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ค๋ ์ ์ด ์ธ์์ ์ด์๊ณ , ์ด๋ฐ ์ ์ด MapReduce๊ฐ ์ค๋ซ๋์ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ค์ผ๋ก ์๋ฆฌ ์ก์ ์ ์์๋ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๋์์, MapReduce๊ฐ ๋ชจ๋ ์์ ์ ์ต์ ํ๋ ํด๋ฒ์ ์๋๋ผ๋ ์ ๋ ์๊ฒ ๋์์ต๋๋ค. ๋ณต์กํ ์ฐ์ฐ์ด๋ ๋ฐ๋ณต์ ์ธ ์์ ์์๋ ์ฑ๋ฅ ํ๊ณ๊ฐ ์๊ณ , ์ต๊ทผ ๋ฑ์ฅํ ๋ค์ํ ๋ถ์ฐ ์ฒ๋ฆฌ ๊ธฐ์ ๋ค๊ณผ ๋น๊ตํ์ ๋ ์ ์ฐ์ฑ์์ ๋ถ์กฑํ ๋ถ๋ถ๋ ์๋ค๋ ์ ์์ MapReduce์ ํ๊ณ๋ฅผ ์ธ์ ํ ์๋ฐ์ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ ๋ฐ ์์ด MapReduce๋งํผ ์ข์ ์ถ๋ฐ์ ์ ๋๋ฌผ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฐ๊ตญ ์ด๋ฒ ๊ณต๋ถ๋ฅผ ํตํด ๋ฐ์ดํฐ ์์ง๋์ด๋ก์ ๋ถ์ฐ ์ฒ๋ฆฌ ์์คํ ์ ๋ณธ์ง์ ์ดํดํ๋ ๋ฐ ํฐ ๋์์ด ๋์๊ณ , ์์ผ๋ก ๋ ๋ณต์กํ ์์คํ ์ด๋ ์ต์ ๊ธฐ์ ์ ์ ํ ๋ MapReduce์์ ๋ฐฐ์ด ๊ธฐ๋ณธ ์๋ฆฌ์ ์ค๊ณ ์ฒ ํ์ ๋ฐํ์ผ๋ก ๋์ฑ ๊น์ด ์๋ ์ดํด์ ์์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๋ ์์ ๊ฐ์ ์ป์์ต๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ์ ์ค๊ณํ๊ฑฐ๋ ์ต์ ํํ ๋ ์ด ๋ชจ๋ธ์ด ๊ฐ์ง ๊ฐ์ ๊ณผ ํ๊ณ๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ๋ ๊ท ํ ์กํ ์๊ฐ์ด ํ์ํ๋ค๋ ์ ๋ ๋ค์ ํ ๋ฒ ๋ง์์ ์๊ฒผ์ต๋๋ค. โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ ๐ 1. ํจ์คํธ ์บ ํผ์ค - ํ ๋ฒ์ ๋๋ด๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ์ด๊ฒฉ์ฐจ ํจํค์ง Online. ๐ 2. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ ๐ 3. Apache Hadoop ๊ณต์ Docs ๐ 4. Hadoop MapReduce Combiner ์์๋ณด๊ธฐ ๐ 5. MapReduce 2.0 ๋ฑ์ฅ ๋ฐฐ๊ฒฝ, ํน์ง ๐ 6. MapReduce ์ ์ดํด
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-03-30
๐ YARN(Yet Another Resource Negotiator) ๊ธฐ๋ณธ ์ด๋ก
์ ๋ฒ ํฌ์คํ ์์๋, ํ๋ก์ ํต์ฌ์ ๊ณต๋ถํ์์ต๋๋ค. ์ด๋ฒ์๋ Hadoop V2 ์ ํต์ฌ์ธ YARN ์ ๋ํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ๐ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก โ ๐ 1. YARN 2012๋ ์ด์ , Hadoop์ ์ด์ฉํด ๋์ฉ๋ ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉด MapReduce ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก Java, Python, Ruby, ํน์ Pig ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐํด์ผ ํ์ต๋๋ค. ํ์ง๋ง Hadoop 2.0๊ณผ ํจ๊ป ๋ฑ์ฅํ Yarn์ MapReduce ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ์ฝ์์ ๋ฒ์ด๋, ๋ค์ํ ๋ฉํฐํ๋ก์ธ์ฑ ํ๋ก๊ทธ๋จ์ Hadoop ์์์ ํ์ฉํด ์์ ๋กญ๊ฒ ์คํํ ์ ์๊ฒ ํด์ฃผ์์ต๋๋ค. Yarn์ ๋์ฉ๋ ๋ฉํฐํ๋ก์ธ์ฑ ์ฒ๋ฆฌ์์ ์ฑ๋ฅ ํฅ์๊ณผ ์ ์ฐํ ์คํ ์์ง(execution engine)์ ์ ๊ณตํ๋ค๋ ์ ์ด ํฐ ์ฅ์ ์ ๋๋ค. ๋ํ, ์๊ฐ์ด ์ง๋๋ฉด์ Spark์ ๊ฐ์ ๋ค์ํ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ๋ Yarn์ ์ง์ํ๊ฒ ๋๋ฉด์, ํ๋ก ์ํ๊ณ์์ ํ์์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ ํ๋ซํผ์ผ๋ก ์๋ฆฌ์ก์์ต๋๋ค. ์ด๋ฌํ YARN ์ ๋ํ์ฌ, ์ง๊ธ๋ถํฐ ๊ณต๋ถํ๊ณ , ์ ๋ฆฌํ ๋ด์ฉ์ ํฌ์คํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ 1.1. YARN ์ด๋ ์ถ์ฒ : YARN Yarn์ Hadoop 2.0๋ถํฐ ๋์ ๋ ํด๋ฌ์คํฐ ์์ ๊ด๋ฆฌ ์์คํ (Resource Manager)์ ๋๋ค. ์ด์ Hadoop ๋ฒ์ ์์๋ MapReduce๋ผ๋ ํน์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์๋ง ์์กดํด์ ์์ ์ ์ฒ๋ฆฌํ๋๋ฐ, Yarn์ด ๋์ ๋๋ฉด์ MapReduce์ ๊ตญํ๋์ง ์๊ณ ๋ค์ํ ์ข ๋ฅ์ ๋ถ์ฐ ์ฒ๋ฆฌ ์์ ์ ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค. Yarn์ ์ฃผ์ ์ญํ ์ ํด๋ฌ์คํฐ ๋ด ์ฌ๋ฌ ๋ ธ๋์ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ํ ๋นํ์ฌ, ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์์ ์ ์ผ๋ก ์คํ๋ ์ ์๋๋ก ์กฐ์จํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋ค์ํ ์์ ์ ๋์์ ์คํํด๋ ์์์ด ๊ณผ๋ํ๊ฒ ์ง์ค๋๊ฑฐ๋ ๋ญ๋น๋์ง ์๊ณ , ์ ์ ํ๊ฒ ๋ถ๋ฐฐ๋์ด ์ ์ฒด ์์คํ ์ ํจ์จ์ฑ๊ณผ ์์ ์ฑ์ ๋์ ๋๋ค. Yarn์ ๋ํ ์คํ ํ๊ฒฝ์ ์ ์ฐํ๊ฒ ์ ๊ณตํ์ฌ, Apache Spark, Flink, Tez ๊ฐ์ ๋ค์ํ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ๋ ์ง์ํฉ๋๋ค. ์ด๋ก ์ธํด ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ฒ์๊ฐ ๋จ์ํ ๋ฐฐ์น ์์ ์์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, ๋จธ์ ๋ฌ๋, ๊ทธ๋ํ ์ฒ๋ฆฌ ๋ฑ์ผ๋ก ํ์ฅ๋ ์ ์์์ต๋๋ค. ๐ 1.1.1. Yarn์ ๋ํ์ ์ธ Use-Cases Yarn์ด ๋ฑ์ฅํ๋ฉด์ Hadoop ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๊ณผ ๊ฐ๋ฅ์ฑ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. ๐ ๋ฐฐ์น ์์ ๋ฟ ์๋๋ผ ๋ฐ๋ณต ์์ ๊ณผ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ ์ง์ ๊ณผ๊ฑฐ Hadoop์ ์ผ๊ด ์ฒ๋ฆฌ(batch processing)์ ์ด์ ์ด ๋ง์ถฐ์ ธ ์์์ผ๋, Yarn ๋๋ถ์ ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์คํธ๋ฆฌ๋ฐ ์์ ๊ณผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ๋ณต ์คํ๋๋ ์์ ๋ค๋ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๊ฒ ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ค์๊ฐ ๋ก๊ทธ ๋ถ์, ์ค์๊ฐ ์ถ์ฒ ์์คํ ๋ฑ ์น ์๋น์ค์ ํ์ํ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค. ๐ ํด๋ฌ์คํฐ ์์ ํ์ฉ๋ฅ ๊ทน๋ํ ํด๋ฌ์คํฐ ๋ด ์์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ ์ฌ์ฉํ์ง ์์ ๋, Yarn์ด ์์์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌํ ๋นํด ์ค์ผ๋ก์จ ์์ ํ์ฉ๋ฅ ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค. ์ด๋ ๋น์ฉ ์ ๊ฐ๊ณผ ํด๋ฌ์คํฐ ์ด์ ํจ์จ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๐ ํตํฉ ํด๋ฌ์คํฐ ์ด์ ๋ฐ์ดํฐ ์ ์ฅ(HDFS), ๋ฐ์ดํฐ ์ฒ๋ฆฌ(MapReduce, Spark ๋ฑ), ๋ฐ์ดํฐ ์กฐํ ๋ฑ ๋ค์ํ ์์ ์ ๋จ์ผ ํด๋ฌ์คํฐ์์ ํจ๊ป ์ฒ๋ฆฌํ ์ ์์ด ์ด์ ๊ด๋ฆฌ๊ฐ ๊ฐํธํด์ก๊ณ , ๋ฐ์ดํฐ ์ด๋์ ํ์ํ ์๊ฐ๊ณผ ๋น์ฉ๋ ์ค์ผ ์ ์์์ต๋๋ค. ๐ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋์ ์คํ ์ง์ ํ ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ ์ข ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์์ ์ ์ผ๋ก ์คํ๋์ด, ์ฌ๋ฌ ํ์ด๋ ์๋น์ค๊ฐ ํ๋์ ํด๋ฌ์คํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. ๐ 1.1.2. Container ๋? Docker ๋ฅผ ์ฌ์ฉํด๋ณด์ ๋ถ๋ค์ด๋ผ๋ฉด, Container ์ ๊ฐ๋ ์ ์ด๋์ ๋ ์๊ณ ๊ณ์ค ๊ฒ์ ๋๋ค. ์ปจํ ์ด๋๋ ์ํํธ์จ์ด ์คํ ํ๊ฒฝ์ ํ๋์ ํจํค์ง๋ก ๋ฌถ์ ๊ฒฝ๋ํ๋ ๊ฐ์ํ ๊ธฐ์ ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ ๋ฐ ํ์ํ ์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ํ์ผ ๋ฑ์ด ํฌํจ๋์ด ์์ด, ์ด๋์๋ ๋์ผํ ํ๊ฒฝ์์ ์คํํ ์ ์์ต๋๋ค. ์ปจํ ์ด๋ ๊ธฐ์ ์ ๋ฆฌ๋ ์ค์ cgroup๊ณผ namespace ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ, ํ๋์ ๋ฌผ๋ฆฌ์ ์๋ฒ ๋ด์์๋ ๊ฐ๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค. ์ด ๊ฒฉ๋ฆฌ ๋๋ถ์ ์๋ก ๋ค๋ฅธ ์ปจํ ์ด๋๊ฐ ์ถฉ๋ํ๊ฑฐ๋ ๊ฐ์ญํ์ง ์๊ณ , ์์ ์ ์ผ๋ก ๋์์ ์คํ๋ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ์ด์ ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค ๐ฆ ์ฑ ์ ๋ถ๋ฆฌ(Separation of responsibility) ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๊ทธ์ ํ์ํ ์์กด์ฑ๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๊ณ , ๋ฐฐํฌ ํ๊ฒฝ์ ์ธ๋ถ ์ฌํญ(์ด์์ฒด์ ๋ฒ์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถฉ๋ ๋ฑ)์ ํฌ๊ฒ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ต๋๋ค. ๋๋ถ์ ๊ฐ๋ฐ๊ณผ ์ด์ ๊ฐ ํ์ ์ด ์ํํด์ง๊ณ , ๋ฐฐํฌ ๋ฐ ํ ์คํธ ๊ณผ์ ์์ ํ๊ฒฝ ๋ฌธ์ ๋ก ์ธํ ์ค๋ฅ๊ฐ ์ค์ด๋ญ๋๋ค. ๐ฆ ๋์ ์ด์์ฑ(Portability) ์ปจํ ์ด๋๋ ์ด์์ฒด์ ์์ค์์ ๊ฐ์ํ๋๋ฏ๋ก, ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ ์๋ฒ๋ผ๋ฉด ์ด๋ ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์คํํ ์ ์์ต๋๋ค. ๋จ, ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ ค๋ฉด ํด๋น ์์คํ ์ด ์ปจํ ์ด๋ ์คํ์ ์ง์ํด์ผ ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก Linux/amd64 ์ํคํ ์ฒ์์ ๊ฐ์ฅ ์ํํฉ๋๋ค. ๐ฆ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฉ๋ฆฌ(Application isolation) ์ปจํ ์ด๋๋ง๋ค CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง, ๋คํธ์ํฌ ๊ฐ์ ์์์ ํ ๋นํ๊ณ ์ ํํ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋์ ์๋ฒ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์์ ์คํ๋์ด๋ ์๋ก ๊ฐ์ญ ์์ด ์์ ์ ์ผ๋ก ์๋ํฉ๋๋ค. ์ด๋ ์์คํ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์ ๋์ด๋ ๋ฐ๋ ๋์์ด ๋ฉ๋๋ค. ์ต๊ทผ์๋ Kubernetes ๊ฐ์ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์ ํจ๊ป ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํด, ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ ํจ์จ์ ์ผ๋ก ์ด์ํ๋ ์ฌ๋ก๊ฐ ๋ง์์ง๊ณ ์์ต๋๋ค. Yarn๋ ์ด๋ฐ ์ปจํ ์ด๋ ๊ฐ๋ ์ ์ฐจ์ฉํด ํด๋ฌ์คํฐ ์์ ๊ด๋ฆฌ์ ์ ์ฉํจ์ผ๋ก์จ, ๋์ฑ ์ธ๋ฐํ๊ณ ์ ์ฐํ ์์ ํ ๋น๊ณผ ์์ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๐ 1.2. YARN ์ํคํ ์ฒ ์ถ์ฒ : YARN ๊ณผ HDFS Yarn ๊ณผ HDFS ์์ฒด๋ ์์ ํ ๋ ๋ฆฝ์ ์ ๋๋ค. Yarn์ CPU, ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ปดํจํ ์์์ ํ ๋นํ๊ณ ๊ด๋ฆฌํ๋ ์์ ๊ด๋ฆฌ ์ํํธ์จ์ด์ ๋๋ค.๋ฐ๋ฉด, HDFS๋ ๋ถ์ฐ ํ์ผ ์์คํ ์ผ๋ก ๋ฐ์ดํฐ ์ ์ฅ(์คํ ๋ฆฌ์ง) ์ญํ ๋ง ์ํํฉ๋๋ค. ๋ฐ๋ผ์ Yarn๊ณผ HDFS๋ ์์ ํ ๋ ๋ฆฝ์ ์ธ ์์คํ ์ด๋ฉฐ, ์๋ก ๋ค๋ฅธ ์ญํ ์ ๋งก๊ณ ์์ต๋๋ค. ์ฆ, Yarn์ ์ ์ฅ์์ ๊ด๊ณ์์ด ํด๋ฌ์คํฐ์ ์ปดํจํ ์์ ๊ด๋ฆฌ์ ์ง์คํฉ๋๋ค. ๊ทธ๋ฌํ Yarn ์ Architecture ๋ ํฌ๊ฒ 3๊ฐ์ง ์ญํ ์ ํ๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ ๋์ด์์ต๋๋ค. Resource Manager: ํด๋ฌ์คํฐ ์ ์ฒด ์์ ๊ด๋ฆฌ ๋ฐ ์ค์ผ์ค๋ง Application Master: ๊ฐ๋ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์์ฒญ ๋ฐ ๊ด๋ฆฌ Node Managers: ๊ฐ ๋ ธ๋์์ ์์ ํ ๋น ๋ฐ ์์ ์คํ ์ถ์ฒ : YARN ์ํคํ ์ฒ ๊ทธ๋ผ YARN ์ ๊ธฐ๋ณธ๊ณผ ํต์ฌ ์ํคํ ์ฒ๋ฅผ ํ๋ํ๋ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ 1.2.1. Resource Mananger (RM) Resource Manager(RM)๋ YARN ํด๋ฌ์คํฐ์์ ๊ฐ์ฅ ์ค์ํ ๋ง์คํฐ ์ปดํฌ๋ํธ์ ๋๋ค. ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ์ปดํจํ ์์(CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ)์ ์ด๊ด ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ ๋ณธ๋ถ ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ๋ด ์ฌ๋ฌ ๋ถ์๊ฐ ๊ณต์ ํ๋ ์ปดํจํฐ ์์์ ์ค์์์ ํจ์จ์ ์ผ๋ก ๋ฐฐ๋ถํ๋ ์ด๋ฌดํ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. RM์ ํด๋ฌ์คํฐ ๋ด์ ์กด์ฌํ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ์ํ์ ์์ ์ ๋ณด๋ฅผ ์๊ณ ์์ผ๋ฉฐ, Rack Awareness(์๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ์๋ฒ ๊ทธ๋ฃน ๊ฐ์ ๋คํธ์ํฌ ์ฐ์ ์์)๋ ๊ณ ๋ คํด ์์ ํ ๋น์ ์ต์ ํํฉ๋๋ค. RM ๋ด๋ถ์๋ ์ฌ๋ฌ ์๋น์ค๊ฐ ์กด์ฌํ์ง๋ง, ๊ทธ ์ค์์๋ Scheduler๊ฐ ํต์ฌ์ ๋๋ค. Scheduler๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฒญํ ์์ ์๊ตฌ์ฌํญ์ ๋ถ์ํด, ๋๊ฐ ์ธ์ ์ผ๋ง๋ ์์์ ์ธ์ง ๊ฒฐ์ ํฉ๋๋ค. ๋ํ์ ์ธ Scheduler๋ก๋ Capacity Scheduler, Fair Scheduler ๋ฑ์ด ์์ต๋๋ค. ์ด๋ค์ ํด๋ฌ์คํฐ ์์์ ๊ณตํํ๊ฒ ๋๋๊ฑฐ๋, ์ฐ์ ์์์ ๋ฐ๋ผ ํ ๋นํ๋ ์ ์ฑ ์ ๊ตฌํํฉ๋๋ค. ์ด๋ ๊ฒ RM์ ๋จ์ํ ์์์ ํ ๋นํ๋ ์ญํ ๋ฟ ์๋๋ผ, ๋ฆฌ์์ค ํ ๋น ์ ์ฑ ์ ์ ์ฉํ๊ณ , ์์ ์ฌ์ฉ ํํฉ์ ๋ชจ๋ํฐ๋งํ๋ฉฐ ์ฅ์ ๋์์ ์ํ ์ ๋ณด๋ ๊ด๋ฆฌํฉ๋๋ค. YARN ์ SCheduler ์ ๋ํด์๋ ์๋ 3๋ฒ ์ฑํฐ์์ ์ข ๋ ์์ธํ๊ฒ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ๐ 1.2.2. Application Mananger (AM) Application Master(AM)๋ YARN์์ ์คํ๋๋ ๊ฐ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ณ๋๋ก ์คํ๋๋ ๋งค๋์ ํ๋ก์ธ์ค์ ๋๋ค. ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ RM๊ณผ ๋ฌ๋ฆฌ, AM์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์์ ํ๋ก์ ํธ ํ์ฅ ์ญํ ์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ์ปจํ ์ด๋(Container)๋ก์, ์์ ์ ์์ ์ ํ์ํ ๋ฆฌ์์ค๋ฅผ RM์ ์์ฒญํ๊ณ ํ ๋น๋ฐ์ ์์์ ํ์ฉํด ์์ ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ ๋ถ์ ์์ ํ์ ํ์ฅ์ด๋ผ๋ฉด, RM์๊ฒ โCPU 4๊ฐ, ๋ฉ๋ชจ๋ฆฌ 8GB๋ฅผ ๋ฌ๋ผโ๊ณ ์์ฒญํ๊ณ , ํ ๋น๋ฐ์ผ๋ฉด ๊ทธ ์์์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์งํํ๋ ์์ ๋๋ค. AM์ ํ ๋น๋ฐ์ ์์ ๋ด์์ ์์ ๋จ์๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ์์ ๋ฐ๋ผ ์ถ๊ฐ ์์ ์์ฒญ, ์์ ์ํ ๋ชจ๋ํฐ๋ง, ์ค๋ฅ ์ฒ๋ฆฌ ๋ฑ์ ๋ด๋นํฉ๋๋ค. AM์ด ์คํจํ๋ฉด ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฒด๊ฐ ์คํจํ ์ ์์ผ๋ฏ๋ก ์์ ์ฑ๊ณผ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ๋ ์ค์ํฉ๋๋ค. ๋ํ AM์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ(์: MapReduce, Spark, Tez ๋ฑ)์ ๋ง๊ฒ ๊ตฌํ๋๋ฉฐ, ํ๋ ์์ํฌ๋ณ๋ก ์์ ๊ด๋ฆฌ ๋ฐ ์์ ์กฐ์ ๋ฐฉ๋ฒ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ๐ 1.2.3. Node Manager Node Manager ๋ ํด๋ฌ์คํฐ ๋ด ์ฌ๋ฌ ๋ ธ๋(์๋ฒ)์์ ์คํ๋๋ ์์ด์ ํธ์ ๋๋ค. ๊ฐ Node Manager ๋ โ์๋ฒ ๋ด๋น ๊ธฐ์ ์โ๋ก ๋น์ ํ ์ ์์ผ๋ฉฐ, ํด๋น ๋ ธ๋์ ์ํ์ ๋ฆฌ์์ค๋ฅผ RM์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๊ณ (heartbeat)ํฉ๋๋ค. Node Manager ๋ CPU ์ฝ์ด ์, ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฑ ์์ ์ ๋ ธ๋ ์์ ์ฉ๋(capacity)์ ๊ด๋ฆฌํฉ๋๋ค. YARN Scheduler๊ฐ ํ ๋น์ ๊ฒฐ์ ํ๋ฉด NM์ ํด๋น ์์ ์ผ๋ถ๋ฅผ ์ปจํ ์ด๋(Container) ๋จ์๋ก ๋ฐฐ์ ํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์ ์ถํ ์์ ์ ์คํํฉ๋๋ค. ์ปจํ ์ด๋๋ ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ ๋ฆฝ์ ์ธ ์คํ ๊ณต๊ฐ์ ์ ๊ณตํ๋ฉฐ, CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ์ฌ์ฉ๋์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ NM์ ์์ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง, ์ปจํ ์ด๋ ์์ ๋ฐ ์ข ๋ฃ, ์ฅ์ ๊ฐ์ง์ ๋ณต๊ตฌ ๋ฑ ์์ ์ ์ํํฉ๋๋ค. Node Manager ๋ Resource Mananger ์ ์ง์์ ๋ฐ๋ผ ์ปจํ ์ด๋ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๊ณ ํ๋ฉฐ, RM์ ์ด๋ฅผ ํตํด ํด๋ฌ์คํฐ ์์ ํํฉ์ ์ ํํ ํ์ ํ ์ ์์ต๋๋ค. NodeManager ๋ด๋ถ์๋ Container Manager, NodeStatusUpdater, NodeHealthChecker ๋ฑ์ ์๋น์ค๊ฐ ์์ด, ๊ฐ๊ฐ ์ปจํ ์ด๋ ๊ด๋ฆฌ, ์ํ ์ ๋ฐ์ดํธ, ๋ ธ๋ ๊ฑด๊ฐ ์ฒดํฌ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. ์ด์ฒ๋ผ NM์ ํด๋ฌ์คํฐ ๋ด ๋ฌผ๋ฆฌ์ ํ๋์จ์ด ์์์ ์ถ์ํํ์ฌ YARN ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ์ผ๋ก ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค. ๐ 1.3. YARN ์ ์์ ํ๋ฆ ์ถ์ฒ : YARN ์ ์ฒด์ ์ธ ํ๋ฆ ์์ ์ ํ๋ฆ์ ๋จผ์ ๊ฐ๋จํ ์ ๋ฆฌํ๊ณ , ์ธ๋ถ์ ์ผ๋ก ๋ค์ฌ๋ค๋ณด๊ฒ ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์คํ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ ์คํํ๊ณ ์ถ์ ๋, ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด Yarn API๋ฅผ ํตํด ์คํ ์์ฒญ์ ํฉ๋๋ค. ResourceManager๊ฐ ์ด ์์ฒญ์ ๋ฐ๊ณ ์ ํจํ๋ค๊ณ ํ๋จํ๋ฉด, ํด๋ผ์ด์ธํธ์๊ฒ ๊ณ ์ ํ Application ID(์์ ์๋ณ ๋ฒํธ)๋ฅผ ํ ๋นํฉ๋๋ค. ResourceManager๊ฐ NodeManager์๊ฒ Application Master ์คํ์ ์์ฒญํฉ๋๋ค. ResourceManager๋ ํด๋ฌ์คํฐ ๋ด ๋ ธ๋๋ค ์ค ํ๋์ NodeManager์๊ฒ Application Master๋ผ๋ ํน๋ณํ ํ๋ก๊ทธ๋จ์ ์คํํ๋ผ๊ณ ์ง์ํฉ๋๋ค. Application Master๋ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ ์งํ์ ์ด๊ด ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. NodeManager๊ฐ ์ปจํ ์ด๋ ์์์ Application Master๋ฅผ ์คํํฉ๋๋ค. NodeManager๋ ResourceManager์ ์์ฒญ์ ๋ฐ๊ณ , ์ ์ปจํ ์ด๋(์์ ์คํ ๊ณต๊ฐ)๋ฅผ ๋ง๋ค์ด JVM(Java Virtual Machine)์ ์คํํ์ฌ Application Master๋ฅผ ๋์๋๋ค. Application Master๊ฐ ResourceManager์๊ฒ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํฉ๋๋ค. Application Master๋ ์์ ์ ํ์ํ ๋ฆฌ์์ค(๋ฉ๋ชจ๋ฆฌ, CPU, ๋คํธ์ํฌ, ์ปจํ ์ด๋ ๊ฐ์ ๋ฑ)๋ฅผ ResourceManager์ ์์ฒญํฉ๋๋ค. ResourceManager๋ ํด๋ฌ์คํฐ ์ ์ฒด ๋ฆฌ์์ค ์ํฉ์ ํ์ ํด, ์ฌ์ฉํ ์ ์๋ NodeManager ๋ชฉ๋ก์ Application Master์ ์ ๋ฌํฉ๋๋ค. Application Master๊ฐ ํ ๋น๋ฐ์ NodeManager์ ์ปจํ ์ด๋ ์คํ์ ์์ฒญํฉ๋๋ค. ๋ฐ์ NodeManager๋ค์๊ฒ ์ค์ ์์ ์ ์ํํ ์ปจํ ์ด๋ ์คํ์ ์์ฒญํฉ๋๋ค. NodeManager๋ค์ด ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์์ํต๋๋ค. NodeManager๋ค์ ๊ฐ ์ปจํ ์ด๋ ์์ JVM์ ์๋ก ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค. ์์ ์ด ๋๋๋ฉด Application Master๋ ์ข ๋ฃ๋๊ณ , ResourceManager๋ ์ข ๋ฃ๋ Application Master๊ฐ ์ฌ์ฉํ๋ ์์์ ํด์ ํฉ๋๋ค. ์ด์ ์ข ๋ ์ธ๋ถ์ ์ผ๋ก ๋ค์ฌ๋ค๋ณด๊ฒ ์ต๋๋ค. ๐ 1.3.1. client โธ RM : Application ์คํ ์์ฒญ ์ถ์ฒ : YARN Application ์คํ ์์ฒญ ๋จ๊ณ YARN ํด๋ฌ์คํฐ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ResourceManager์๊ฒ ์ผ๋ จ์ ์์ฒญ์ ์์๋๋ก ๋ณด๋ด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ณํ ์ ์๋ ID๋ฅผ ๋ฐ๊ธ๋ฐ๊ณ , ์คํ ๊ณํ์ ์ ์ถํ๋ฉฐ, ์คํ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ ์ ๋ณด๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ Application ID๋ฅผ ์์ฒญํฉ๋๋ค ํด๋ผ์ด์ธํธ๊ฐ YARN ํด๋ฌ์คํฐ์์ ์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ค๋ฉด ๋จผ์ Application ID๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฅผ ์ํด ClientRMService์ createNewApplication() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๐ก ์์: ์ฌ์ฉ์๊ฐ Spark ์์ ์ ์ ์ถํ๋ฉด, Spark ํด๋ผ์ด์ธํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก createNewApplication()์ ํธ์ถํ์ฌ YARN์ ์ ์์ ID๋ฅผ ์์ฒญํฉ๋๋ค. YARN์ด Application ID์ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค ClientRMService๋ ์์ฒญ์ ๋ฐ๊ณ , ์๋ก์ด Application ID์ ํจ๊ป ํด๋ฌ์คํฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต๋ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ํฌํจํ GetNewApplicationResponse ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํฉ๋๋ค. ์: ์ต๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ, ์ต๋ CPU ์ฝ์ด ์ ๋ฑ ๐ก ์์: ํด๋ฌ์คํฐ ์ ์ฒด์์ ํ ์ปจํ ์ด๋๋น 8GB ๋ฉ๋ชจ๋ฆฌ, 4์ฝ์ด๊น์ง ํ ๋น ๊ฐ๋ฅํ๋ค๋ ์ ๋ณด๊ฐ ํจ๊ป ์ ๋ฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ Application ์ ์ถ ์์ฒญ์ ๋ณด๋ ๋๋ค ํด๋ผ์ด์ธํธ๋ Application ID๊ฐ ์ ์์ ์ผ๋ก ๋ฐ๊ธ๋์๋์ง ํ์ธํ ํ, ClientRMService์ submitApplication() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ดํ๋ฆฌ์ผ์ด์ ์คํ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด๋ ApplicationSubmissionContext ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํฉ๋๋ค. ์ด ๊ฐ์ฒด์๋ ์คํ์ ํ์ํ ๋ค์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค: Application ID Application Name (์: โETL Job for 2025-06-03โ) Queue name (์: โdefaultโ, โetlโ) Application Priority ํ์ํ ๋ฆฌ์์ค (๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ) Application Master ์คํ ๋ช ๋ น์ด ๋ด๊ธด ContainerLaunchContext ๐ก ์์: โspark-etl-jobโ์ด๋ผ๋ ์์ ์ etl ํ์ ์ ์ถํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ 4GB, CPU 2์ฝ์ด, ์คํ ๋ช ๋ น์ spark-submit์ผ๋ก ์ค์ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ Application ์ํ๋ฅผ ์์ฒญํฉ๋๋ค ํด๋ผ์ด์ธํธ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ ์์ ์ผ๋ก ๋ฑ๋ก๋์๋์ง ํ์ธํ๊ธฐ ์ํด getApplicationReport()๋ฅผ ํธ์ถํฉ๋๋ค. ResourceManager๊ฐ ApplicationReport๋ฅผ ๋ฐํํฉ๋๋ค ResourceManager๋ ์์ฒญ์ ๋ฐ๋ผ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ฐ ์คํ ์ ๋ณด๋ฅผ ๋ด์ ApplicationReport ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๋ณด๊ณ ์๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ๋ ์ ์ฉํฉ๋๋ค. ApplicationReport์ ํฌํจ๋ ์ ๋ณด: ํญ๋ชฉ ์ค๋ช Application ID ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ ID User ์คํํ ์ฌ์ฉ์ ์ด๋ฆ Queue ์คํ๋ ํ ์ด๋ฆ Application Name ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ฆ ApplicationMaster Host ApplicationMaster๊ฐ ์คํ ์ค์ธ ๋ ธ๋ RPC Port ApplicationMaster์ ํต์ ํฌํธ Tracking URL ์น UI์์ ์ํ ์ถ์ ๊ฐ๋ฅ ๋งํฌ YarnApplicationState ์ดํ๋ฆฌ์ผ์ด์ ์ํ (์: SUBMITTED, RUNNING, FINISHED ๋ฑ) Diagnostic Info ์ค๋ฅ ๋ฐ์ ์ ๋ฉ์์ง Start Time ์ดํ๋ฆฌ์ผ์ด์ ์์ ์๊ฐ Client Token ๋ณด์ ์ค์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ์ธ์ฆ ํ ํฐ ๐ก ์์: ํด๋ผ์ด์ธํธ๋ ์ด ์ ๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐํํด ์์ ์งํ ์ํ๋ ์คํจ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ , ๋์๋ณด๋๋ ๋ชจ๋ํฐ๋ง ์์คํ ์์ ์๊ฐํํ ์ ์์ต๋๋ค. ๐ 1.3.2. RM โธ NM : Application Master ์คํ ์์ฒญ ์ถ์ฒ : YARN Application Master ์คํ ์์ฒญ ๋จ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ์ ์๋ฃํ๋ฉด, ์ด์ YARN์ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ApplicationMaster๋ฅผ ์คํํ์ฌ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์คํ์ ์์ํฉ๋๋ค. ์ด ๊ณผ์ ์ ResourceManager์ ๋ด๋ถ ๊ตฌ์ฑ ์์๋ค๊ณผ NodeManager ๊ฐ์ ํ์ ์ ํตํด ์ด๋ค์ง๋๋ค. RMAppManager๊ฐ ApplicationMaster ์คํ์ ์ํ ์ปจํ ์ด๋๋ฅผ ์์ฒญํฉ๋๋ค ResourceManager์ ๊ตฌ์ฑ ์์ ์ค ํ๋์ธ RMAppManager๋ YARN ๋ด๋ถ ์ค์ผ์ค๋ฌ์๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ์์ฒญ๊ณผ ํจ๊ป ApplicationMaster ์คํ์ ์ํ ์ปจํ ์ด๋ ํ ๋น์ ์์ฒญํฉ๋๋ค. ApplicationAttemptId๊ฐ ํ์ ๋ฑ๋ก๋ฉ๋๋ค YARN์ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์คํ ์๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํด ApplicationAttemptId๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํ์ ๋ฑ๋กํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ RMAppAttemptEventType.ATTEMPT_ADDED ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ๋ฑ๋ก์ด ์๋ฃ๋์์์ ์๋ ค์ค๋๋ค. ๐ก ์์: ํ๋์ Spark ์์ ์ด ์คํจ ํ ์ฌ์๋๋๋ ๊ฒฝ์ฐ, ์๋ก์ด ApplicationAttemptId๊ฐ ์์ฑ๋์ด ํ์ ๋ค์ ๋ฑ๋ก๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ์๊ฒ ์ปจํ ์ด๋ ํ ๋น์ ์์ฒญํฉ๋๋ค RMAppManager๋ ์ค์ผ์ค๋ฌ์๊ฒ ApplicationMaster ์คํ์ ํ์ํ ์ปจํ ์ด๋๋ฅผ ํ ๋นํด๋ฌ๋ผ๊ณ ์์ฒญํฉ๋๋ค. ์ค์ผ์ค๋ฌ๊ฐ ์ปจํ ์ด๋ ํ ๋น ํ START ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค ์ค์ผ์ค๋ฌ๋ ์ ์ ํ NodeManager์์ ์ฌ์ฉํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ํ ๋นํ๊ณ , ApplicationMaster ์คํ์ ์ํ RMContainerEventType.START ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค. RMAppManager๊ฐ ApplicationMasterLauncher๋ฅผ ์คํํฉ๋๋ค ์ปจํ ์ด๋๊ฐ ํ ๋น๋๋ฉด, RMAppManager๋ ApplicationMasterLauncher๋ฅผ ํตํด ์ค์ ApplicationMaster ์คํ์ ์์ํฉ๋๋ค. ApplicationMasterLauncher๊ฐ AMLauncher๋ฅผ ์คํํฉ๋๋ค ApplicationMasterLauncher๋ ๋ด๋ถ์ ์ผ๋ก AMLauncher๋ฅผ ๊ตฌ๋ํ์ฌ ApplicationMaster๋ฅผ ์คํํฉ๋๋ค. AMLauncher๊ฐ NodeManager์ ApplicationMaster ์คํ์ ์์ฒญํฉ๋๋ค AMLauncher๋ ์ปจํ ์ด๋ ์คํ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด์ ContainerLaunchContext๋ฅผ ์ค๋นํ๊ณ , ์ด๋ฅผ NodeManager์๊ฒ ์ ๋ฌํ์ฌ ์ปจํ ์ด๋ ์คํ์ ์์ฒญํฉ๋๋ค. ContainerLaunchContext์ ํฌํจ๋๋ ์ ๋ณด: ํญ๋ชฉ ์ค๋ช ContainerId ์ปจํ ์ด๋ ๊ณ ์ ์๋ณ์ Resource ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ๋ฑ ๋ฆฌ์์ค User ํด๋น ์ปจํ ์ด๋์ ํ ๋น๋ ์ฌ์ฉ์ Security Tokens ๋ณด์์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ํ์ํ ํ ํฐ LocalResources ์คํ์ ํ์ํ jar, ๋ฐ์ด๋๋ฆฌ, shared-objects, side files ๋ฑ Service Data (์ ํ) ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฉ ์๋น์ค ๋ฐ์ดํฐ Environment Variables ์คํ ์ ํ์ํ ํ๊ฒฝ ๋ณ์ Launch Command ์ปจํ ์ด๋ ์คํ ๋ช ๋ น์ด Retry Strategy ์ปจํ ์ด๋๊ฐ ์คํจํ ๊ฒฝ์ฐ ์ฌ์๋ ์ ๋ต ๐ก ์์: Spark์ ApplicationMaster๋ ๋ด๋ถ์ ์ผ๋ก spark-submit ๋ช ๋ น์ launch command๋ก ์ ๋ฌํ๊ณ , ์คํ์ ํ์ํ spark-assembly.jar ๋ฑ์ local resource๋ก ํฌํจํฉ๋๋ค. NodeManager๊ฐ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค NodeManager๋ ์ ๋ฌ๋ฐ์ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ StartContainersResponse์ ๋ด์ AMLauncher์ ๋ฐํํฉ๋๋ค. ๐ก ์์: ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ฉด, NodeManager๋ SUCCESS ์ํ์ ํจ๊ป ์ปจํ ์ด๋์ ์ํ ์ ๋ณด๋ฅผ ํฌํจํ ์๋ต์ ๋ฐํํฉ๋๋ค. ๐ 1.3.3. NM โธ AM : JVM์ผ๋ก Application Master ์คํ NodeManager๋ ResourceManager์ ์์ฒญ์ ๋ฐ๋ผ ์ง์ ๋ ์ปจํ ์ด๋ ์์์ ApplicationMaster๋ฅผ ์คํํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ค์ ๋ก ์๋ก์ด JVM ํ๋ก์ธ์ค๋ฅผ ์์ฑํด์ ApplicationMaster๋ฅผ ๊ตฌ๋์ํค๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ApplicationMaster๋ฅผ ์คํํ๊ธฐ ์ํด NodeManager๋ ContainerLaunchContext๋ผ๋ ์คํ ์ปจํ ์คํธ ์ ๋ณด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์ปจํ ์คํธ์๋ ๋ค์๊ณผ ๊ฐ์ ์คํ์ ํ์ํ ์ ๋ณด๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค: ์ปจํ ์ด๋ ID ํ ๋น๋ ๋ฆฌ์์ค ์ ๋ณด (๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ) ์ปจํ ์ด๋๋ฅผ ์คํํ ์ฌ์ฉ์ ์ ๋ณด ๋ฐ์ด๋๋ฆฌ๋ JAR ํ์ผ ๋ฑ ๋ก์ปฌ ๋ฆฌ์์ค ํ๊ฒฝ ๋ณ์ ์คํ ๋ช ๋ น์ด (command) ๋ณด์ ํ ํฐ (ํ์ํ ๊ฒฝ์ฐ) ์คํจ ์ ์ฌ์๋ ์ ๋ต ๋ฑ ๐ก ์์: ContainerLaunchContext์ command ํ๋์๋ "java -Xmx1024m com.example.MyAppMaster" ์ ๊ฐ์ ์ค์ ์คํ ๋ช ๋ น์ด๊ฐ ์ค์ ๋ฉ๋๋ค. NodeManager๋ ์ด ์ปจํ ์คํธ๋ฅผ ๋ฐํ์ผ๋ก JVM์ ์์ฑํ๊ณ ApplicationMaster๋ฅผ ๊ตฌ๋ํฉ๋๋ค. ApplicationMaster๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ฉด, ์ดํ ๋จ๊ณ์์ ResourceManager์ ๋ฑ๋ก ์์ฒญ์ ํ๊ฒ ๋ฉ๋๋ค. ๐ 1.3.4. AM โธ RM : ํ์ํ ๋ฆฌ์์ค ์์ฒญ, NM ๋ชฉ๋ก ๋ฐํ ๋ฐ Application Master ๋ฑ๋ก NodeManager๊ฐ ApplicationMaster๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํ ํ์๋, ํด๋น ApplicationMaster๊ฐ ๋ฐ๋์ ResourceManager์ ๋ฑ๋ก๋์ด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ResourceManager๋ ApplicationMaster์๊ฒ ์ ์ ํ ์์์ ํ ๋นํ๊ฑฐ๋ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฑ๋ก ๊ณผ์ ์ ๋ค์ด๊ฐ๊ธฐ ์ ์, ๋จผ์ ApplicationMaster์ ResourceManager๊ฐ ์ด๋ป๊ฒ ํต์ ํ๋์ง ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ ์ปดํฌ๋ํธ๋ ApplicationMasterProtocol์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํธ์์ฉํฉ๋๋ค. YARN์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ธฐ๋ณธ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ๋ ๊ฐ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. AMRMClient AMRMClientAsync ํ์ํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ ApplicationMasterProtocol์ ๊ตฌํํ์ฌ ์ปค์คํฐ๋ง์ด์งํ ์๋ ์์ต๋๋ค. ApplicationMasterProtocol์์ ์ ๊ณตํ๋ ์ฃผ์ ๋ฉ์๋๋ ์๋์ ๊ฐ์ต๋๋ค: ๋ฉ์๋ ์ค๋ช registerApplicationMaster(request) ApplicationMaster๋ฅผ ResourceManager์ ๋ฑ๋ก allocate(request) ์์ ์์ฒญ ๋ฐ ์ํ ๋ณด๊ณ (heartbeat ํฌํจ) finishApplicationMaster(request) ์คํ ์๋ฃ ํ ์ข ๋ฃ ์ฒ๋ฆฌ ์์ฒญ ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ApplicationMaster๊ฐ ์ด๋ป๊ฒ ๋ฑ๋ก๋๋์ง ๊ตฌ์ฒด์ ์ธ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ถ์ฒ : YARN Application Master ๋ฑ๋ก ๋จ๊ณ ApplicationMaster๊ฐ ResourceManager์ ๋ฑ๋ก ์์ฒญ ApplicationMaster๋ registerApplicationMaster() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ResourceManager์ ์์ ์ ๋ฑ๋กํฉ๋๋ค. ์ด๋ ์ ๋ฌ๋๋ RegisterApplicationMasterRequest ์์๋ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ApplicationMaster๊ฐ ์คํ ์ค์ธ ํธ์คํธ ์ด๋ฆ RPC ํฌํธ ์ฌ์ฉ์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ Tracking URL ๐ก ์์: Spark์ ApplicationMaster๋ spark://worker-node1:7077 ๊ฐ์ RPC ํฌํธ์ Web UI ์ฃผ์๋ฅผ ๋ฑ๋กํฉ๋๋ค. ResourceManager๊ฐ ๋ฑ๋ก ์ฒ๋ฆฌ ๋ฐ ์๋ต ResourceManager์ ApplicationMasterService๋ ๋ฑ๋ก ์์ฒญ์ ๋ฐ์ ํ, ํด๋น ApplicationMaster๋ฅผ ๋ด๋ถ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ RegisterApplicationMasterResponse๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ์๋ต์ AllocateResponse ํํ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋ค์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ์ค๋ณต ์๋ต ๋ฐฉ์ง๋ฅผ ์ํ Response ID AM์๊ฒ ์ ๋ฌ๋๋ ๋ช ๋ น์ด (e.g., ์ฌ์์, ์ข ๋ฃ ๋ฑ) ์๋กญ๊ฒ ํ ๋น๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ค์ ์ํ ํด๋ฌ์คํฐ์์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค ์ (headroom) ๋ณ๊ฒฝ๋ ๋ ธ๋ ์ํ ๋ชฉ๋ก ์ ์ฒด ๋ ธ๋ ์ ๋ฐํ ์์ฒญ๋ ๋ฆฌ์์ค (๋ณด์ ํ์ฑํ ์) AMRMToken ๋ฆฌ์์ค๊ฐ ์ฆ๊ฐ ๋๋ ๊ฐ์๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ApplicationMaster๊ฐ allocate ๋ฉ์๋๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญ ApplicationMaster๋ ์ดํ ์ฃผ๊ธฐ์ ์ผ๋ก allocate() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ค์์ ์ํํฉ๋๋ค. ํ์ํ ๋ฆฌ์์ค ์์ฒญ (์: ์ปจํ ์ด๋ ๊ฐ์, ์์น, ์ฌ์ ๋ฑ) ์ดํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์งํ๋ฅ ๋ณด๊ณ ์ฌ์ฉํ์ง ์๋ ์ปจํ ์ด๋ ๋ฐํ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ๋ฆฌ์์ค ๋ณ๊ฒฝ ์์ฒญ ๐ก allocate() ๋ฉ์๋๋ ์ํ ์ ์ง๋ฅผ ์ํ heartbeat ์ญํ ๋ ์ํํฉ๋๋ค. AM์ ํ์ํ ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ๋ชป ๋ฐ์๋ ์ด ๋ฉ์๋๋ฅผ ํตํด ์ ์ง์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. AMRMClientAsync๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํธ์ถ ๊ฐ๊ฒฉ์ 1์ด์ ๋๋ค. ResourceManager๊ฐ ์์ฒญ์ ์ค์ผ์ค๋ฌ์๊ฒ ์์ ApplicationMasterService๋ ๋ฐ์ allocate ์์ฒญ์ ๋ด๋ถ ์ค์ผ์ค๋ฌ์๊ฒ ์ ๋ฌํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์์ฒญ๋ ์์์ด ๊ฐ์ฉํ์ง ํ์ธํ๊ณ , ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํด๋น ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ค์ AllocateResponse์ ๋ด๊ฒจ ApplicationMaster๋ก ๋ฐํ๋ฉ๋๋ค. ๐ก ์์: ์ค์ผ์ค๋ฌ๋ ์ฌ์ฉ์์ ํ, ์ฐ์ ์์, ํ์ฌ ํด๋ฌ์คํฐ ์ํ ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ ๋น ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค. ๐ 1.3.5. AM โธ NM : ์ปจํ ์ด๋ ์คํ ์ถ์ฒ : YARN ์ปจํ ์ด๋ ์คํ ๋ฐ Application ์คํ ๋จ๊ณ ApplicationMaster๋ ์์ ์ด ํ ๋น๋ฐ์ ์ปจํ ์ด๋์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ApplicationMaster๋ NodeManager์ ์ํธ์์ฉํฉ๋๋ค. ApplicationMaster์ ํด๋ผ์ด์ธํธ๋ NodeManager์๊ฒ ์ปจํ ์ด๋ ์คํ์ ์์ฒญํฉ๋๋ค. ์ด๋ ์ฌ์ฉ๋๋ StartContainersRequest์๋ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ํ ๋น๋ ๋ฆฌ์์ค (๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ) ๋ณด์ ํ ํฐ (๋ณด์์ด ํ์ฑํ๋ ๊ฒฝ์ฐ) ์ปจํ ์ด๋๋ฅผ ์์ํ๊ธฐ ์ํ ์คํ ๋ช ๋ น์ด ํ๋ก์ธ์ค ํ๊ฒฝ ๋ณ์ ํ์ํ ๋ฐ์ด๋๋ฆฌ, JAR ํ์ผ, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ NodeManager์ ContainerManager๋ startContainer ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ContainerManager๋ ApplicationMaster๊ฐ ์์ฒญํ ๋๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ , ์คํ ๊ฒฐ๊ณผ๋ฅผ StartContainersResponse๋ก ๋ฐํํฉ๋๋ค. StartContainersResponse๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. getAllServicesMetaData() : ์คํ๋ ์๋น์ค์ ๋ฉํ๋ฐ์ดํฐ getFailedRequests() : ์คํจํ ์ปจํ ์ด๋ ์คํ ์์ฒญ ๋ชฉ๋ก getSuccessfullyStartedContainers() : ์ฑ๊ณต์ ์ผ๋ก ์์๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ๐ก ์์: ApplicationMaster๊ฐ NodeManager์ ์ปจํ ์ด๋ ์คํ์ ์์ฒญํ์ ๋, NodeManager๊ฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ 4GB, CPU 2๊ฐ๋ฅผ ๊ฐ์ง ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ , ์คํ ๋ช ๋ น์ด๋ก java -jar app.jar๋ฅผ ์คํํฉ๋๋ค. ์คํ์ด ์ฑ๊ณตํ๋ฉด StartContainersResponse์์ ์ฑ๊ณต์ ์ผ๋ก ์์๋ ์ปจํ ์ด๋ ๋ชฉ๋ก์ ํด๋น ์ปจํ ์ด๋๊ฐ ํฌํจ๋์ด ํด๋ผ์ด์ธํธ์ ๋ฐํ๋ฉ๋๋ค. ๐ 1.3.6. NM โธ Container : Application ์คํ ์ฌ์ค ์ ์ปจํ ์ด๋ ์คํ ๊ณผ์ ๊ณผ Application ์คํ ๊ณผ์ ์ ํ๋๋ก ํตํฉํ์ฌ ๋ด๋ ์ข์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ ์ดํ, ApplicationMaster๋ getContainerStatuses()๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํธ์ถํ์ฌ ๊ฐ ์ปจํ ์ด๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค. NodeManager์ ContainerManager๋ ApplicationMaster๊ฐ ์์ฒญํ ์ปจํ ์ด๋ ์ํ๋ฅผ GetContainerStatusesResponse๋ก ๋ฐํํฉ๋๋ค. ์ด ์๋ต์๋ ์ปจํ ์ด๋์ ์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๐ก ์์: ApplicationMaster๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ปจํ ์ด๋ ์ํ๋ฅผ ์กฐํํ ๋, NodeManager๋ ์ปจํ ์ด๋๊ฐ ํ์ฌ RUNNING ์ํ์์ ์๋ตํ๊ณ , ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ผ๋ฉด ์ค๋ฅ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ์ ๋ฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ApplicationMaster๋ ๊ฐ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๐ 1.3.7. Application Master ์ข ๋ฃ ์ถ์ฒ : YARN Application Master ์ข ๋ฃ ๋จ๊ณ ์ปจํ ์ด๋์์ ์คํํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ด ์ข ๋ฃ๋๋ฉด, ApplicationMaster๋ ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค. ApplicationMaster๊ฐ ์ข ๋ฃ๋๋ฉด ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ๋ผ์ดํ์ฌ์ดํด์ด ์์ ํ ์ข ๋ฃ๋๋ ๊ฒ์ ๋๋ค. ApplicationMaster์ ํด๋ผ์ด์ธํธ๋ ResourceManager์๊ฒ ApplicationMaster ์ข ๋ฃ๋ฅผ ์์ฒญํฉ๋๋ค. ResourceManager์ ApplicationMasterService๋ ํด๋น ApplicationMaster๋ฅผ ํด๋ฌ์คํฐ์์ ํด์ ํ๊ณ , FinishApplicationMasterResponse๋ฅผ ๋ฐํํฉ๋๋ค. FinishApplicationMasterResponse์๋ getIsUnregistered()๋ผ๋ boolean ๋ฉ์๋๊ฐ ์์ด์, ์ ์์ ์ธ ํด์ ์ ์ข ๋ฃ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์๋ ค์ค๋๋ค. ๋ง์ฝ getIsUnregistered()๊ฐ true๊ฐ ๋๊ธฐ ์ ์ Application์ด ๋จผ์ ๋ฉ์ถ๋ค๋ฉด, ResourceManager๋ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์๋ํฉ๋๋ค. ๐ก ์์: ์ด๋ค ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ ์์ ์ผ๋ก ์์ ์ ๋ง์น๊ณ ์ข ๋ฃ ์ ํธ๋ฅผ ๋ณด๋ด๋ฉด, ResourceManager๋ ์ด ์์ฒญ์ ๋ฐ์ ApplicationMaster๋ฅผ ํด์ ํ๊ณ , getIsUnregistered()๊ฐ true์ธ ์๋ต์ ๋ฐํํฉ๋๋ค. ๋ฐ๋ฉด, ์์ ์ด ๊ฐ์๊ธฐ ์ค๋จ๋๊ฑฐ๋ ๋น์ ์ ์ข ๋ฃ๋๋ฉด, ResourceManager๋ ์ฌ์๋๋ฅผ ์ํด ApplicationMaster๋ฅผ ๋ค์ ์คํ์ํฌ ์ ์์ต๋๋ค. ๐ 1.3.8. Auxiliary Service YARN์์ Auxiliary Service(๋ณด์กฐ ์๋น์ค)๋ NodeManager ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฑฐ๋ ์๋น์ค ์ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ํนํ ํ๋ก ๋งต๋ฆฌ๋์ค ์์ ์์, ๋งต ํ์คํฌ์ ๋ฆฌ๋์ค ํ์คํฌ ์ฌ์ด์ ๋ฐ์ดํฐ ์ ๋ฌ ๊ณผ์ ์ธ โ์ ํ(Shuffle)โ์ ์ํํ ์ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋งต ํ์คํฌ๋ ๊ฐ ๋ ธ๋์ NodeManager๊ฐ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋(Container) ๋ด์์ ์คํ๋ฉ๋๋ค. ๋งต ํ์คํฌ๊ฐ ์์ ํ ์ค๊ฐ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ ๋ฆฌ๋์ค ํ์คํฌ๊ฐ ์คํ๋๋ ๋ค๋ฅธ ๋ ธ๋์ ์ปจํ ์ด๋๋ก ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, NodeManager๋ ์ปจํ ์ด๋ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๋ฉด ํด๋น ์ปจํ ์ด๋๋ฅผ ์ฆ์ ์ข ๋ฃํฉ๋๋ค. ๋ง์ฝ ๋งต ํ์คํฌ๊ฐ ๋๋๋ฉด์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๋ฉด, ๋งต ํ์คํฌ๊ฐ ๋ง๋ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ฆฌ๋์ค ํ์คํฌ์ ์ ๋ฌํ ์ ์๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ฆฌ๋์ค ํ์คํฌ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ง ๋ชปํด ๋ฆฌ๋์ค ์์ ์ ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ฆ, ๋งต ํ์คํฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ผ์ง๋ฉด, ๋ฆฌ๋์ค ์์ ์ ์ํํ ์ ์๊ฒ ๋์ด ์ ์ฒด ์์ ํ๋ฆ์ด ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด YARN์ Auxiliary Service๋ฅผ ํตํด NodeManager ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์กํ ์ ์๋ ๋ณ๋์ ์๋น์ค ์ฑ๋์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๋๋ผ๋ ๋งต์์ ๋ฆฌ๋์ค๋ก์ ๋ฐ์ดํฐ ์ ๋ฌ(์ ํ)์ด ์ํํ ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Auxiliary Service๋ ๋งต๋ฆฌ๋์ค ์์ ์ ํต์ฌ ๋จ๊ณ์ธ ์ ํ ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ํ์์ ์ธ ๋ณด์กฐ ๊ธฐ๋ฅ์ ๋๋ค. ์ถ์ฒ : YARN Application Master ์ข ๋ฃ ๋จ๊ณ ๋์ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ResourceManager์๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์คํ์ ์์ฒญํฉ๋๋ค. ResourceManager๋ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ApplicationMaster๋ฅผ ์คํํฉ๋๋ค. YARN์ ๋งต๋ฆฌ๋์ค ์ดํ๋ฆฌ์ผ์ด์ ์ ApplicationMaster๋ก MRAppMaster๋ฅผ ์ ๊ณตํฉ๋๋ค. ResourceManager๊ฐ ApplicationMaster ์คํ์ ์์ฒญํ๋ฉด NodeManager๊ฐ ์ปจํ ์ด๋์์ MRAppMaster๋ฅผ ์คํํฉ๋๋ค. MRAppMaster๋ ๋ค๋ฅธ NodeManager์๊ฒ ๋งต ํ์คํฌ ์คํ์ ์์ฒญํฉ๋๋ค. NodeManager๋ ์ปจํ ์ด๋์์ ๋งต ํ์คํฌ๋ฅผ ์คํํฉ๋๋ค. ๋งต ํ์คํฌ๊ฐ ์ํํ ๊ฒฐ๊ณผ๋ ์ ํ ๊ณผ์ ์ ํตํด ๋ฆฌ๋์ค ํ์คํฌ์ ์ ๋ฌ๋ฉ๋๋ค. ์ ํ(Shuffle)์ ๋ด๋นํ๋ ๊ธฐ๋ณธ ํด๋์ค๋ ํ๋ก์ mapred ํจํค์ง์ ๊ตฌํ๋ ShuffleHandler์ ๋๋ค. ๐ก ์์ ์๋ฅผ ๋ค์ด, ๋งต ํ์คํฌ๊ฐ ๋ ธ๋ A์ ์ปจํ ์ด๋์์ ์คํ๋๊ณ , ๋ฆฌ๋์ค ํ์คํฌ๊ฐ ๋ ธ๋ B์์ ์คํ๋ ๋, ๋ ธ๋ A์ NodeManager๋ Auxiliary Service๋ฅผ ํตํด ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ ธ๋ B์ NodeManager๋ก ์ ๋ฌํฉ๋๋ค. ์ด ๊ณผ์ ์์ ShuffleHandler๊ฐ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ค๊ณํ๋ฉฐ, ๋งต๊ณผ ๋ฆฌ๋์ค ์ฌ์ด ๋ฐ์ดํฐ ์ ๋ฌ์ด ๋๊ธฐ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๐ 1.3.9. Pluggable Shuffle ๋ฐ Pluggable Sort ์ค์ Pluggable Shuffle ๋ฐ Pluggable Sort๋ ์ด Auxiliary Service ์์์ ๋์ํ๋, ์ ํ ๋จ๊ณ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉ์ ์ ์(customize)ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฆ, ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์์ง(ShuffleConsumerPlugin)ํ๊ณ ์ ๋ ฌ(MapOutputCollector)ํ ์ง๋ฅผ ํ๋ฌ๊ทธ์ธ ํํ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ค์ ๋งํด, Auxiliary Service๋ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ โ๊ธฐ๋ฐ ์ธํ๋ผโ์ด๊ณ , Pluggable Shuffle/Sort๋ ๊ทธ ์์์ ์๋ํ๋ โ๋์ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์งํ๋ ๊ธฐ๋ฅโ์ ๋๋ค. Auxiliary Service๋ ๋งต๋ฆฌ๋์ค์ ์ ํ๊ณผ ์ ๋ ฌ ๋์์ ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค. Job ์ ์ถ ์ ์ค์ Job configuration์ ์ธํฐํ์ด์ค ๊ตฌํ์ฒด(์: ShuffleConsumerPlugin, MapOutputCollector)๋ฅผ ํฌํจํ ํด๋์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ํด๋์ค๋ค์ ํด๋น Job ํจํค์ง ๋ด์ ์์นํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, job-conf.xml ํน์ ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ด์์ ๊ด๋ จ ํด๋์ค๋ฅผ ์ง์ ํ์ฌ ํน์ ์ ํ ๋์์ ์ปค์คํฐ๋ง์ด์งํฉ๋๋ค. yarn-site.xml ์ค์ ํด๋ฌ์คํฐ์ ๋ฐฐํฌ๋ ๋ชจ๋ ๋ ธ๋์ yarn-site.xml ํ์ผ์ auxiliary-services ๋ฐ ๊ด๋ จ ์๋น์ค ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ฌ์คํฐ ์ ์ฒด์ ์ปค์คํ Auxiliary Service๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ต๋๋ค. <property> <name>yarn.app.mapreduce.aux-services</name> <value>shuffle</value> </property> <property> <name>yarn.app.mapreduce.aux-services.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> ๐ก ์์ ๋ง์ฝ ํน์ ํ์ฌ์์ ์์ฒด ๊ฐ๋ฐํ ์ ํ ์ต์ ํ ๋ก์ง์ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด, Job ์ ์ถ ์์ ShuffleConsumerPlugin ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ํด๋ฌ์คํฐ ์ ๋ฐ์ ์ ์ฉํ ๊ฒฝ์ฐ yarn-site.xml์ ํด๋น aux-service ์ค์ ์ ๋ฐฐํฌํด ์ ํ ๋์์ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค. ์ฐธ๊ณ ํด๋น ๋ด์ฉ์ YARN ๊ณต์ ๋งค๋ด์ผ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค. ๐ 2. YARN ์ํคํ ์ฒ ์ฌํ ์์์๋ YARN ์ ํ๋ฆ์ ๋ํด์ ์์๋ณด์์ต๋๋ค. ๊ทธ ์ค ์ค์ํ Resource Manager ์, Node Manager ์ ๋ํ ์ข ๋ ์ฌํ์ ์ธ ๋ด์ฉ์ ๋ช ๊ฐ์ง ๊ณต๋ถํ์ฌ, ์ ๋ฆฌํ๊ณ ๊ฐ๊ณ ์ ํฉ๋๋ค. ๐ 2.1. Resource Manager ์ฌํ ์ถ์ฒ : YARN ์ฌํ Resource Manager YARN์ ResourceManager๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋๋ ์ญํ ์ ํฉ๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ค์์์ ํตํฉ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋ฐ ํ์ํ ์์์ ์ ์ ํ ๋ถ๋ฐฐํ๊ณ ์กฐ์ ํฉ๋๋ค. ๐ 2.1.1. RM โ Client ์ํธ์์ฉํ๋ Component ๐น ClientService ClientService๋ ResourceManager(RM)์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ํต์ ์ธํฐํ์ด์ค์ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ YARN ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ถํ๊ฑฐ๋, ์ํ๋ฅผ ์กฐํํ๊ฑฐ๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์งํ๋ ๋ฑ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ด ์ปดํฌ๋ํธ๊ฐ ์ด๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ application submission, termination, queue ์ ๋ณด ์กฐํ, ํด๋ฌ์คํฐ ํต๊ณ ์กฐํ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค. ๐ก ์์ ์ฌ์ฉ์๊ฐ yarn jar MyApp.jar ๋ช ๋ น์ด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ถํ๋ฉด, ํด๋น ์์ฒญ์ ClientService๋ฅผ ํตํด RM์ ์ ๋ฌ๋ฉ๋๋ค. ๐น AdminService ์ผ๋ฐ ์ฌ์ฉ์์ ๊ด๋ฆฌ์์ ์์ฒญ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์กด์ฌํ๋ ์ปดํฌ๋ํธ์ ๋๋ค. AdminService๋ฅผ ํตํด ์ค๋ ์์ฒญ์ ๋ณดํต ์์คํ ์ด์์๊ฐ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ client ์์ฒญ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๐ก ์์ ํด๋ฌ์คํฐ ์ด์์๊ฐ ํน์ ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์์ ์ ์ธํ๊ณ ์ถ์ ๋, AdminService๋ฅผ ํตํด node list๋ฅผ refreshํฉ๋๋ค. ๐ 2.1.2. RM โ NM ์ํธ์์ฉํ๋ Component ๐น ResourceTrackerService ResourceTrackerService๋ ResourceManager์ ๊ฐ NodeManager ๊ฐ์ ํต์ ์ ๋ด๋นํ๋ฉฐ, ๊ฐ ๋ ธ๋์ ์ํ(์: ๊ฐ์ฉ ์์, ์คํ ์ค์ธ ์ปจํ ์ด๋ ๋ฑ)๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ํฉ๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ๋ ธ๋ ๋ฑ๋ก/์ญ์ , ์ํ ๋ณด๊ณ (heartbeat) ๋ฑ์ ์ฒ๋ฆฌํ๋ฉฐ, YarnScheduler, NMLivelinessMonitor, NodesListManager์ ๋ฐ์ ํ๊ฒ ์ฐ๋๋ฉ๋๋ค. ๐ก ์์ ์ด๋ค NodeManager๊ฐ ์๋ก ์์๋๋ฉด ์์ ์ RM์ ๋ฑ๋กํ๊ธฐ ์ํด ResourceTrackerService์ RPC๋ฅผ ์ ์กํฉ๋๋ค. ๐น NMLivelinessMonitor ์ด ์ปดํฌ๋ํธ๋ ๋ชจ๋ ๋ ธ๋์ ์ํ๋ฅผ ์์กด(live) ๋๋ ์ฃฝ์(dead) ์ผ๋ก ํ๋จํฉ๋๋ค. ๊ฐ ๋ ธ๋๊ฐ ์ผ์ ์๊ฐ(๊ธฐ๋ณธ 10๋ถ) ์ด์ heartbeat๋ฅผ ๋ณด๋ด์ง ์์ผ๋ฉด ํด๋น ๋ ธ๋๋ฅผ dead ์ํ๋ก ๊ฐ์ฃผํฉ๋๋ค. ๐ก ์์ ํน์ ๋ ธ๋๊ฐ ํ๋์จ์ด ๋ฌธ์ ๋ก ์ ์ง๋์ด heartbeat๋ฅผ ๋ณด๋ด์ง ๋ชปํ๋ฉด, ์ด ์ปดํฌ๋ํธ๊ฐ ์ด๋ฅผ ๊ฐ์งํ๊ณ RM์ ํด๋น ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ฆฌ์์ค๋ฅผ ์ค์ผ์ค๋งํฉ๋๋ค. ๐น NodesListManager ์ด ์ปดํฌ๋ํธ๋ ํด๋ฌ์คํฐ์ ํฌํจ๋ ๋ ธ๋๋ค์ ๋ชฉ๋ก์ ๊ด๋ฆฌํฉ๋๋ค. host inclusion/exclusion ๋ชฉ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ์ ํจํ ๋ ธ๋๋ฅผ ํ๋จํ๊ณ , ๊ด๋ฆฌ์๊ฐ ์ ์ธ์ํจ ๋ ธ๋๋ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค. ๐ก ์์ ์ด์์๊ฐ dfs.exclude ํ์ผ์ ๋ ธ๋ A๋ฅผ ์ถ๊ฐํ๋ฉด, NodesListManager๋ ์ด๋ฅผ ๊ฐ์งํ์ฌ ํด๋น ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์์ ์ ๊ฑฐํฉ๋๋ค. ๐ 2.1.3. RM โ AM ์ํธ์์ฉํ๋ Component ๐น ApplicationMasterService ์ด ์๋น์ค๋ ๋ชจ๋ AM(ApplicationMaster)์ผ๋ก๋ถํฐ ์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ ๋์, ์ปจํ ์ด๋ ์์ฒญ, ํ ๋น ํด์ , ๋ฑ๋ก ๋ฐ ์ข ๋ฃ ์์ฒญ ๋ฑ์ ์ฒ๋ฆฌํฉ๋๋ค. ๐ก ์์ ApplicationMaster๊ฐ 3๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฒญํ ๋ ์ด ์์ฒญ์ ApplicationMasterService๋ฅผ ํตํด RM์ ์ ๋ฌ๋๊ณ , ์ดํ YarnScheduler๊ฐ ํด๋น ์์ฒญ์ ๊ฒํ ํด ์์์ ํ ๋นํฉ๋๋ค. ๐น AMLivelinessMonitor AMLivelinessMonitor๋ ๊ฐ ApplicationMaster์ ์์กด ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค. AM์ด heartbeat๋ฅผ ๋ณด๋ด์ง ์์ผ๋ฉด, RM์ ํด๋น AM์ ์คํจ๋ก ๊ฐ์ฃผํ๊ณ ๋ณต๊ตฌ ์์ ์ ์ํํฉ๋๋ค. ๐ก ์์ AM์ด ์ค์๋ํ๊ฑฐ๋ JVM ํฌ๋์๋ก ์ธํด ์ฃฝ์ผ๋ฉด, ์ด ์ปดํฌ๋ํธ๊ฐ ์ด๋ฅผ ๊ฐ์งํ๊ณ RM์ ์๋ก์ด AM์ ์ฌ์คํํ ์ ์๋๋ก ์ค๋นํฉ๋๋ค. ๐ 2.1.4. RM ํต์ฌ: ์ค์ผ์ค๋ฌ์ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ๐น ApplicationsManager ApplicationsManager๋ ํด๋ฌ์คํฐ์ ์ ์ถ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ๋ณด, ์ํ ์ถ์ , ์๋ฃ๋ ์ ํ๋ฆฌ์ผ์ด์ ์บ์ ๋ฑ์ ์ ์งํฉ๋๋ค. ๐ก ์์ yarn application -status ๋ช ๋ น์ด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ์ ์ด ์ปดํฌ๋ํธ ๋๋ถ์ ๋๋ค. ๐น ApplicationACLsManager Application ๋จ์์ ์ ๊ทผ ์ ์ด(Authorization) ๋ฅผ ๋ด๋นํฉ๋๋ค. ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์ ๊ทผ์ด ํ์ฉ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ACL ํํ๋ก ๊ด๋ฆฌํฉ๋๋ค. ๐ก ์์ ํน์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์กฐํํ๋ ค๊ณ ํ ๋, ์ด ์ปดํฌ๋ํธ๊ฐ ACL์ ํ์ธํ์ฌ ์ ๊ทผ ๊ถํ์ด ์๋์ง๋ฅผ ํ๋จํฉ๋๋ค. ๐น ApplicationMasterLauncher ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด RM์ ์ ์ถ๋๋ฉด, ์ด ์ปดํฌ๋ํธ๊ฐ ApplicationMaster ์ปจํ ์ด๋๋ฅผ ์คํ์ํต๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ํ์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก ApplicationMaster๋ฅผ ์์ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ๐ก ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ ํ AM์ด ์คํ๋์ง ์๋ ๊ฒฝ์ฐ, ์ด ์ปดํฌ๋ํธ๊ฐ ์ ์ ํ NodeManager์ AM ์ปจํ ์ด๋๋ฅผ ๋ฐฐ์นํ์ง ๋ชปํ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๐น YarnScheduler YARN์์ ์์ ํ ๋น์ ์ค์ ๋ก ์ํํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค. ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ๋ฉ๋ชจ๋ฆฌ, CPU, ๋์คํฌ, ๋คํธ์ํฌ ๋ฑ์ ์์์ ์ค์ผ์ค๋งํฉ๋๋ค. ๐ก ์์ ApplicationMaster๊ฐ 2GB ๋ฉ๋ชจ๋ฆฌ์ 2 vCore๊ฐ ํ์ํ ์ปจํ ์ด๋๋ฅผ ์์ฒญํ๋ฉด, YarnScheduler๋ ํ์ฌ ๊ฐ์ฉํ ์์์ ํ์ธํ๊ณ ์ ์ ํ NodeManager์ ์ปจํ ์ด๋๋ฅผ ํ ๋นํฉ๋๋ค. ๐น ContainerAllocationExpirer ์ด ์ปดํฌ๋ํธ๋ ํ ๋น๋ ์ปจํ ์ด๋๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์์ผ๋ฉด ๋ง๋ฃ(expire) ์ํค๋ ์ญํ ์ ํฉ๋๋ค. AM์ด ์ปจํ ์ด๋๋ฅผ ํ ๋น๋ฐ์์ง๋ง ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ํด๋น ์ปจํ ์ด๋๋ฅผ ํ์ํฉ๋๋ค. ๐ก ์์ AM์ด ํ ์คํธ ๋ชฉ์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฒญํ ํ ์ฌ์ฉํ์ง ์๊ณ ๊ทธ๋๋ก ๋๋ฉด, ์ด ์ปดํฌ๋ํธ๊ฐ ์ผ์ ์๊ฐ ์ดํ ์ด๋ฅผ ํ์ํ์ฌ ์์์ ๋ญ๋นํ์ง ์๋๋ก ํฉ๋๋ค ๐ 2.1.5. TokenSecretManagers ๋ณด์ ์ปดํฌ๋ํธ YARN์์๋ ๋ชจ๋ ํต์ ์ ์ธ์ฆ๋ RPC ๋ก ์ํํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ฌ๋ฌ ์ข ๋ฅ์ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ ์ ํ ์ธ์ฆ ์ ๋ณด๋ฅผ ํตํด ์๋ก๋ฅผ ์๋ณํฉ๋๋ค. ๐น ApplicationTokenSecretManager ApplicationMaster๊ฐ RM๊ณผ ํต์ ํ ์ ์๋๋ก ์ธ์ฆ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ณ๋ก ๊ถํ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ ํจํ ํ ํฐ์ ๊ฐ์ง AM๋ง์ด ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๐ก ์์ ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ ํฐ ์์ด RM์ ์์ ์์ฒญ์ ํ๋ฉด, ์ด ์ปดํฌ๋ํธ๊ฐ ์ด๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ๐น ContainerTokenSecretManager AM์ด NodeManager์ ์ปจํ ์ด๋ ์คํ ์์ฒญ์ ๋ณด๋ผ ๋ ํ์ํ Container Token์ ๋ฐ๊ธํ๊ณ ๊ฒ์ฆํฉ๋๋ค. ํด๋น ํ ํฐ์ ํตํด ์ปจํ ์ด๋๊ฐ ํฉ๋ฒ์ ์ผ๋ก ์คํ๋์๋์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๐ก ์์ RM์ด AM์๊ฒ ์ปจํ ์ด๋ ์คํ ์ ๋ณด๋ฅผ ์ฃผ๋ฉด์ ํจ๊ป Container Token์ ์ ๋ฌํฉ๋๋ค. ์ด ํ ํฐ์ด ์๋ค๋ฉด NodeManager๋ ํด๋น ์์ฒญ์ ๊ฑฐ๋ถํฉ๋๋ค. ๐น RMDelegationTokenSecretManager ํด๋ผ์ด์ธํธ๊ฐ RM๊ณผ ์ธ์ฆ๋ ํต์ ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ Delegation Token์ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ฃผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ฅ์๊ฐ ์ธ์ฆ ์์ด ํต์ ์ ์ ์งํ ์ ์๋๋ก ๋์ต๋๋ค. ๐ก ์์ HDFS์์ long-running job์ด ์คํ ์ค์ผ ๋, ์ค๊ฐ์ ์ฌ์ธ์ฆ ์์ด ์ง์์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ค๋ฉด delegation token์ด ํ์ํฉ๋๋ค. ๐ 2.2. Node Manager ์ฌํ ์ถ์ฒ : YARN ์ฌํ Node Manager NodeManager๋ YARN ํด๋ฌ์คํฐ์ ๊ฐ ์์ปค ๋ ธ๋์์ ์คํ๋๋ ์ปดํฌ๋ํธ๋ก, ์ปจํ ์ด๋์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๊ณ , ๋ก์ปฌ ์์์ ๋ชจ๋ํฐ๋งํ๋ฉฐ, ๋ฆฌ์์ค ์ํ ์ ๋ณด๋ฅผ ResourceManager(RM) ์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ( ๋ฆฌ์์ค ๋งค๋์ ๋ ์ค์ ์๋ฒ 1๊ณณ์์๋ง ์คํ๋์ง๋ง, ๋ ธ๋ ๋งค๋์ ๋ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ์์ปค ๋ ธ๋์์ ์คํ๋ฉ๋๋ค. ) NodeManager๋ ๋ค์๊ณผ ๊ฐ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๐ 2.2.1 NodeStatusUpdater NodeStatusUpdater๋ NodeManager๊ฐ ์์๋ ๋ ResourceManager์ ์์ ์ ๋ฑ๋กํ๊ณ , ํด๋น ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์ปดํฌ๋ํธ์ ๋๋ค. ์ดํ ์ฃผ๊ธฐ์ ์ผ๋ก ์ปจํ ์ด๋ ์ํ, ์์ ์ฌ์ฉ ํํฉ, ๋ ธ๋ ์ํ ๋ฑ์ RM์ ์ ์กํฉ๋๋ค. RM์ NodeStatusUpdater๋ฅผ ํตํด ์ปจํ ์ด๋ ์ข ๋ฃ ๋ช ๋ น ๋ฑ์ ์ ๋ฌํ ์ ์์ต๋๋ค. ๐ก ์์ NodeManager๊ฐ โ์๋ฒ-01โ์์ ์์๋๋ฉด, NodeStatusUpdater๊ฐ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ 32GB, CPU 16์ฝ์ด ๋ฑ์ ์ ๋ณด๋ฅผ RM์ ์ ์กํ๊ณ , ์ดํ ํด๋น ๋ ธ๋์ ์ปจํ ์ด๋ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ๐ 2.2.2 ContainerManager ContainerManager๋ NodeManager์ ํต์ฌ ์ปดํฌ๋ํธ๋ก, ์ปจํ ์ด๋์ ์์ฑ, ์คํ, ๋ชจ๋ํฐ๋ง, ์ข ๋ฃ๋ฅผ ๋ด๋นํฉ๋๋ค. ๋ค์์ ํ์ ๊ตฌ์ฑ ์์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค: ๐นRPC Server ApplicationMaster(AM)์ ์์ฒญ์ ์์ ํ์ฌ ์๋ก์ด ์ปจํ ์ด๋์ ์คํ์ ์์ํ๊ฑฐ๋ ์ค์งํ๋ ์๋ฒ์ ๋๋ค. ์์ฒญ์ ์ธ์ฆ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ฉฐ, ๋ก๊ทธ๋ ๊ฐ์ฌ์ฉ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๐ก ์์ AM์ด job-1234๋ฅผ ์ํด ์ปจํ ์ด๋ ์คํ ์์ฒญ์ ๋ณด๋ด๋ฉด, RPC Server๊ฐ ์ด๋ฅผ ์๋ฝํ๊ณ ํด๋น ์์ ์ ์คํํฉ๋๋ค. ๐นResourceLocalizationService ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ๋์คํฌ์ ๋ฐฐํฌํ์ฌ ์ปจํ ์ด๋๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ ๊ทผ ๊ถํ ๋ฐ ์ฌ์ฉ ์ ํ ์ ์ฑ ๋ ํจ๊ป ์ ์ฉ๋ฉ๋๋ค. ๐ก ์์ Spark ์คํ ์ ํ์ํ JAR ํ์ผ๋ค์ ๋ฏธ๋ฆฌ ๋ค์ด๋ฐ์ ์ปจํ ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ๊ณ , ํด๋น ์ปจํ ์ด๋๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํฉ๋๋ค. ๐นContainersLauncher ์ปจํ ์ด๋ ์คํ์ ์ํ ์ค๋ ๋ ํ์ ๊ด๋ฆฌํ๋ฉฐ, ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ฒ ์์ํ๊ณ , ์ข ๋ฃ ์์ฒญ ์ ํ๋ก์ธ์ค๋ฅผ ์ ๋ฆฌํฉ๋๋ค. ๐ก ์์ RM์ด job-5678์ ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํ๋ผ๊ณ ๋ช ๋ นํ๋ฉด, ContainersLauncher๋ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ฐพ์ ์ข ๋ฃํฉ๋๋ค. ๐นAuxServices (๋ณด์กฐ ์๋น์ค) ํน์ ํ๋ ์์ํฌ(Hive, Spark ๋ฑ)์์ ์๊ตฌํ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํ๋ฌ๊ทธ์ธ ๋ฐฉ์์ผ๋ก ์ง์ํ๋ ๊ตฌ์กฐ์ ๋๋ค. NodeManager ์์ ์ ์ ์ค์ ํด์ผ ํ๋ฉฐ, ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ปจํ ์ด๋ ์์/์ข ๋ฃ ์ ์๋ฆผ์ ๋ฐ์ต๋๋ค. ๐ก ์์ ShuffleHandler๋ MapReduce์ Reduce ์์ ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ณด์กฐ ์๋น์ค๋ก, AM๊ณผ ์ฐ๋ํ์ฌ ๋์ํฉ๋๋ค. ๐นContainersMonitor ์คํ ์ค์ธ ๊ฐ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ์ ์์ ์ฌ์ฉ๋์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ง์ ๋ ํ ๋น๋์ ์ด๊ณผํ ๊ฒฝ์ฐ ํด๋น ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํฉ๋๋ค. ๐ก ์์ Container-XYZ๊ฐ 4GB ํ ๋น์ ๋ฐ์์ง๋ง, 6GB๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ContainersMonitor๋ RM์ ์ ์ฑ ์ ๋ฐ๋ผ ํด๋น ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํฉ๋๋ค. ๐นLogHandler ์ปจํ ์ด๋ ์คํ ์ค ์์ฑ๋๋ ๋ก๊ทธ๋ฅผ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅํ๊ฑฐ๋ ์์ถํ์ฌ ์ ๋ก๋ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ก๊ทธ ํธ๋ค๋ง์ ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ๋ก ๋์ด ์์ด ๊ต์ฒด๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๐ก ์์ ์ปจํ ์ด๋๊ฐ ์ถ๋ ฅํ stdout/stderr ๋ก๊ทธ๋ฅผ /logs/job123/container456.log ๊ฒฝ๋ก์ ์ ์ฅํ๊ฑฐ๋, HDFS์ ์ ๋ก๋ํ ์ ์์ต๋๋ค. ๐ 2.2.3 ContainerExecutor ContainerExecutor๋ OS์ ์ง์ ์ํธ ์์ฉํ์ฌ, ์ปจํ ์ด๋ ์คํ์ ์ํ ๋๋ ํ ๋ฆฌ/ํ์ผ ๋ฐฐ์น, ๋ณด์ ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ค ์์/์ข ๋ฃ, ์คํ ํ ์ ๋ฆฌ(clean-up) ์์ ์ ์ํํฉ๋๋ค. ์ปจํ ์ด๋์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด user-per-container ์คํ ๋ชจ๋ธ์ด๋ Docker ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ๐ 2.2.4 NodeHealthCheckerService ์ด ์๋น์ค๋ ๋ ธ๋ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ๋ฉฐ, ๋์คํฌ์ ์ํ๋ฅผ ์ ๊ฒํ๊ธฐ ์ํด ์์ ํ์ผ์ ์์ฑํ๊ณ ์ญ์ ํฉ๋๋ค. ์ํ ๋ณํ๊ฐ ๊ฐ์ง๋๋ฉด NodeStatusUpdater๋ฅผ ํตํด RM์ ์ ๋ฌ๋ฉ๋๋ค. ๐ก ์์ /tmp ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์์ฑํด๋ณด๊ณ , ์์ฑ/์ญ์ ์๋๋ฅผ ํตํด ๋์คํฌ ์ํ๋ฅผ ํ๋จํ ์ ์์ต๋๋ค. ๋์คํฌ I/O ์ง์ฐ์ด ํฌ๋ฉด ๋ ธ๋๋ฅผ โ๋น์ ์ ์ํโ๋ก ํ์ํฉ๋๋ค. ๐ 2.2.5 Security: ContainerTokenSecretManager ์ปจํ ์ด๋ ์คํ ์์ฒญ์ด ์ ์์ ์ธ ResourceManager๋ก๋ถํฐ ์จ ๊ฒ์ธ์ง ํ์ธํ๋ ๋ณด์ ์ปดํฌ๋ํธ์ ๋๋ค. Token ๊ธฐ๋ฐ ์ธ์ฆ์ ํตํด ์์กฐ๋ ์คํ ์์ฒญ์ ๋ฐฉ์งํฉ๋๋ค. ๐ก ์์ ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ RM์ ํตํ์ง ์๊ณ ์ง์ NodeManager์ ์ปจํ ์ด๋ ์คํ ์์ฒญ์ ๋ณด๋ด๋๋ผ๋, ์ ํจํ ํ ํฐ์ด ์์ผ๋ฉด ์คํ์ด ๊ฑฐ๋ถ๋ฉ๋๋ค. โ ๐ 3. YARN scheduler ์ Queue ์ถ์ฒ : YARN Scheduler ์์์๋ ์ ๋งคํด์ ํ ๋ฒ์ ์ ๋ฆฌํ์ง ๋ชปํ๊ณ , YARN Scheduler ๋ ์ด๋ ๊ฒ ๋ฐ๋ก ์ ๋ฆฌํฉ๋๋ค. YARN Scheduler๋ ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ, ์ผ๋ง๋ ํ ๋นํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋ฆฌ์์ค ํ ๋น ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋ค์ํ ์ค์ ๊ฐ์ ํตํด ํด๋ฌ์คํฐ ์์์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. YARN์ ๊ธฐ๋ณธ์ ์ผ๋ก Hadoop ํ๋ซํผ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ถ๋๋ฉด ๋จผ์ Application Master(AM) ์ด ์์ฑ๋๊ณ , ์ดํ ์๋์ ๊ฐ์ ์ ์ฐจ๊ฐ ์งํ๋ฉ๋๋ค. ์ด ๊ณผ์ ์์ AM์ ResourceManager(RM) ์๊ฒ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉฐ, RM์ Scheduler๋ฅผ ํตํด ์ ์ ํ ์์ ๋ฆฌ์์ค๋ฅผ ์ด๋ค ๋ ธ๋์ ํ ๋นํ ์ง ๊ฒฐ์ ํฉ๋๋ค. Scheduler์ ์ข ๋ฅ๋ก๋ ์๋ 3๊ฐ์ง๊ฐ ์กด์ฌํฉ๋๋ค. ์ด ์ค Capacity scheduler๊ฐ ๊ธฐ๋ณธ default ๊ฐ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ๐ 3.1. FIFO scheduler ์ถ์ฒ : YARN FIFO scheduler FIFO ์ค์ผ์ค๋ฌ๋ ์์ ์ด ํด๋ฌ์คํฐ์ ์ ์ถ๋ ์์๋๋ก ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. ์ฆ, ๊ฐ์ฅ ๋จผ์ ์ ์ถ๋ ์์ ์ด ๊ฐ์ฅ ๋จผ์ ์คํ๋๊ณ , ๊ทธ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง๋ ๋ค์ ๋๊ธฐ ์ค์ธ ์์ ๋ค์ ์คํ๋์ง ์์ต๋๋ค. ๋์ ๋ฐฉ์์ ๋งค์ฐ ๋จ์ํฉ๋๋ค. ๋ฆฌ์์ค ๋งค๋์ (ResourceManager)๋ ์์ ์ด ๋ค์ด์จ ์์๋๋ก ์์ ํ์ ์๊ณ , ์์์ด ์ถฉ๋ถํ ๋๋ง๋ค ํ์์ ๊ฐ์ฅ ์์ ์๋ ์์ ์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํด ์คํ์ ์์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A ์์ ์ด ๋จผ์ ์ ์ถ๋์ด ํด๋ฌ์คํฐ์ ์์์ ๋ชจ๋ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ๊ทธ ์์ ์ด ์๋ฃ๋ ๋๊น์ง B ์์ ์ ๋๊ธฐ ์ํ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์์ ์ฐ์ ์์ ์กฐ์ ์ด ์๊ณ , ๊ธด ์์ ์ด ์์ ์์ ๊ฒฝ์ฐ ๋ค์ ์๋ ์งง์ ์์ ์ด ๊ธด ์๊ฐ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋จ์ ์ด ์์ต๋๋ค. ๐ 3.2. Fair scheduler ์ถ์ฒ : YARN Fair Scheduler Fair Scheduler๋ ์ฌ๋ฌ ์ฌ์ฉ์์ ์์ ๋ค์ด ํด๋ฌ์คํฐ ์์์ ๊ณต์ ํ๊ฒ ๋๋์ด ์ฐ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์์ ๋ค์ ๊ฐ๊ฐ Pool์ด๋ผ๋ ์์ ๊ทธ๋ฃน์ ๋ฐฐ์ ๋ฉ๋๋ค. ๊ฐ Pool์ ์ต์ ๋ณด์ฅ ๋ฆฌ์์ค๋ฅผ ์ค์ ํ ์ ์์ด, ์์ ๊ทธ๋ฃน์ด๋ ์ฌ์ฉ์๊ฐ ์ ์ด๋ ์ผ์ ๋์ ์์์ ํ๋ณดํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ง์ฝ ์ด๋ค Pool์ด ํ์ฌ ํ ๋น๋ฐ์ ์์์ ๋ค ์ฌ์ฉํ์ง ์์ผ๋ฉด, ๋จ๋ ์์์ ๋ค๋ฅธ Pool์ด ์ผ์์ ์ผ๋ก ๋ ์ธ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Pool A์ Pool B๊ฐ ๊ฐ๊ฐ 30%, 70%์ ์ต์ ์์์ ๋ณด์ฅ๋ฐ๊ณ ์๋๋ฐ, Pool B๊ฐ ํ์ฌ 50%๋ง ์ฌ์ฉํ๊ณ ์๋ค๋ฉด Pool A๊ฐ ์ต๋ 50%๊น์ง ํ์ฅํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Fair Scheduler๋ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋ฌ์คํฐ ๋ด ์์ ๋ค์ ์์ ์ฌ์ฉ๋์ ์ฒดํฌํ๋ฉฐ, ์์ ๋ฐฐ๋ถ์ ์กฐ์ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์์์ ๋ง์ด ์ด ์์ ์ ์ ์ ๋๊ธฐ์ํค๊ณ , ์ ๊ฒ ์ด ์์ ์ ๋ ๋ง์ ์์์ ๋ฐฐ๋ถํด ์ ์ฒด ์ฌ์ฉ์์ ๊ณต์ ์ฑ์ ์ ์งํฉ๋๋ค. ์ด ์ค์ผ์ค๋ฌ๋ ์์ ์ด ๋๋์ง ์์๋ ์์์ ๋ค์ ์ฌ๋ถ๋ฐฐํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ธด ์์ ๊ณผ ์งง์ ์์ ์ด ํผ์ฌ๋ ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์์ ํ์ฉ๊ณผ ์์ ๊ณต์ ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๐ 3.3. Capacity scheduler ์ถ์ฒ : YARN Capacity Scheduler Capacity Scheduler๋ YARN์ ๋ํ์ ์ธ ์ค์ผ์ค๋ง ์ ์ฑ ์ค ํ๋๋ก, ํ๋์ ํด๋ฌ์คํฐ ์์์ ์ฌ๋ฌ ์ฌ์ฉ์๋ ํ์ด ๊ณต์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๊ณต์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด ์ค์ผ์ค๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Queue(ํ) ๋จ์๋ฅผ ํตํด ํด๋ฌ์คํฐ ์์์ ๋ถ๋ฐฐํ๋ฉฐ, ๊ฐ Queue๋ง๋ค ์ต์ ๋ฐ ์ต๋ ๋ฆฌ์์ค ๋น์จ์ ์ค์ ํ ์ ์์ต๋๋ค. Capacity Scheduler๋ root ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ธต์ ๊ตฌ์กฐ์ Queue๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ๊ฐ Queue๋ ๋ถ๋ชจ Queue๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต์(min)์ ์ต๋(max) ์ฉ๋(capacity)์ ์ง์ ํ ์ ์์ต๋๋ค. Leaf Queue๋ค(๊ฐ์ฅ ํ์ ํ)์ ํฉ์ณ์ 100%์ min capacity๋ฅผ ๊ฐ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ๋ํ, Capacity Scheduler๋ Queue ๊ฐ์ ๋ฆฌ์์ค ์ ์ฐ์ฑ(Elasticity)์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A ํ์ ์ค์ ์ฉ๋์ด 20%, B ํ๊ฐ 80%์ธ ๊ฒฝ์ฐ, B ํ์ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด A ํ๊ฐ ์ผ์์ ์ผ๋ก ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ฆฌ์์ค ํ์ฉ๋ฅ ์ ๊ทน๋ํํ ์ ์์ต๋๋ค. โ ์ฃผ์ ์ค์ ์ต์ Property ์ค๋ช yarn.scheduler.capacity.root.queues root Queue ํ์์ ์์ฑํ Queue ๋ชฉ๋ก yarn.scheduler.capacity.root.{Queue ์ด๋ฆ}.queues ํน์ Queue์ ํ์ Queue ๋ชฉ๋ก yarn.scheduler.capacity.root.{Queue ์ด๋ฆ}.capacity ํด๋น Queue์ ์ต์(min) ๋ฆฌ์์ค ๋น์จ yarn.scheduler.capacity.root.{Queue ์ด๋ฆ}.maximum-capacity ํด๋น Queue์ ์ต๋(max) ๋ฆฌ์์ค ๋น์จ โ Minimum User Percentage & User Limit Factor ํ๋์ Queue ๋ด์์ ๋ค์ ์ฌ์ฉ์์ ๋ฆฌ์์ค ํ ๋น ์ ์ด๋ฅผ ์ํ ์ค์ ์ ๋๋ค. minimum-user-limit-percent : ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๊ทผ ์ ๊ฐ ์ฌ์ฉ์์๊ฒ ์ต์ ๋ณด์ฅ๋๋ ๋ฆฌ์์ค ๋น์จ์ ๋๋ค. ์์๋ก 10%๋ก ์ค์ ์, 10๋ช ์ ์ฌ์ฉ์๊ฐ ์์ ๋ ๊ฐ์๋ ์ต์ 10%๋ฅผ ๋ณด์ฅ๋ฐ์ต๋๋ค. user-limit-factor : ํ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ์ต๋ ๋ฆฌ์์ค์ ๋ฐฐ์์ ๋๋ค. ๊ณ์ฐ์์ ์ต๋ ์ฌ์ฉ๋ = min capacity ร user-limit-factor ์ ๋๋ค. ์๋ฅผ๋ค๋ฉด, min capacity๊ฐ 10%, user-limit-factor๊ฐ 3์ด๋ฉด ํ ์ฌ์ฉ์๊ฐ ์ต๋ 30%๊น์ง ์ฌ์ฉ ๊ฐ๋ฅ. โ ๊ด๋ จ ์ค์ ์ต์ Property ์ค๋ช yarn.scheduler.capacity.root.{Queue ์ด๋ฆ}.user-limit-factor ํด๋น Queue์ ์ฌ์ฉ์ ์ต๋ ์ฌ์ฉ ๋ฐฐ์ yarn.scheduler.capacity.root.{Queue ์ด๋ฆ}.minimum-user-limit-percent ํด๋น Queue์์ ์ฌ์ฉ์๋น ์ต์ ๋ณด์ฅ ๋น์จ โ ๊ธฐํ ์ต์ Property ์ค๋ช yarn.scheduler.capacity.maximum-am-resource-percent ์ ์ฒด ํด๋ฌ์คํฐ์์ AM์ด ์ฌ์ฉํ ์ ์๋ ์ต๋ ๋ฆฌ์์ค ๋น์จ yarn.scheduler.capacity.{Queue ์ด๋ฆ}.maximum-am-resource-percent ํน์ Queue์์ AM์ด ์ฌ์ฉํ ์ ์๋ ์ต๋ ๋ฆฌ์์ค ๋น์จ ๐ก ์ฐธ๊ณ : AM(Application Master)์ ํ ๋น๋๋ ๋ฆฌ์์ค๊ฐ ๋ง์์๋ก, ์์ ์ ์ฒ๋ฆฌํ๋ ์ปจํ ์ด๋์ ํ ๋น๋๋ ๋ฆฌ์์ค๋ ์ค์ด๋ญ๋๋ค. ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน๋ณ Queue ๋งคํ ์ฌ์ฉ์๋ ๊ทธ๋ฃน์ ํน์ Queue์ 1:1๋ก ๋งคํํ ์ ์์ต๋๋ค. ๋งคํ์ด ๋ง์ผ๋ฉด ์๋ ๋งคํ ๊ท์น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ๋ฐฉ์ ์์ ์ค๋ช ์ฌ์ฉ์ 1:1 ๋งคํ u:alice:analytics alice ์ฌ์ฉ์๋ฅผ analytics Queue์ ๋งคํ ๊ทธ๋ฃน ๋งคํ g:dev:devqueue dev ๊ทธ๋ฃน์ devqueue์ ๋งคํ ์๋ ๋งคํ (์ฌ์ฉ์) u:%user.%user ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋์ผํ ์ด๋ฆ์ Queue์ ์๋ ๋งคํ ์๋ ๋งคํ (๊ทธ๋ฃน) g:%user.%primary_group ์ฌ์ฉ์ ๊ธฐ๋ณธ ๊ทธ๋ฃน ์ด๋ฆ๊ณผ ๋์ผํ Queue์ ์๋ ๋งคํ ์ค์ ์์น: yarn.scheduler.capacity.queue-mappings ์ปดํฌ๋ํธ(์์ง)๋ณ Queue ์ง์ ๋ฐฉ๋ฒ ์ปดํฌ๋ํธ ์ค์ ๋ฐฉ๋ฒ MapReduce ์คํ ์ -D mapreduce.job.queuename={Queue ์ด๋ฆ} ์ต์ ์ฌ์ฉ Spark spark-submit ์ --queue {Queue ์ด๋ฆ} ์ต์ ์ฌ์ฉ Hive ์ฟผ๋ฆฌ ๋ด์์ set {์์ง์ด๋ฆ}.queue.name={Queue ์ด๋ฆ} ๋ช ๋ น์ด ์ฌ์ฉ Hive๋ Tez, MR ๋ฑ ์ฌ๋ฌ ์์ง์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ์ฌ์ฉํ๋ ์์ง ์ด๋ฆ์ ์ ํํ ๋ช ์ํด์ผ ํฉ๋๋ค. โ ๐ 4. YARN TimeLine Service YARN Timeline Service๋ YARN ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ์ํ, ์ด๋ฒคํธ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ ์ฅํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค. ๋จ์ํ ์คํ ์ํ๋ฟ ์๋๋ผ, ๊ฐ ํ์คํฌ(Task)์ ์์ธ ์คํ ๋ด์ญ, ์ค๋ฅ ๋ฐ์ ๊ธฐ๋ก, ์์ ์ฌ์ฉ ํต๊ณ ๋ฑ ์ ๋ฐํ ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ ์ฅ์์ ๊ธฐ๋กํจ์ผ๋ก์จ, ์ด์์๋ ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ถ์ํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋๋ก ๋์ต๋๋ค. YARN ํ๊ฒฝ์์ ์์ญ~์์ฒ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์คํ๋๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฐฑ ๊ฐ์ ์ปจํ ์ด๋์ ํ์คํฌ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฐ ์ํฉ์์ ๋จ์ํ ResourceManager์ UI๋ง์ผ๋ก๋ ์คํ ๋ด์ญ์ ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ค MapReduce ์์ ์ด ์คํจํ๋์ง, Spark ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ ์ปจํ ์ด๋๊ฐ ์์ ๋ถ์กฑ์ผ๋ก ์ข ๋ฃ๋์๋์ง, ๋๋ ํ์คํฌ ์ํ ์๊ฐ์ด ํ๊ท ๋ณด๋ค ๋น์ ์์ ์ผ๋ก ๊ธธ์ด์ง ๊ฒฝ์ฐ๊ฐ ์ด๋์ธ์ง ๋ฑ์ ํ์ ํด์ผ ํ ๋, Timeline Service๋ ํ์์ ์ ๋๋ค. ARN Timeline Service๋ ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์ค๊ณ๋ ์ปดํฌ๋ํธ๋ก, ์ฒ์์๋ v1 ๋ฒ์ ์ผ๋ก ๋จ์ํ ๋จ์ผ ์๋ฒ ๊ตฌ์กฐ์์ ์์๋์์ต๋๋ค. Timeline Service v1์ ๋ชจ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ JSON ํํ๋ก ์์งํ ๋ค, HDFS์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค. ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ค์ ์ด ๋น๊ต์ ์ฌ์ ๊ธฐ ๋๋ฌธ์ ์๊ท๋ชจ ๋๋ ํ ์คํธ ํ๊ฒฝ์์๋ ์ ํฉํ์ง๋ง, ๋๊ท๋ชจ ํด๋ฌ์คํฐ์์๋ ์ฌ๋ฌ ํ๊ณ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค. ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ํ์ฅ์ฑ ๋ถ์กฑ๊ณผ ๋ณ๋ชฉํ์์ด์์ต๋๋ค. ์ฝ๊ธฐ์ ์ฐ๊ธฐ ์์ฒญ์ด ๋ชจ๋ ํ๋์ ์๋ฒ ์ธ์คํด์ค๋ก ์ง์ค๋๋ค ๋ณด๋, ์์ ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ์ด๋ฒคํธ ์ ์ค, ์๋ต ์ง์ฐ, ์์คํ ๊ณผ๋ถํ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ต๋๋ค. ๋ํ UI๋ REST API๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ์กฐํํ ๋๋ ์ฑ๋ฅ ์ ํ๊ฐ ์ฆ์์ต๋๋ค. ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด Hadoop 3.0๋ถํฐ Timeline Service v2 (TSv2)๊ฐ ๋์ ๋์์ต๋๋ค. TSv2๋ ๋จ์ํ ๋ฆฌํฉํ ๋ง ์์ค์ด ์๋๋ผ, ์ํคํ ์ฒ ์ ๋ฐ์ ์ํ ํ์ฅ ๊ฐ๋ฅํ ๋ถ์ฐ ๊ตฌ์กฐ๋ก ์ฌ์ค๊ณํ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ์ถ์ฒ : Yarn TimeLine V2 TSv2 ์ํคํ ์ฒ์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐ๊ธฐ์ ์ฝ๊ธฐ ์ญํ ์ ์์ ํ ๋ถ๋ฆฌ ์ด๋ฒคํธ ์์ง๊ธฐ(Collector)๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ ธ๋์์ ๋ถ์ฐ ๋ฐฐ์น๋์ด ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ฐฑ์๋ ์คํ ๋ฆฌ์ง๋ก ์ ๋ฌํฉ๋๋ค. ๋ฐ๋ฉด ์ฝ๊ธฐ๋ Timeline Reader๋ผ๋ ๋ ๋ฆฝ ํ๋ก์ธ์ค๊ฐ ์ ๋ดํ์ฌ REST API ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์์คํ ๋ณ๋ชฉ์ ์ ๊ฑฐํ๊ณ ์ฑ๋ฅ์ ๋์ ๋๋ค. ๋ถ์ฐ ์์ง๊ธฐ ๊ตฌ์กฐ (Distributed Collector) ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ(ApplicationMaster)์ ๋์ผ ๋ ธ๋์ ์์ง๊ธฐ๊ฐ ๋์ํ๋ฉฐ, ์ด ์์ง๊ธฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ์ง์ ๊ธฐ๋กํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Spark๋ Tez ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ฉด ํด๋น ๋ ธ๋์ ์์ง๊ธฐ๊ฐ ์ปจํ ์ด๋ ์คํ, ํ์คํฌ ์คํจ, ์์ ์์ฒญ ๋ฑ์ ์ด๋ฒคํธ๋ฅผ ์ง์ ๋ฐ์ ๊ธฐ๋กํฉ๋๋ค. ๋ํ ๋ค๋ฅธ NodeManager๋ ํด๋น ๋ ธ๋์ ์์ง๊ธฐ๋ก ์ด๋ฒคํธ๋ฅผ ์ ์กํฉ๋๋ค. ๋ฐฑ์๋ ์ ์ฅ์๋ก HBase ์ฑํ (๊ธฐ๋ณธ) TSv2๋ ๊ธฐ๋ณธ์ ์ผ๋ก Apache HBase๋ฅผ ์ด๋ฒคํธ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํฉ๋๋ค. HBase๋ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ค์๊ฐ ์ฟผ๋ฆฌ์ ๊ฐ์ ์ด ์์ด, ๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ณ ์ฝ์ด์ค๋ ๋ฐ ์ ํฉํฉ๋๋ค. Flow ๋จ์์ ๋ฐ์ดํฐ ์ง๊ณ ๋ฐ ๋ถ์ ๊ธฐ๋ฅ TSv2๋ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ ๋ ผ๋ฆฌ์ ์์ ํ๋ฆ ๋จ์์ ์ด๋ฒคํธ๋ฅผ ์ง๊ณํ๋ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ BI ๋ถ์ ์ํฌํ๋ก์ฐ๊ฐ ์ฌ๋ฌ Spark ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ตฌ์ฑ๋์๋ค๋ฉด, ์ด๋ค์ ํ๋์ โFlowโ๋ก ๋ฌถ์ด์ ์ถ์ ํ๊ณ ๋ฉํธ๋ฆญ์ ์ง๊ณํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ ์ฒด ์ํฌํ๋ก์ฐ์ ์คํ ์๊ฐ, ์์ ์ฌ์ฉ๋, ์ค๋ฅ ๋น๋ ๋ฑ์ ํตํฉ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค. ์ค๋ฌด ์์๋ฅผ ํ๋ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. Sqoop์ ํตํด ์ธ๋ถ RDBMS์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , Spark๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ํ, ๊ฒฐ๊ณผ๋ฅผ Hive์ ์ ์ฅํฉ๋๋ค. ์ด ์์ ์ ์ฌ๋ฌ YARN ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ถ์ฐ๋์ด ์คํ๋์ง๋ง, ์ฌ์ฉ์ ์ ์ฅ์์๋ ํ๋์ โ์ ๋ฌด ํ๋ฆ(Flow)โ์ผ๋ก ์ธ์๋ฉ๋๋ค. ์ด๋ Timeline Service v2๋ ๊ฐ ๋จ๊ณ๋ณ ์์ ์ฌ์ฉ๋, ํ์คํฌ ์คํจ ํ์ ๋ฐ ์ค๋ฅ ๋ฉ์์ง, ์ ์ฒด ํ๋ฆ์ ์คํ ์๊ฐ๊ณผ ๋ณ๋ชฉ ์ง์ ๋ฑ์ ํตํฉ์ ์ผ๋ก ์์งํ์ฌ ์ ๊ณตํฉ๋๋ค. ์ด์์๋ ๋จ์ผ API ํธ์ถ ๋๋ UI ๋์๋ณด๋๋ฅผ ํตํด ์ด ์ ์ฒด ํ๋ฆ์ ์ํ๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, ํน์ ๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์์ ์ฌ์ฉ์ด ๊ธ์ฆํ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ์ง๋จํ ์ ์์ต๋๋ค. Timeline Service v2๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด yarn-site.xml์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ด ํ์ํฉ๋๋ค. <property> <name>yarn.timeline-service.enabled</name> <value>true</value> </property> <property> <name>yarn.timeline-service.version</name> <value>2</value> </property> <property> <name>yarn.timeline-service.storage.type</name> <value>hbase</value> </property> ํด๋น ์ค์ ์ Timeline Service๋ฅผ ํ์ฑํํ๊ณ , v2 ๋ฒ์ ์ ์ฌ์ฉํ๋ฉฐ, ์ ์ฅ์๋ก HBase๋ฅผ ์ ํํ๋๋ก ์ง์ ํฉ๋๋ค. ์ถ๊ฐ๋ก HBase ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์ด์ผ ํ๋ฉฐ, timeline.reader.webapp.address, timeline.collector.bind-host ๋ฑ ๋คํธ์ํฌ ๊ด๋ จ ์์ฑ๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, TimeLine Service 2๋ ๋ณด์๊ณผ ๋ฉํฐํ ๋์๋ฅผ ์ง์ํฉ๋๋ค. Timeline Service v2๋ YARN์ ๋ฉํฐํ ๋์ ํ๊ฒฝ์ ๊ณ ๋ คํ์ฌ ์ฌ์ฉ์๋ณ ์ ๊ทผ ์ ์ด ๋ฐ ๋ฐ์ดํฐ ๋ถ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ๋ณด๋ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์กฐํํ ์ ์๋๋ก ACL์ด ์ ์ฉ๋ฉ๋๋ค. ๋ํ Time To Live ์ ์ฑ ์ ์ค์ ํ์ฌ ์ค๋๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ญ์ ํจ์ผ๋ก์จ, ์ ์ฅ ๊ณต๊ฐ ๊ด๋ฆฌ๋ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ์ ๋ฆฌํด๋ณด๋ฉด, Timeline Service๋ ๋จ์ํ ๋ก๊ทธ ์์ง๊ธฐ๊ฐ ์๋๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ ์ด๋ ฅ์ ์๊ฐ ์ถ์ผ๋ก ์ ๋ ฌํ์ฌ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ถ์ ๊ฐ๋ฅํ ํํ๋ก ์ ๊ณตํ๋ ํตํฉ ์ด๋ฒคํธ ๋ถ์ ํ๋ซํผ์ด๋ผ๊ณ ๋ณด๋ ๊ฒ์ด ๋ ์ ํํฉ๋๋ค. ํนํ v2๋ ๋ถ์ฐ ์์ง ๊ตฌ์กฐ, HBase ์ ์ฅ์, ํ๋ฆ ๊ธฐ๋ฐ ์ง๊ณ ๊ธฐ๋ฅ์ ํตํด YARN ํ๊ฒฝ์์์ ์ด์ ์์ ์ฑ๊ณผ ๊ด์ธก ๊ฐ๋ฅ์ฑ(observability)์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ค์ ํด๋ฌ์คํฐ์์ Timeline Service๋ฅผ ํ์ฑํํด๋ณด๊ณ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ์คํํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํด๋ณด๋ฉด, ์ฅ์ ๋ถ์, ์์ ์ต์ ํ, SLA ์ค์ ์ฌ๋ถ ํ๋จ ๋ฑ ์ฌ๋ฌ ์ธก๋ฉด์์ ์ด์ ํ์ง์ ๋น์ฝ์ ์ผ๋ก ๋์ผ ์ ์์์ ์ฒด๊ฐํ ์ ์๊ฒ ๋์์ต๋๋ค. โ โ๏ธ ๊ฒฐ๋ก ์ค๋์ YARN์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ์ ๋ํ ๊ฐ์๋ถํฐ ์์ํด, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ์คํ๋๊ณ ์์์ด ์ด๋ป๊ฒ ์ค์ผ์ค๋ง๋๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์คํ ์์ง๋ณ๋ก ํ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋์ง๊น์ง ์ ๋ฐ์ ์ธ ํ๋ฆ์ ์ดํด๋ณด์์ต๋๋ค. ํนํ YARN์ ์ค์ผ์ค๋ง ์ ์ฑ ์ธ FIFO Queue์ Fair Queue์ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ Spark, Hive, MapReduce ๋ฑ ์ปดํฌ๋ํธ๋ณ๋ก ํ๋ฅผ ์ง์ ํ๋ ์ค์ ๋ฐฉ๋ฒ๋ค์ ์์ ์ ํจ๊ป ํ์ธํ๋ฉฐ, ์ค๋ฌด์์ ์ด๋ป๊ฒ ์์ฉํ ์ ์๋์ง ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ๋ํ, YARN Timeline Service์ ๋ํด์๋ ๊ธฐ์ ์ ์ธ ๊ด์ ์์ ๊น์ด ์๊ฒ ์์๋ณด์๋๋ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ ์ฅํจ์ผ๋ก์จ ํด๋ฌ์คํฐ ๋ด ์์ ๋ค์ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๋ถ์ํ ์ ์๋ ํต์ฌ ๊ธฐ๋ฅ์์ ํ์ธํ ์ ์์์ต๋๋ค. ์คํจ ์ด๋ ฅ, ์์ ์ฌ์ฉ๋, ์์ ์๊ฐ๊ณผ ๊ฐ์ ์ด์์ ์ค์ํ ์ ๋ณด๋ฅผ ํ ๊ณณ์ ํตํฉํด ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํด๋ฌ์คํฐ ์ด์์ ์ ์ฅ์์๋ ๋ฐ๋์ ์์์ผ ํ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ค. YARN์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ค๋ฌด์ ํ์ํ ํฌ์ธํธ๊น์ง ํ ๋ฒ์ ์ ๋ฆฌํ ์ค๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก, ํฅํ ์ง์ ์ค์ตํด๋ณด๊ณ ์ป์ ์ธ์ฌ์ดํธ๋ ํฌ์คํ ํ ๊ณํ์ ๋๋ค. (์ด๋ฏธ ์ค๋ฌด์์๋ ์ฌ์ฉํ๊ณ ์์ง๋ง, ์ง์์๋ ์ฒ์๋ถํฐ ์ค์น๋ถํฐ ์ค์ , ์ก ์คํ, ๋ชจ๋ํฐ๋ง๊น์ง A to Z๋ก ๋ค์ ์ ๋ฆฌํด๋ณผ ์์ ์ ๋๋ค.) ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. :D โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ ๐ 1. ํจ์คํธ ์บ ํผ์ค - ํ ๋ฒ์ ๋๋ด๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ์ด๊ฒฉ์ฐจ ํจํค์ง Online. ๐ 2. ๋ฐ์ดํฐ์์ง๋์ด๋ง Yarn ๐ 3. Hadoop YARN ๊ณต์ ๋งค๋ด์ผ ๐ 4. YARN Capacity scheduler ํน์ง ๋ฐ Queue ์ต์ ๐ 5. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-03-29
๐ ํ๋ก์ ํต์ฌ ๊ตฌ์ฑ์์์ ์ด๋ก
์ ๋ฒ ํฌ์คํ ์์๋, ํ๋ก์ด ์ด๋ป๊ฒ ๋ฑ์ฅํ๋์ง๋ฅผ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ดค์ต๋๋ค. ์ด๋ฒ์๋ ๊ทธ๋ฌํ ํ๋ก์ ํต์ฌ ์์๋ค์ ๋ํ์ฌ ๊ณต๋ถํ๊ณ ํฌ์คํ ํ๊ฒ ์ต๋๋ค. ๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ โ ๐ 1. HDFS HDFS ๋ Hadoop ์ ํต์ฌ ์ํคํ ์ฒ ์ค ํ๋์ ๋๋ค. HDFS ์ ์ํคํ ์ฒ์๋ ๋ฐ๋ก Block File System, NameNode, DataNode ๋ฑ์ด ์์ต๋๋ค. HDFS ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์๋ณด๊ธฐ ์ ์, HDFS ๊ฐ ์ด๋ค ์ฒ ํ๊ณผ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ๋ง๋ค์ด์ก๋์ง, ๊ทธ ํน์ง์ ๋ฌด์์ธ์ง๋ฅผ ๊ฐ๋จํ๊ฒ ๊ณต๋ถํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค. โ HDFS ๋ ํ๋์จ์ด ์ฅ์ ์ ๋์ฒํ ์ ์์ด์ผ ํฉ๋๋ค. HDFS๋ฅผ ๊ตฌ์ฑํ๋ ๋ถ์ฐ ์๋ฒ์๋ ๋ค์ํ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ํ๋๋์คํฌ์ ์ค๋ฅ๊ฐ ์๊ฒจ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์คํจํ๋ ๊ฒฝ์ฐ, ๋์คํฌ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋ ๊ฒฝ์ฐ, ๋คํธ์ํฌ ์ฅ์ ๊ฐ ์๊ฒจ ํน์ ๋ถ์ฐ ์๋ฒ์ ๋คํธ์ํฌ ์ ๊ทผ์ด ์๋๋ ๊ฒฝ์ฐ ๋ฑ์ด ์์ ์ ์์ต๋๋ค. HDFS๋ ์ด๋ฐ ์ฅ์ ๋ฅผ ๋น ๋ฅธ ์๊ฐ์ ๊ฐ์งํ๊ณ ๋์ฒํ ์ ์๊ฒ ์ค๊ณ๋์ด ์์ต๋๋ค. HDFS์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด, ๋ณต์ ๋ณธ๋ ํจ๊ป ์ ์ฅ๋์ด ๋ฐ์ดํฐ ์ ์ค์ ๋ฐฉ์งํ๋ฉฐ, ๋ถ์ฐ ์๋ฒ ์ฌ์ด์๋ ์ฃผ๊ธฐ์ ์ผ๋ก health check ๋ฅผ ํตํด ๋น ๋ฅธ ์๊ฐ์ ์ฅ์ ๋ฅผ ๊ฐ์งํ๊ณ ๋์ฒํ ์ ์๊ฒ ๋ฉ๋๋ค. โก HDFS ๋ Streaming ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ต์ ํ ๋์ด์์ต๋๋ค. HDFS๋ ์ฌ์ฉ์ ์์ฒญ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋์ผ ์๊ฐ ๋ด์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ๋ฐ๋ผ์ ์ค๊ฐ๋ถํฐ ์ฝ๊ณ , ์ฐ๋ Random Access ๋ฐฉ์๋ณด๋ค๋ ์ฒ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฝ์ด๊ฐ๋ Streaming ๋ฐฉ์์ ์ต์ ํ๋์ด ์์ต๋๋ค. ๊ฐ๋ ์ด Streaming ๋ฐฉ์์ด ์นดํ์นด์ฒ๋ผ ์ค์ํ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ๊ณผ ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ๊ทธ๋ฐ ์คํธ๋ฆฌ๋ฐ์ ์๋ฏธํ๋๊ฒ์ด ์๋๋ผ, ์ฒ์๋ถํฐ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ฐ์ ํนํ๋์๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ธํด ์ฌ์ฉ์์ ์ํธ์์ฉ์ด ๋ง์ ํธ๋์ญ์ ๊ธฐ๋ฐ ์๋น์ค(์: ์ธํฐ๋ท ๋ฑ ํน, ์ผํ๋ชฐ ๋ฑ)๋ณด๋ค๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๋ฐฐ์น ์ฒ๋ฆฌ(batch processing)์ ๋ ์ ํฉํฉ๋๋ค. โข HDFS ๋ ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ์ ์ ๋ฆฌํฉ๋๋ค. HDFS๋ ํ๋์ ํ์ผ์ด ์ ๊ธฐ๊ฐ๋ฐ์ดํธ(GB)์์ ์ ํ ๋ผ๋ฐ์ดํธ(TB)์ ์ด๋ฅด๋ ํฌ๊ธฐ๋ก ์ ์ฅ๋ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ ๋ฐ์ดํฐ ์ ์ก ๋์ญํญ(bandwidth)์ ์ง์ํ๋ฉฐ, ์๋ฐฑ ๋์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ด์ํ ์ ์์ต๋๋ค. HDFS๋ ๋จ์ผ ์ธ์คํด์ค์์ ์์ฒ๋ง ๊ฐ ์ด์์ ํ์ผ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ๋ฐ์ดํฐ ์ ์ก ๋์ญํญ์, ํ ๋ฒ์ ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณด๋ผ ์ ์๋๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. โฃ HDFS ๋ ์ฌํํ๊ณ , ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด, HDFS๋ ํ ๋ฒ ์ ์ฅํ ๋ฐ์ดํฐ๋ ์์ ํ์ง ์๊ณ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ ๋ชจ๋ธ์ ๋ฐ๋ฆ ๋๋ค. ์ด๋ฅผ write-once-read-many ๋ชจ๋ธ์ด๋ผ ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ํ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ก์จ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๊ธฐ์กด์๋ ์ ์ฅ ํ ์์ ์ด ์ ํ ๋ถ๊ฐ๋ฅํ์ผ๋, ํ์ฌ๋ ํ์ผ์ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ append ํ๋ ๋ฐฉ์์ ์ง์๋ฉ๋๋ค. ์ด๋ฌํ ๋จ์ํ ์ผ๊ด์ฑ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋์ ๋์ด๋ฉฐ, ํนํ MapReduce์ ๊ฐ์ ์ฒ๋ฆฌ ๋ฐฉ์์ ํฐ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค. โค HDFS ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฎ๊ธฐ์ง ์๊ณ , ๋ฐ์ดํฐ๊ฐ ์์นํ ๋ ธ๋์์ ์ฐ์ฐ์ ์คํํฉ๋๋ค. ์ปดํจํ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํค๋ ๊ฒ๋ณด๋ค, ์ฐ์ฐ ์์ ์ ๋ฐ์ดํฐ๊ฐ ์์นํ ๊ณณ์ผ๋ก ์ด๋์ํค๋ ๊ฒ์ด ๋น์ฉ๊ณผ ์ฑ๋ฅ ๋ฉด์์ ๋ ์ ๋ฆฌํฉ๋๋ค. ์ด๋ ํนํ ๋ฐ์ดํฐ ์์ด ๋ฐฉ๋ํ ์๋ก ๋์ฑ ์ค์ํฉ๋๋ค. ๋คํธ์ํฌ ํผ์ก์ ์ค์ด๊ณ ์์คํ ์ ์ฒด์ ์ฒ๋ฆฌ๋์ ๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. HDFS๋ ์ด๋ฅผ ๊ณ ๋ คํ์ฌ, ๋ฐ์ดํฐ๊ฐ ์์นํ ๋ ธ๋์์ ์ฐ์ฐ์ด ์คํ๋๋๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฒด ํด๋ฌ์คํฐ์ ํจ์จ์ฑ์ ๋์ด๋ ๋ฐ ํฌ๊ฒ ๊ธฐ์ฌํฉ๋๋ค. โฅ HDFS ๋ ์ฌ๋ฌ ํ๋ซํผ ๊ฐ์ ์ด์์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. HDFS๋ ๋ค์ํ ํ๋์จ์ด ๋ฐ ์ด์์ฒด์ ํ๊ฒฝ์์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ธํ ์ด๋ AMD ์นฉ์ด ์ค์น๋ ์๋ฒ์์๋ ๋ฌธ์ ์์ด ๋์ํ๋ฉฐ, CentOS๋ Red Hat Linux์ ๊ฐ์ ๋ค์ํ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์์๋ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ HDFS์ ์๋ฒ ์ฝ๋๊ฐ Java ์ธ์ด๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ์ผ์ ๋๋ค. Java์ ํ๋ซํผ ๋ ๋ฆฝ์ฑ์ด HDFS์ ๋์ ์ด์์ฑ๊ณผ ํธํ์ฑ์ ๋ณด์ฅํด ์ค๋๋ค. ์ด๋ฌํ ํน์ฑ์ HDFS๊ฐ ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ฅ ํ๋ซํผ์ผ๋ก ๋๋ฆฌ ์ฑํ๋๋ ์ค์ํ ์ด์ ์ค ํ๋์ ๋๋ค. ๐ 1.1. Block File System HDFS๋ ๋ธ๋ก ๊ตฌ์กฐ๋ก ๋์ํ๋ ๋ถ์ฐ ํ์ผ ์์คํ ์ ๋๋ค. HDFS์ ์ ์ฅ๋๋ ๋ชจ๋ ํ์ผ์ ์ผ์ ํฌ๊ธฐ์ ๋ธ๋ก ๋จ์๋ก ๋ถํ ๋์ด ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅ๋ฉ๋๋ค. ๊ธฐ๋ณธ ๋ธ๋ก ํฌ๊ธฐ๋ 128MB์ด๋ฉฐ, ์ค์ ์ ํตํด ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ( ํ๋ก V1 ์์๋ 64MB์์ต๋๋ค. ) ์ด๋ฌํ ๋ธ๋ก ๊ธฐ๋ฐ ๊ตฌ์กฐ ๋๋ถ์ ๋ก์ปฌ ๋์คํฌ์ ์ ํ์ ๋์ด์ ํํ๋ฐ์ดํธ(PB) ๋จ์์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ฅ์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค. hdfs-site.xml ์์ ์ง์ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ์ง๋ง, ์ถ์ฒ์ ํ์ง๋ ์์ต๋๋ค. <property> <name>dfs.blocksize</name> <value>134217728</value> <!-- 128MB --> </property> โ HDFS์์ ํ์ผ๊ณผ ๋ธ๋ก์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค ๊ตฌ๋ถ ์ค๋ช ์์ ํ์ผ๊ณผ ๋ธ๋ก ๊ด๊ณ ํ๋์ ํ์ผ์ ํ๋ ๋๋ ์ฌ๋ฌ ๊ฐ์ ๋ธ๋ก์ ์ ์ฅ๋ฉ๋๋ค. ํ์ผ A โ ๋ธ๋ก 1๊ฐ ๋๋ ์ฌ๋ฌ ๊ฐ๋ก ๋ถํ ์ ์ฅ ๋ธ๋ก ๊ด๋ฆฌ ์ด๋ค ํ์ผ์ด ์ด๋ค ๋ธ๋ก์ ์ ์ฅ๋๋์ง๋ Namenode๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฉํ๋ฐ์ดํฐ๋ก ๊ด๋ฆฌํฉ๋๋ค. - ๋ธ๋ก ๋ ๋ฆฝ์ฑ ํ๋์ ๋ธ๋ก์๋ ์ฌ๋ฌ ํ์ผ์ด ์ ์ฅ๋์ง ์์ผ๋ฉฐ, ํญ์ ๋จ์ผ ํ์ผ ์ ์ฉ์ ๋๋ค. ๋ธ๋ก B์๋ ์ค์ง ํ์ผ A ์ผ๋ถ๋ง ์ ์ฅ ๊ฐ๋ฅ ๋ธ๋ก ๋ถํ ํ์ผ ํฌ๊ธฐ๊ฐ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ฉด, ํ์ผ์ ์ฌ๋ฌ ๋ธ๋ก์ ๋๋์ด ์ ์ฅ๋ฉ๋๋ค. ํ์ผ ํฌ๊ธฐ: 128MB + 10byte โ ๋ธ๋ก 1: 128MB, ๋ธ๋ก 2: 10byte ๋ธ๋ก ํฌ๊ธฐ ๋ฏธ๋ง์ ํ์ผ ํ์ผ ํฌ๊ธฐ๊ฐ ๋ธ๋ก๋ณด๋ค ์์๋ ์ ์ฒด ๋ธ๋ก์ ํ ๋น๋ฐ์ง๋ง, ์ฌ์ฉ๋ ์ฉ๋๋ง ์ค์ ๋์คํฌ์ ์ ์ฅ๋ฉ๋๋ค. ํ์ผ ํฌ๊ธฐ: 1MB, ๋ธ๋ก ํฌ๊ธฐ: 128MB โ ๋ธ๋ก์ 1MB๋ง ์ฌ์ฉ ๋ธ๋ก์ด ๋๋ ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ ํ์ผ์ด ๋ธ๋ก ํฌ๊ธฐ๋ก ๋๋ ๋จ์ด์ง์ง ์์ผ๋ฉด, ๋ง์ง๋ง ๋ธ๋ก์ ๋จ์ ํฌ๊ธฐ๋งํผ ์ ์ ํฉ๋๋ค. ํ์ผ ํฌ๊ธฐ: 129MB, ๋ธ๋ก ํฌ๊ธฐ: 128MB โ ๋ธ๋ก 1: 128MB, ๋ธ๋ก 2: 1MB ๋์คํฌ ์ ์ ๊ณต๊ฐ ์ค์ ๋์คํฌ์์ ์ ์ ํ๋ ๊ณต๊ฐ์ ๋ธ๋ก ์ ์ฒด๊ฐ ์๋, ํ์ผ์ ์ค์ ํฌ๊ธฐ๋งํผ์ ๋๋ค. ๋ธ๋ก ํฌ๊ธฐ: 128MB, ํ์ผ ํฌ๊ธฐ: 1MB โ ๋์คํฌ ์ฌ์ฉ: 1MB โ ์ด๋ ๊ฒ Block System ์ ์ ์งํ๋ฏ๋ก์จ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง ์ ์๊ฒ ๋์์ต๋๋ค. โ Seek Time ๊ฐ์ HDFS๋ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํ์ฌ ๋์คํฌ ํ์ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ๋์คํฌ ํ์ ์๊ฐ์ ๋ฐ์ดํฐ ์์น๋ฅผ ์ฐพ๋ ํ์ ์๊ฐ(seek time)๊ณผ ํด๋น ์์น๋ก ๋์คํฌ ํค๋๋ฅผ ์ด๋์ํค๋ ๊ฒ์ ์๊ฐ(search time)์ ํฉ์ ๋๋ค. ํ๋ก์ด ์ฒ์ ๊ฐ๋ฐ๋ ๋น์ ์ผ๋ฐ์ ์ธ ํ๋๋์คํฌ์ ํ๊ท ํ์ ์๊ฐ์ ์ฝ 10ms์๊ณ , ๋์คํฌ I/O ๋์ญํญ์ 100MB/s์์ต๋๋ค. HDFS๋ ํ์ ์๊ฐ์ด ์ ์ฒด ์ฒ๋ฆฌ ์๊ฐ์ 1%๋ฅผ ๋์ง ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ผ๋ฉฐ, ์ด๋ฅผ ์ํด 100MB๋ฅผ ๋์ง ์๊ณ 2์ ์ ๊ณฑ์์ ๊ฐ๊น์ด 64MB๋ฅผ ๋ธ๋ก ํฌ๊ธฐ๋ก ์ ํํ์ต๋๋ค. ๊ทธ๋ฌ๋, ํฐ ํ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํจ์จ์ฑ๊ณผ ๊ทธ ๋์ ํ๋์จ์ด ๋ฐ ๋คํธ์ํฌ์ ์ฑ๋ฅ๋ ํฅ์๋๋ ๊ณผ์ ์ ํตํ์ฌ V2 ์์๋ 128MB ๋ก ๋ณ๊ฒฝ ๋์์ต๋๋ค. ( + ํด๋ฌ์คํฐ์ ํจ์จ์ฑ ๋๋ฌธ์ด๊ธฐ๋ ํฉ๋๋ค. -> ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ๋ ์์ํด์ง. ) โก ๋ฉํ๋ฐ์ดํฐ ํฌ๊ธฐ ๊ฐ์ Namenode๋ ๋ธ๋ก ์์น, ํ์ผ ์ด๋ฆ, ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ, ๊ถํ ์ ๋ณด ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ์ํค๊ณ ๊ด๋ฆฌํฉ๋๋ค. ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ ํ๋ฉด ํ๋์ ํ์ผ์ ์ ์ฅํ๋ ๋ฐ ํ์ํ ๋ธ๋ก ์๊ฐ ์ค์ด๋ค๋ฉฐ, ์ด์ ๋ฐ๋ผ ๊ด๋ฆฌํด์ผ ํ ๋ฉํ๋ฐ์ดํฐ์ ์๋ ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ก ํฌ๊ธฐ๊ฐ 128MB์ธ ๊ฒฝ์ฐ, 200MB ํ์ผ์ ๋ ๊ฐ์ ๋ธ๋ก์ผ๋ก ๋๋๋ฉฐ, Namenode๋ ํด๋น ๋ธ๋ก์ ๋ํ ์ ๋ณด๋ง ๊ด๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ฉด ์ผ๋ฐ์ ์ธ ํ์ผ ์์คํ ์ 4KB ๋๋ 8KB ํฌ๊ธฐ์ ๋ธ๋ก์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋์ผํ ํฌ๊ธฐ์ ํ์ผ์ ์ ์ฅํ๋ ค๋ฉด ์๋ง ๊ฐ์ ๋ธ๋ก๊ณผ ๊ทธ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ก ํฌ๊ธฐ๊ฐ 4KB์ธ ๊ฒฝ์ฐ, 200MB ํ์ผ์ ์ฝ 5๋ง ๊ฐ์ ๋ธ๋ก์ผ๋ก ๋๋๊ณ , 5๋ง ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ ํญ๋ชฉ์ Namenode๊ฐ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. Namenode๋ ๋จ์ผ ์๋ฒ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก, ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ๋ฐ ์์ ์ฑ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Namenode๋ 100๋ง ๊ฐ์ ๋ธ๋ก์ ์ ์ฅํ ๋ ์ฝ 1GB์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. โข ํด๋ผ์ด์ธํธ์ Namenode ๊ฐ ๋คํธ์ํฌ ํต์ ๋น์ฉ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ HDFS์ ์ ์ฅ๋ ํ์ผ์ ์ ๊ทผํ ๋๋ ๋จผ์ Namenode์ ํด๋น ํ์ผ์ ๊ตฌ์ฑํ๋ ๋ธ๋ก์ ์์น๋ฅผ ์กฐํํฉ๋๋ค. ์ด๋ ๋ธ๋ก ํฌ๊ธฐ๊ฐ ์์ ๋ธ๋ก ์๊ฐ ๋ง์ผ๋ฉด, ์กฐํํด์ผ ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ฑฐ๋ ์กฐํ ํ์๊ฐ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ ํ๋ฉด ํ์ผ๋น ๋ธ๋ก ์๊ฐ ์ค์ด๋ค์ด ์กฐํ์ ํ์ํ ์ ๋ณด๊ฐ ๊ฐ์ํ๋๊ณ , ํต์ ํ์๋ ์ค์ด๋ญ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์ด๊ธฐ ์กฐํ ์ดํ์๋ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด Namenode์์ ์ถ๊ฐ์ ์ธ ํต์ ์์ด ์์ ์ ์ด์ด๋๊ฐ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ ์ฒด์ ์ธ ํต์ ๋น์ฉ์ด ์ค์ด๋ญ๋๋ค. ๐ 1.2. NameNode ์ DataNode ์ถ์ฒ : HDFS ์ํคํ ์ฒ โ NameNode NameNode๋ HDFS์ ํต์ฌ ๊ตฌ์ฑ์์๋ก์, ๋ธ๋ก์ ์์น, ๊ถํ ๋ฑ๊ณผ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๋ฉฐ, ์์์ฑ์ ์ํด ๋ค์์ ๋ ๊ฐ์ง ํ์ผ ํํ๋ก๋ ๋์คํฌ์ ๊ธฐ๋ก๋ฉ๋๋ค. ํ๋๋ File System Image ์ ๋๋ค. NameNode๊ฐ ์ฒ์ ์์๋ ์ดํ๋ถํฐ์ HDFS ๋ค์์คํ์ด์ค ์ ์ฒด ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ, ํ์ผ๋ช , ํ์ผํฌ๊ธฐ, ์์ฑ์๊ฐ, ์์ ์๊ฐ, ๋ธ๋ก ๋งคํ ์ ๋ณด, ์ ๊ทผ ์ ์ด ์ ๋ณด, ๋ณต์ ์, ํ์ผ ์ํ ๋ฑ์ ํฌํจํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ํ๋๋, Edit Log ์ ๋๋ค. NameNode๊ฐ ์ฒ์ ์์๋ ์ดํ๋ถํฐ ๋ฐ์ํ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋กํ ๋ก๊ทธ ํ์ผ์ ๋๋ค. ํ๋ก์ NameNode ๋ ์์๋ ์ดํ์ ๋ค์์คํ์ด์ค ์ ๋ณด๋ฅผ File System Image ์ ๊ธฐ๋กํ๊ณ , ๊ทธ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ์ผ๋ก์จ ๋น ๋ฅด๊ฒ ์กฐํ ํ ์ ์๋๋ก ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ๋ ์ฌํญ๋ค์ ์ ๋ถ Edit Log ์ ์ ์ฅํฉ๋๋ค. ์ดํ NameNode ๋ฅผ ๋ด๋ ธ๋ค๊ฐ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด, Secondary NameNode ์ ์ํด์ ๋์คํฌ์ ์๋ Edit Log ์ File System Image ๊ฐ ๋ณํฉ์ ํ๋ฉฐ ์๋ก์ด File System Image ๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฑธ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ์ผ๋ก์จ, ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ๋น ๋ฅด๊ฒ ์กฐํ ํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ NameNode ์ ์ญํ ์ ํฌ๊ฒ ๋ค์ฏ ๊ฐ์ง๊ฐ ์์ต๋๋ค. โ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ ํ์ผ ์์คํ ์ ๊ตฌ์ฑํ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ๋ ํ์ผ ์ด๋ฆ, ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ, ํ์ผ ํฌ๊ธฐ, ์ ๊ทผ ์ ์ด ์ ๋ณด(access/auth control) ๋ฐ ํ์ผ๊ณผ ๋ธ๋ก ๊ฐ์ ๋งคํ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ ์ํ๊ฒ ์๋ตํ๊ธฐ ์ํด ๋ฉํ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ ์ง๋๋ฉฐ, ์์์ ์ด์ผ๊ธฐํ ๊ฒ์ฒ๋ผ ๋์คํฌ์ ๊ธฐ๋กํ๊ธฐ๋ ํฉ๋๋ค. โก ๋ฐ์ดํฐ๋ ธ๋ ๊ด๋ฆฌ ํด๋ฌ์คํฐ ๋ด์ ๋ชจ๋ DataNode ๋ฆฌ์คํธ๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ๊ด๋ฆฌ์์ ์ํ ๋ช ์์ ์ธ ๋ช ๋ น ๋๋ ๋ชจ๋ํฐ๋ง ๊ฒฐ๊ณผ์ ๋ฐ๋ผ DataNode ์ํ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค. โข ๋ฐ์ดํฐ๋ ธ๋ ๋ชจ๋ํฐ๋ง ๊ฐ DataNode๋ 3์ด๋ง๋ค NameNode์ heartbeat๋ฅผ ์ ์กํฉ๋๋ค. heartbeat์๋ ๋ฐ์ดํฐ๋ ธ๋ ์ํ ์ ๋ณด์ ๋ฐ์ดํฐ๋ ธ๋์ ์ ์ฅ๋ ๋ธ๋ก ๋ชฉ๋ก(block report)์ด ํฌํจ๋ฉ๋๋ค. NameNode๋ heartbeat ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก DataNode์ ๊ฐ์ฉ์ฑ, ๋์คํฌ ์ฉ๋ ์ํ ๋ฑ์ ํ๋จํฉ๋๋ค. ์ผ์ ์๊ฐ ๋์ heartbeat๋ฅผ ์์ ํ์ง ๋ชปํ DataNode๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ๋ ธ๋๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. โฃ ๋ธ๋ก ๊ด๋ฆฌ NameNode๋ ๊ฐ ๋ธ๋ก์ ์์น, ๋ณต์ ์ํ, ์์ ๊ด๊ณ ๋ฑ์ ๊ด๋ฆฌํฉ๋๋ค. ์ฅ์ ๊ฐ ๋ฐ์ํ DataNode๊ฐ ๋ฐ๊ฒฌ๋๋ฉด, ํด๋น ๋ ธ๋์ ์๋ ๋ธ๋ก์ ๋ค๋ฅธ ์ ์ ๋ ธ๋๋ก ๋ณต์ ํฉ๋๋ค. ๋์คํฌ ์ฉ๋์ด ๋ถ์กฑํ ๋ ธ๋๊ฐ ์์ ๊ฒฝ์ฐ, ๋ธ๋ก์ ์ฉ๋์ด ์ฌ์ ์๋ ๋ ธ๋๋ก ์ด๋์ํต๋๋ค. ๋ธ๋ก์ ๋ณต์ ๋ณธ ์๋ฅผ ์ ์งํ์ฌ, ๊ธฐ์ค ๋ณต์ ์๋ณด๋ค ๋ถ์กฑํ๊ฑฐ๋ ๋ง์ ๊ฒฝ์ฐ ์ ์ ํ ์ถ๊ฐ ๋ณต์ ๋๋ ์ญ์ ์์ ์ ์ํํฉ๋๋ค. โค ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ ํด๋ผ์ด์ธํธ๊ฐ HDFS์ ์ ๊ทผํ ๋๋ ๋ฐ๋์ NameNode๋ฅผ ํตํด ๋จผ์ ์ ์ํฉ๋๋ค. ํ์ผ์ ์ ์ฅํ ๊ฒฝ์ฐ, ํ์ผ ์กด์ฌ ์ฌ๋ถ ํ์ธ, ์ ์ฅ ๊ถํ ๊ฒ์ฌ ๋ฑ์ ์ํํฉ๋๋ค. ํ์ผ์ ์กฐํํ ๊ฒฝ์ฐ, ๋ธ๋ก์ด ์ ์ฅ๋ DataNode์ ์์น ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. โ DataNode DataNode ๋ ํด๋ผ์ด์ธํธ๊ฐ HDFS์ ์ ์ฅํ๋ ํ์ผ์ ๋์คํฌ์ ์ ์งํ๋ Node ์ ๋๋ค. ์ ์ฅํ๋ ํ์ผ์ ํฌ๊ฒ ๋ ์ข ๋ฅ์ธ๋ฐ, ํ๋๋ ์ค์ ๋ฐ์ดํฐ(Raw Data) ๋ค๋ฅธ ํ๋๋, checksum ์ด๋ created time ๋ฑ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ ํ์ผ์ ๋๋ค. ์ด๋ฌํ DataNode ๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํฉ๋๋ค. โ ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํด๋ผ์ด์ธํธ๋ก ๋ถํฐ ์ค์ ๋ฐ์ดํฐ์ read/write ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํฉ๋๋ค. โก block ์์ฑ,๋ณต์ ,์ญ์ NameNode ๋ก๋ถํฐ ๋ช ๋ น์ ๋ฐ์์, ์์ ์ ๋์คํฌ์ ์๋ block ์ ์์ฑ, ๋ณต์ , ์ญ์ ๋ฅผ ์ํํฉ๋๋ค. โข heartbeat ์ ์ก HDFS ์ ์ํ๋ฅผ NameNode ์๊ฒ heartbeat ๋ก ์ ์กํฉ๋๋ค. โฃ block ์ ๋ณด ์ ์ก NameNode์๊ฒ ์์ ์ด ๊ฐ์ง ๋ฐ์ดํฐ block ๋ค์ ๋ฆฌ์คํธ์ ์ํ๋ฅผ ์ ์กํฉ๋๋ค. ๐ 1.3. Secondary NameNode ์ถ์ฒ : Secondary Namenode Secondary NameNode ๋ ์ด๋ฆ๋ง ๋ค์ด๋ณด๋ฉด, ์ด์คํ ๊ตฌ์ฑ์ ํตํด NameNode ๊ฐ ๋ค์ด๋๋ฉด, Active ๋๋ Standby Node ๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋, Secondary NameNode ๋ ํด๋ฌ์คํฐ ํ๊ฒฝ์์์ ๊ณ ๊ฐ์ฉ์ฑ ์ญํ ์ ๋ด๋นํ์ง ์์ต๋๋ค. Secondary NameNode ๋ NameNode ๊ฐ ์ํํ๋ File System Image ๋ฅผ ์์ฑํ๋ ์ญํ ์ ๋ถ๋ดํฉ๋๋ค. ์๋ํ๋ฉด, NameNode ๋ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ HDFS ์ Entrypoint ๋ก์จ ํด๋ผ์ด์ธํธ์๊ฒ File ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋๋ฐ, NameNode ์ ์ด๋ฌํ ๋ณธ์ฐ์ ์ญํ ์ ์ง์คํ ์ ์๋๋ก Secondary NameNode ๋ NameNode ์ Edit Log ๋ฅผ Merge ํ์ฌ ์๋ก์ด New File System Image ๋ฅผ ์์ฑํ๋ ์ญํ ์ ์ํํฉ๋๋ค. Secondary NameNode ๋ NameNode ๊ฐ ์ฌ๋ผ์ค๋ ๊ณผ์ ์์ ํ์ฌ๊น์ง์ Edit Log ์ File System Image ์ ๋ณํฉํ์ฌ ์ต์ ์ File System Image ๋ฅผ ์์ฑํ๋ ์์ ์ ํฉ๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ Secondary NameNode ๋ ์ฃผ๊ธฐ์ ์ผ๋ก NameNode ์ Edit Log ์ ์กฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Edit Log ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๊ธฐ๋ก๊ณผ File System Image ๋ฅผ ๋ณํฉํ์ฌ ์๋ก์ด New FsImage ๋ฅผ ์์ฑํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์๋กญ๊ฒ ์์ฑ๋ File System Image ๋ NameNode ๋ก ์ ๋ฌ๋ฉ๋๋ค. ( ์ฆ, NameNode ๊ฐ ๋ด๋ ค๊ฐ๋ค ์ฌ๋ผ์ฌ ๋๋ง๋ค, ๋ณํฉ ์์ ์ ์ํํด์ค. ) ๐ 1.4. Replication HDFS๋ Fault Tolerance ๋ฅผ ์ํด ๊ฐ ๋ธ๋ก์ ์ฌ๋ฌ ๊ฐ ๋ณต์ ํ์ฌ ์ ์ฅํฉ๋๋ค. ์ด ๋ณต์ ๊ฐ์๋ฅผ ๋ณต์ ์(Replication Factor)๋ผ๊ณ ํ๋ฉฐ, ํ์ผ์ ์์ฑํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ๋ณต์ ์๋ ์ผ๋ฐ์ ์ผ๋ก 3๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ๋ธ๋ก์ด ์๋ค๋ฉด HDFS๋ ์ด๋ฅผ ์ธ ๊ฐ์ ๋ค๋ฅธ ์๋ฒ์ ๋๋์ด ์ ์ฅํจ์ผ๋ก์จ ํ ์๋ฒ๊ฐ ๊ณ ์ฅ ๋๋๋ผ๋ ๋ฐ์ดํฐ ์ ์ค์ด ๋ฐ์ํ์ง ์๋๋ก ํฉ๋๋ค. ๋ณต์ ์๋ ํ์ผ์ด ์์ฑ๋ ์ดํ์๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ฉฐ, HDFS์ ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋์ writer๋ง ๋์์ ์ ๊ทผํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ๋จ, append๋ truncate์ ๊ฐ์ ์ผ๋ถ ์์ธ์ ์ธ ์ฐ์ฐ์์๋ ํ์ผ์ ๋ํ ๋ถ๋ถ์ ์ ๊ทผ์ด ํ์ฉ๋ฉ๋๋ค. HDFS์์๋ ์ด๋ฌํ ๋ธ๋ก์ ๋ณต์ ๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด๊ฐ ๋ค์๋ ธ๋(NameNode)์ ๋๋ค. ๋ค์๋ ธ๋๋ ๊ฐ ๋ฐ์ดํฐ๋ ธ๋(DataNode)๋ก๋ถํฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํํธ๋นํธ(heartbeat)์ ๋ธ๋ก ๋ฆฌํฌํธ(block report)๋ฅผ ๋ฐ์ต๋๋ค. ๋ค์๋ ธ๋๋ ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ณ ์ฅ์ด ๋ฐ์ํ ๋ ธ๋๋ฅผ ํ์ ํ๊ณ , ํด๋น ๋ ธ๋์ ์ ์ฅ๋ ๋ธ๋ก์ด ์์ค๋์ง ์๋๋ก ๋ค๋ฅธ ๋ ธ๋์ ๋ณต์ ๋ณธ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋ํ, ํน์ ๋ ธ๋์ ์ ์ฅ ์ฉ๋์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ๋ธ๋ก์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ๋ค๋ฅธ ๋ ธ๋๋ก ์ฎ๊ธฐ๊ธฐ๋ ํ๋ฉฐ, ๋ณต์ ์๊ฐ ์ง์ ๋ ๊ฐ๋ณด๋ค ์ ๊ฑฐ๋ ๋ง์ ๊ฒฝ์ฐ ์ด๋ฅผ ์๋์ผ๋ก ์กฐ์ ํฉ๋๋ค. HDFS๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ณต์ ๋ณธ(replica)์ผ๋ก ์ ์ฅํ์ฌ, ์ ๋ขฐ์ฑ๊ณผ ์ฑ๋ฅ์ ๋์ด๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋จ์ํ ๋ณต์ ๋ณธ์ ์ฌ๋ฌ ๊ฐ ๋ง๋ ๋ค๊ณ ํด์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ด ์๋์ผ๋ก ์ข์์ง๋ ๊ฒ์ ์๋๋๋ค. ๋ณต์ ๋ณธ์ด ์ด๋์ ์ ์ฅ๋๋๋, ์ฆ replica์ ์์น๋ HDFS์ ์ ์ฒด ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด์ฒ๋ผ HDFS๋ ๋ณต์ ๋ณธ์ ๋ฐฐ์น ์ ๋ต(replica placement policy)์ ๋งค์ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ฉฐ, ์ด ์ ๋ต์ ๊ธฐ์กด์ ๋ค๋ฅธ ๋ถ์ฐ ํ์ผ ์์คํ ๊ณผ HDFS๋ฅผ ์ฐจ๋ณํํ๋ ํต์ฌ ์์ ์ค ํ๋์ ๋๋ค. HDFS๋ ์ด ๊ธฐ๋ฅ์ ์ํด ์ค์ ์ด์ ํ๊ฒฝ์์ ์๋ง์ ๊ฒฝํ๊ณผ ์คํ์ ํตํด ์ ์ฑ ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํด์์ต๋๋ค. ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ๋ ธ๋์ ์ ์ฅ๋ ๋ณต์ ๋ณธ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ณต๊ตฌํ ์ ์๋๋ก ์ค๊ณํ๋ ๋ฐ์ดํฐ ์ ๋ขฐ์ฑ๊ณผ, ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์์น์ ๋ถ์ฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ์๋ฒ๋ ๋์ด ์คํจํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ ๊ฐ์ฉ์ฑ ํฅ์, ๊ทธ๋ฆฌ๊ณ ๋ณต์ ๋ณธ์ด ๋คํธ์ํฌ ๋ด์์ ํจ์จ์ ์ผ๋ก ๋ถ์ฐ๋๋๋ก ํ์ฌ, ๋ถํ์ํ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํจ. ์ด๋ ๊ฒ ์ธ ๊ฐ์ง๋ฅผ ์ค์ ์ผ๋ก ๊ฐ์ ๋์ด์์ต๋๋ค. ์ด ์ ์ฑ ์ค ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก ๋ ์ธ์ ๋ณต์ ๋ฐฐ์น(Rack-aware Replica Placement)์ ๋๋ค. ์ถ์ฒ : ํ๋ก ํด๋ฌ์คํฐ ์ด๋ฏธ์ง์ ๋ ๊ตฌ์กฐ ๋๊ท๋ชจ HDFS ํด๋ฌ์คํฐ์์ ์ปดํจํ ์ธ์คํด์ค๋ค์ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ ๋(rack)์ ๋๋์ด ๋ฐฐ์น๋ฉ๋๋ค. ์๋ก ๋ค๋ฅธ ๋์ ์์นํ ์๋ฒ๋ผ๋ฆฌ๋ ๋ ๋ด ์ค์์น๋ฅผ ํตํด ํต์ ํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋ ๋ด ํต์ ๋ณด๋ค ๋ ๋ง์ ๋คํธ์ํฌ ๋์ญํญ์ด ํ์ํฉ๋๋ค. ์ด๋ฐ ๊ตฌ์กฐ์ ์ธ ํน์ฑ์ ๊ณ ๋ คํ์ฌ Hadoop์ Rack Awareness ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด NameNode๋ ๊ฐ DataNode์ ๋ ID๋ฅผ ์ธ์ํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ณต์ ๋ณธ์ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. HDFS์ ๊ธฐ๋ณธ ๋ณต์ ์๋ ์ผ๋ฐ์ ์ผ๋ก 3์ ๋๋ค. ์ด๋ ๊ธฐ๋ณธ ๋ณต์ ๋ฐฐ์น ์ ์ฑ ์ธ BlockPlacementPolicyDefault๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ณต์ ๋ณธ์ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ณต์ ๋ณธ์ ๊ฐ๋ฅํ ํ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์๋ ํด๋ผ์ด์ธํธ(writer)์ ๊ฐ์ ๋์ ์๋ DataNode์ ์ ์ฅ๋ฉ๋๋ค. ๋ง์ฝ writer๊ฐ ํน์ DataNode ์์์ ์ง์ ์คํ ์ค์ด๋ผ๋ฉด, ํด๋น ๋ ธ๋ ์์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ฉด writer๊ฐ ์ผ๋ฐ ๋ ธ๋๋ผ๋ฉด, ๊ฐ์ ๋ ๋ด์์ ์์์ DataNode๋ฅผ ์ ํํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ ๋ณต์ ๋ณธ์ writer์๋ ๋ค๋ฅธ ๋์ ์๋ ์๋ก ๋ค๋ฅธ DataNode์ ์ ์ฅ๋๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด ๋ ๊ฐ์ ๋์ ๋ณต์ ๋ณธ์ด ๋ถ์ฐ๋๋ฉฐ, ํ๋์ ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ๋์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฑ ์ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ ๊ฐ์ง๋๋ค. ๋จผ์ ์ฒซ ๋ฒ์งธ ๋ณต์ ๋ณธ์ writer์ ๋์ผํ ๋์ ์ ์ฅํจ์ผ๋ก์จ ๋ ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ผ ์ ์์ด ์ฐ๊ธฐ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ๋ํ ๋๋ถ๋ถ์ ์ฅ์ ๊ฐ ๋ ์ ์ฒด๋ณด๋ค๋ ๊ฐ๋ณ ๋ ธ๋์์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, ๋ณต์ ๋ณธ์ ๋ ๊ฐ์ ๋์๋ง ๋ถ์ฐ์์ผ๋ ์ถฉ๋ถํ ์ ๋ขฐ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ๋จ์ ์ญ์ ์กด์ฌํฉ๋๋ค. ๋ณต์ ๋ณธ์ ์์ ํ ๋ค๋ฅธ ๋์ ๊ฐ๊ฐ ๋ถ์ฐ์ํค๋ ๋ฐฉ์์ ๋นํด ์ ์ฒด ๋คํธ์ํฌ ๋์ญํญ ์ฌ์ฉ๋์ ์ค์ด์ง๋ ๋ชปํฉ๋๋ค. ๋ํ ๋ณต์ ๋ณธ์ด 1:2์ ๋น์จ๋ก ๋ถํฌ๋๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ณต์ ๋ณธ ์๊ฐ 3๋ณด๋ค ๋ง์์ง๋ ๊ฒฝ์ฐ, ๋ค ๋ฒ์งธ ๋ณต์ ๋ณธ๋ถํฐ๋ ๋ฌด์์๋ก ๋๊ณผ ๋ ธ๋๋ฅผ ์ ํํ๋, ๋๋น ๋ณต์ ๋ณธ ์๊ฐ ์ผ์ ์ํ์ ์ดํ๊ฐ ๋๋๋ก ์กฐ์ ํฉ๋๋ค. ์ด๋ ์ํ์ ์ (๋ณต์ ๋ณธ ์ - 1) / ๋ ์ + 2๋ก ๊ณ์ฐ๋ฉ๋๋ค. NameNode๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ๋ธ๋ก์ ๋ํด ๋์ผํ DataNode์ ์ฌ๋ฌ ๋ณต์ ๋ณธ์ ์ ์ฅํ๋ ๊ฒ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ํ๋์ ๋ธ๋ก์ด ๊ฐ์ง ์ ์๋ ์ต๋ ๋ณต์ ๋ณธ ์๋ ํด๋ฌ์คํฐ ๋ด DataNode์ ์ด ์์ ๊ฐ์ต๋๋ค. ๋ธ๋ก ๋ณต์ ๋ณธ์ด ์์นํ ๋ ธ๋๋ฅผ ์ ์ ํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ ์ธ์ ๊ท์น์ ๊ธฐ์ค์ผ๋ก ๋ณต์ ๋ณธ์ด ๋ฐฐ์น๋ ํ๋ณด ๋ ธ๋๋ฅผ ์ ์ . ๊ทธ๋ฐ ๋ค์ ํด๋น ํ๋ณด ๋ ธ๋๊ฐ ์ ์ฑ ์์ ์๊ตฌํ๋ ์คํ ๋ฆฌ์ง ํ์ ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ. ๋ง์ฝ ํ๋ณด ๋ ธ๋๊ฐ ์๊ตฌ๋๋ ์คํ ๋ฆฌ์ง ํ์ ์ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, NameNode๋ ๋ค๋ฅธ ํ๋ณด ๋ ธ๋๋ฅผ ํ์. ์์ ์ ์ฐจ๋ก๋ ์ ์ ํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด, fallback ์คํ ๋ฆฌ์ง ํ์ ์ ์ฌ์ฉํ๋ ๋ ธ๋๋ฅผ ๋์์ผ๋ก ๋ณต์ ๋ณธ์ ๋ฐฐ์นํ๋ ค๊ณ ์๋. ์กฐ๊ธ ํ์ด์ ์ค๋ช ํ๋ฉด, ๋ ์ธ์ ๊ท์น ๊ธฐ์ค์ผ๋ก ํ๋ณด Node ๋ค์ ์ ์ ํ๊ณ , ์ ์ฑ ์ SSD ์คํ ๋ฆฌ์ง ํ์ ์ผ๋ก ์ ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, SSD ์คํ ๋ฆฌ์ง ํ์ ์ ๊ฐ์ง๊ณ ์๋์ง ํ๋ณด Node ๋ค์ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๊ฒฐ๊ตญ ์๋ค๋ฉด, fallback ์ผ๋ก ์ง์ ํ Disk ์ ๋ณต์ ๋ณธ์ ๋ฐฐ์นํ๋ค๊ณ ํ ์ ์๊ฒ ์ต๋๋ค. ๊ทธ ์ธ์๋ ๋ค ๊ฐ์ง ์ ์ฑ ์ด ์ถ๊ฐ๋ก ์์ต๋๋ค. โ BlockPlacementPolicyRackFaultTolerant ํด๋น ์ ์ฑ ์ ๋ธ๋ก ๋ณต์ ๋ณธ์ ์ต์ 3๊ฐ์ ์๋ก ๋ค๋ฅธ ๋์ ๋ถ์ฐ์์ผ, 2๊ฐ์ ๋์ด ๋์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ์ ๊ฐ์ฉ์ฑ์ ์ ์งํ๋๋ก ๋์ต๋๋ค. ( Github Code Link ) -- hdfs-site.xml <property> <name>dfs.block.replicator.classname</name> <value>org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyRackFaultTolerant</value> </property> โก BlockPlacementPolicyWithNodeGroup ํด๋น ์ ์ฑ ์ ๋ ธ๋ ๊ทธ๋ฃน ๊ฐ๋ ์ ํตํด, ๋์ผํ ๋ฌผ๋ฆฌ์ ํธ์คํธ์์ ์คํ๋๋ ๊ฐ์ ๋จธ์ (VM)๋ค ๊ฐ์ ์ฅ์ ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ฆ, ๋์ผํ ๋ ธ๋ ๊ทธ๋ฃน์๋ ๋ ์ด์์ ๋ณต์ ๋ณธ์ด ๋ฐฐ์น๋์ง ์์ผ๋ฉฐ, ์ด๋ ๊ฐ์ํ๋ ํ๊ฒฝ์ ์ ํฉํ๋ค๊ณ ํ ์ ์์ต๋๋ค. ( Github Code Link ) -- core-site.xml <property> <name>net.topology.impl</name> <value>org.apache.hadoop.net.NetworkTopologyWithNodeGroup</value> </property> <property> <name>net.topology.nodegroup.aware</name> <value>true</value> </property> -- hdfs-site.xml <property> <name>dfs.block.replicator.classname</name> <value>org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeGroup</value> </property> โข AvailableSpaceBlockPlacementPolicy ํด๋น ์ ์ฑ ์ ๋ฐ์ดํฐ ๋ ธ๋์ ๋์คํฌ ์ฌ์ฉ๋ฅ ์ ๊ณ ๋ คํ์ฌ, ๊ฐ๋ฅํ ํ ๋ ์ฌ์ฉ๋ ๋ ธ๋๋ฅผ ์ ํํด ๋ธ๋ก์ ๋ฐฐ์นํ ์ ์๋๋กํฉ๋๋ค. ์ด๋ ๊ณต๊ฐ ๊ท ํ์ ์ ์งํ๊ณ ํน์ ๋ ธ๋์ ๊ณผ๋ํ๊ฒ ๋ถํ๊ฐ ์ง์ค๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ( Github Code Link ) -- hdfs-site.xml <property> <name>dfs.block.replicator.classname</name> <value>org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy</value> </property> <property> <name>dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction</name> <value>0.6</value> </property> <property> <name>dfs.namenode.available-space-block-placement-policy.balanced-space-tolerance</name> <value>5</value> </property> <property> <name>dfs.namenode.available-space-block-placement-policy.balance-local-node</name> <value>false</value> </property> โฃ AvailableSpaceRackFaultTolerantBlockPlacementPolicy ํด๋น ์ ์ฑ ์ AvailableSpaceBlockPlacementPolicy ์ ๋ฐฉ์๊ณผ RackFaultTolerant ํน์ฑ์ ๊ฒฐํฉํ ๋ฐฉ์์ ๋๋ค. ์ฆ, ๊ฐ๋ฅํ ์ต๋ ๋ ์๋ก ๋ธ๋ก์ ๋ถ์ฐ์ํค๋ฉด์, ๋ฎ์ ๋์คํฌ ์ฌ์ฉ๋ฅ ์ ๊ฐ์ง ๋ ธ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ํํ๋ ค๊ณ ํฉ๋๋ค. ( Github Code Link ) -- hdfs-site.xml <property> <name>dfs.block.replicator.classname</name> <value>org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceRackFaultTolerantBlockPlacementPolicy</value> </property> <property> <name>dfs.namenode.available-space-rack-fault-tolerant-block-placement-policy.balanced-space-preference-fraction</name> <value>0.6</value> </property> <property> <name>dfs.namenode.available-space-rack-fault-tolerant-block-placement-policy.balanced-space-tolerance</name> <value>5</value> </property> โ Replica ๋ฐ์ดํฐ ์ฝ๋ ์์ HDFS์์๋ ํ๋์ ๋ธ๋ก์ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋์ ๋ณต์ ํ์ฌ ์ ์ฅํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ณผ์ ์์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด, HDFS๋ ํด๋ผ์ด์ธํธ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ์์น์ ์๋ ๋ณต์ ๋ณธ(replica)์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค ์๋ํฉ๋๋ค. ์ด๋ฅผ ๋ณต์ ๋ณธ ์ ํ(Replica Selection)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๊ฐ DataNode์ ๋์ผํ ๋ ธ๋์์ ์คํ๋๊ณ ์๋ค๋ฉด, ํด๋น ๋ ธ๋์ ์ ์ฅ๋ ๋ณต์ ๋ณธ์ ๋ฐ๋ก ์ฝ์ต๋๋ค. ๋ง์ฝ ๋์ผํ ๋ ธ๋์ ๋ณต์ ๋ณธ์ด ์๋ค๋ฉด, ๊ฐ์ ๋(Rack)์ ์๋ ๋ ธ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ง์ฝ ์ด ๋ํ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, ์ต์ข ์ ์ผ๋ก๋ ๋ค๋ฅธ ๋์ด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ผํฐ์ ์๋ ๋ณต์ ๋ณธ์ ์ ํํ๊ฒ ๋ฉ๋๋ค. ํนํ, HDFS ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ฌ ๋ฐ์ดํฐ์ผํฐ์ ๊ฑธ์ณ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ฐ์ดํฐ์ผํฐ์ ์๋ ๋ณต์ ๋ณธ์ ์ฐ์ ์ ์ผ๋ก ์ฝ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ ๋์ญํญ(bandwidth)์ ์ฌ์ฉ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ ์ ๊ทผ ์ง์ฐ ์๊ฐ(latency)์ ์ต์ํํ๊ธฐ ์ํ ์ ๋ต์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. โ SafeMode Safemode๋ NameNode๊ฐ ๊ธฐ๋๋ ๋ ์ง์ ํ๋ ์ผ์ข ์ ๋ณดํธ ์ํ์ ๋๋ค. ์ด ๋ชจ๋์์๋ ๋ธ๋ก ๋ณต์ ์ ๊ฐ์ ์ฐ๊ธฐ ์์ ์ด ์ผ์ด๋์ง ์์ผ๋ฉฐ, ์ ์ฒด ํด๋ฌ์คํฐ๊ฐ ์์ ์ ์ธ ์ํ์ ๋๋ฌํ ๋๊น์ง ์ฝ๊ธฐ ์ ์ฉ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. Safemode ๋์ NameNode๋ ๊ฐ DataNode๋ก๋ถํฐ block report๋ฅผ ๋ฐ์, ํ์ฌ ํด๋ฌ์คํฐ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ธ๋ก๋ค์ด ์ ๋๋ก ๋ณต์ ๋์ด ์๋์ง๋ฅผ ํ์ธํฉ๋๋ค. ์ด๋, ๋ชจ๋ ๋ธ๋ก ์ค ์ผ์ ๋น์จ ์ด์์ด ์ ์์ ์ผ๋ก ๋ณต์ ๋์ด ์๋ค๊ณ ํ๋จ๋๋ฉด, Safemode์์ ๋ฒ์ด๋๊ฒ ๋ฉ๋๋ค. ์ด ๋น์จ(%)์ ํ๊ฒฝ ์ค์ ์ ํตํด ์กฐ์ ํ ์ ์์ต๋๋ค. Safemode์์ ๋ฒ์ด๋ ์ดํ์๋, ์์ง ๋ณต์ ๋ณธ ๊ฐ์๊ฐ ๋ถ์กฑํ ๋ธ๋ก๋ค์ ๋ํด ๋ณต์ ์์ ์ด ์๋์ผ๋ก ์ํ๋ฉ๋๋ค. ์ฆ, Safemode๋ ํด๋ฌ์คํฐ๊ฐ ์์ ํ ๋์ํ๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ , ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ค์ํ ์ด๊ธฐ ์ํ๋ผ๊ณ ํ ์ ์์ต๋๋ค. hdfs dfsadmin -safemode get # SafeMode ์ํ ํ์ธ hdfs dfsadmin -safemode enter # SafeMode ์ผ๊ธฐ hdfs dfsadmin -safemode leave # SafeMode ๋๊ธฐ ๐ 1.5. Read ์ Write ์ ๋ด๋ถ์์ ๋ฒ์ด์ง๋ ์ผ โ HDFS Write ์ถ์ฒ : HDFS Write ์๋ก์ด ํ์ผ ์์ฑ์ ํด๋ผ์ด์ธํธ๊ฐ DistributedFileSystem ์์ create() ๋ฉ์๋ ํธ์ถํฉ๋๋ค. DistributedFileSystem ๋ RPC๋ก namenode์ ์ฐ๊ฒฐํ๊ณ , ์๋ก์ด ํ์ผ ์์ฑ์ ์์ํฉ๋๋ค. ์ด๋ Namenode ์ ์๋ก์ด ํ์ผ ์์ฑ ์์ฒญ์ ๋ํ verification์ ์งํํฉ๋๋ค. verification ์ ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ๋์ง, ํด๋น ๊ฒฝ๋ก์ ๋ํ ๊ถํ ๋ฑ์ ํ์ธํฉ๋๋ค. ์ด ๋ verification ์์ ์คํจํ๋ฉด client์์๋ IOException์ด ๋ฐ์ํฉ๋๋ค. verification์ ์ฑ๊ณตํ๋ฉด namenode ์์ ํด๋น ํ์ผ์ ๋ํ record ๊ฐ ์์ฑ๋ฉ๋๋ค. namenode ์์ ํ์ผ record ๊ฐ ์์ฑ๋๋ฉด ํด๋ผ์ด์ธํธ์ FSDataOutputStream ๊ฐ ๋ฆฌํด ๋ฉ๋๋ค. FSDataOutputStream ์ write ๋ฅผ ์ํํฉ๋๋ค. FSDataOutputStream ์ datanode ์ namenode ์ ์ํธ์์ฉํ๋ DFSOutputStream ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. DFSOutputStream ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ write ํ๊ธฐ ์ํ packet์ ๋ง๋ญ๋๋ค. ํด๋น packet ์ DataQueue์ ๋ค์ด๊ฐ๋๋ค. DataStreamer ๊ฐ NameNode์ ์ ๋ธ๋ก ํ ๋น์ ์์ฒญํ๊ณ , ๋ณต์ ์ ์ฌ์ฉํ ๋ฐ๋์งํ DataNode๋ฅผ ์ ํํ๋ ๊ณผ์ ์ ๊ฐ์ง๋๋ค. ๋ณต์ ๊ณผ์ ์ DataNode๋ค๋ก ํ์ดํ๋ผ์ธ์ ์์ฑํ๋ฉด์ ์์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ณต์ ์์ค์ด 3์ด๊ธฐ ๋๋ฌธ์ ํ์ดํ๋ผ์ธ์ 3๊ฐ์ DataNode๊ฐ ์๊ฒ ๋ฉ๋๋ค. DataStreamer ๋ DataQueue ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ consume ํด์ ํ์ดํ๋ผ์ธ์ ์ฒซ๋ฒ์งธ datanode ์ ์ ์ฅํ ํจํท์ ์ ์กํฉ๋๋ค. ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ฌถ์ธ ๋ชจ๋ ๋ฐ์ดํฐ๋ ธ๋๋ ์ ์ฅ์ ์ํด ๋ฐ์ packet ์ ๋ชจ๋ ์ ์ฅํ๊ณ , ์ด๊ฒ์ ํ์ดํ๋ผ์ธ์ ๋ค์ ๋ฐ์ดํฐ๋ ธ๋๋ก foward ํฉ๋๋ค. DFSOutputStream์ AckQueue๋ DataNodes๋ก๋ถํฐ โ๊ฐ๋ฅโ ์ด๋ผ๋ ์น์ธ์ ๋ฐ์ผ๋ฉด ์ ์ฅ๋๋ queue์ ๋๋ค. ํ์ดํ๋ผ์ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ธ๋๋ก๋ถํฐ Ack ๊ฐ Queue ์ ๋ค์ด์ค๋ฉด, AckQueue ๋ ์ญ์ ๋ฉ๋๋ค. ๋ง์ฝ ํ๋์ datanode ๋ผ๋ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ack ์ ์ก์ ์คํจํ๋ฉด, Ack Queue ์ ๋ฐ์ ํจํท์ ๋ณด๋ฅผ ๋ณด๊ณ ์ฌ์์์ ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ์ write ์์ ์ด ๋๋๋ฉด, close() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. close() ๋ ๋ชจ๋ ๋จ์ data packet ์ flush ํ๊ณ ack ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ง์ง๋ง ack๊น์ง ๋์ฐฉํ๋ฉด ํด๋ผ์ด์ธํธ๋ namenode์ write ์์ ์ด ๋๋ฌ์์ ์๋ฆฌ๋ฉฐ, ๋ง๋ฌด๋ฆฌ ๋ฉ๋๋ค. โ HDFS Read ์ถ์ฒ : HDFS Read ํด๋ผ์ด์ธํธ๊ฐ DistributedFileSystem ์ open() ๋ฉ์๋๋ก HDFS ํ์ผ์ ์ฝ๊ฒ ๋ค๋ ์์ฒญ์ ์์ํฉ๋๋ค. DistributedFileSystem์ RPC๋ก namenode ์ ์ฐ๊ฒฐํฉ๋๋ค. open ๋์์ด ๋๋ ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค. ์ด ๋ ๋ฉํ๋ฐ์ดํฐ ์์๋ ํด๋น ํ์ผ์ด ์ ์ฅ๋์ด์๋ block์ location ์ ๋ณด ๋ฑ์ด ์์ต๋๋ค. (ํ ๋ฒ์ ๋ชจ๋ ๋ธ๋ก์ ๋ณด๋ฅผ ๋ฆฌํดํ์ง ์๊ณ ์ฒ์ ๋ช๊ฐ์ ๋ธ๋ก์ ์ฃผ์๋ฅผ ๋ฆฌํดํฉ๋๋ค.) ๋ฉํ๋ฐ์ดํฐ ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ํด๋น ๋ธ๋ก(copy๋ณธ ํฌํจ)์ ๊ฐ์ง Datanode ๋ค์ ์ฃผ์๊ฐ ๋ฆฌํด๋ฉ๋๋ค. ๋ฐ์ DataNode ์ฃผ์์ ๋ณด๋ก FSDataInputStream ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด client์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. FSDataInputStream๋ DataNode ์ NameNode ์ ์ํธ์์ฉํ ์ ์๋ DFSInputStream ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. client๊ฐ DFSInputStream์ ๋ํด read() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๋์ ํ์ผ์ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ด ์๋ datanode ์ connection ์ ๋งบ์ต๋๋ค. ์ด๋ ์ฐ๊ฒฐํ๋ ๋์์ primary datanode๋ก, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ๋ ธ๋๋ฅผ ์ฐพ๊ฒ ๋ฉ๋๋ค. a. ์1 - Local Block Firstblock A๊ฐ datanode 1 ์ primary ๋ฒ์ ์ด ์๊ณ datanode 2,3 ์ replica ๋ฒ์ ์ด ์๋ค๊ณ ํ์๋, datanode2 ์ ์์นํ client ์์ block A ์ ๋ํด read ์์ฒญ์ด ์จ๋ค๋ฉด, ์์ ์ ๋ก์ปฌ์ธ datanode 2์ replica ๋ฒ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. b. ์2 - Rack Awareness block A๊ฐ rack a์ ์์นํ datanode 1 ์ primary ๋ฒ์ ์ด ์๊ณ rack b์ ์์นํ datanode 2, rack b์ ์์นํ datanode 3 ์ replica ๋ฒ์ ์ด ์๋ค๊ณ ํ์๋, rack2 ์ ์์นํ datanode 4์ ์๋ client ์์ block A ์ ๋ํด read ์์ฒญ์ด ์จ๋ค๋ฉด, ์์ ๊ณผ ๊ฐ์ rack2 ์ ์์นํ datanode 2์ replica ๋ฒ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ฐ์ดํฐ๋ read() ๋ฉ์๋๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ ๋๋ง๋ค stream ํํ๋ก ๋ฆฌํด๋ฉ๋๋ค. read ๊ณผ์ ์ end of block ์ ๋๋ฌ ํ ๋๊น์ง ์ง์๋ฉ๋๋ค. end of block ์ ๋๋ฌํ๋ฉด, DFSInputStream ์ datanode ์์ ์ฐ๊ฒฐ์ ๋๊ณ , ํด๋น ํ์ผ์ ๋ค์ ๋ธ๋ก์ด ์์นํ ๋ฐ์ดํฐ ๋ ธ๋์ ์ฐ๊ฒฐ์ ๋งบ์ต๋๋ค. ์ด ๊ณผ์ ์ ํด๋น ํ์ผ์ ๋ชจ๋ ๋ธ๋ก์ ์ฝ์ ๋๊น์ง ๋ฐ๋ณต ๋ฉ๋๋ค. read ๊ณผ์ ์ด ๋๋๋ฉด client ๋ close() ๋ก ๋ชจ๋ ์ฐ๊ฒฐ๊ณผ ์คํธ๋ฆผ์ ๋ซ๊ณ ๋ง๋ฌด๋ฆฌ ๋ฉ๋๋ค. โ ๐ 2. Hadoop H/A ํด๋ฌ์คํฐ Hadoop v1.x ๋ฒ์ ๊น์ง๋ NameNode ๋ SPOF(single point of failure)์์ต๋๋ค. ์ฆ, ํ๋์ NameNode ๊ฐ ๋ง๊ฐ์ง๋ฉด ์๋น์ค ์ ์ฒด๊ฐ ๋ง๊ฐ์ง๋ ๊ตฌ์กฐ์์ต๋๋ค. Hadoop ์ ๊ธฐ๋ณธ ์ํคํ ์ฒ๋ NameNode๋ฅผ Master, Datanode ๋ค์ Slave ๋ก ํ๋ Master-Slave ๊ตฌ์กฐ์ ๋๋ค. ์ด ์ค namenode ๋ ํ๋์ ์ธ์คํด์ค, datanode ๋ ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํ์ผ๋ฏ๋ก namenode๋ bottleneck ์ด ๋๊ธฐ ์ฌ์ ์ต๋๋ค. namenode ๊ฐ ์ด์ฉ ๋ถ๊ฐ๋ฅํ ์ํ๋ผ๋ฉด, datanode๊ฐ ์๋ฌด๋ฆฌ ๋ง๋๋ผ๋ ํด๋ฌ์คํฐ ์ ์ฒด๊ฐ ์ด์ฉ ๋ถ๊ฐ๋ฅํด์ง๋๋ค. ์ด๊ธฐ ๋ฒ์ ์์๋ namenode์ ๋ฐ์ดํฐ ์ ์ค์ ๋ฐฉ์งํ๋ secondary namenode ๊ฐ ์์์ง๋ง Availability ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ์ง๋ ๋ชปํ์์ต๋๋ค. ์ด๋ฌํ ์ํ๋ผ๋ฉด ์์์น ๋ชปํ ์ฅ์ ๋ฟ๋ง ์๋๋ผ, ๊ณํ๋ ์ ๊ทธ๋ ์ด๋๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํด์ downtime ์ด ๋ฐ์ํ ์ ๋ฐ์ ์์์ต๋๋ค. ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด H/A ์ํคํ ์ฒ์ ๋๋ค. HA ํด๋ฌ์คํฐ์์๋ ํ๋์ NameNode๊ฐ Active ์ํ๋ก ๋์ํ๊ณ , ๋ค๋ฅธ ํ๋๋ Standby ์ํ๋ก ๋๊ธฐํ๊ณ ์์ต๋๋ค. ์ด ๋ NameNode๋ ํญ์ ์คํ ์ค์ด๋ฉฐ, Active NameNode์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด Standby NameNode๊ฐ ์๋์ผ๋ก Active ์ํ๋ก ์ ํ๋์ด ์๋น์ค๋ฅผ ์ง์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ดํ์์ ์ต์ํํ ์ ์์ต๋๋ค. Standby NameNode๋ ๋จ์ํ ๋๊ธฐ ์ํ๊ฐ ์๋๋ผ, Hadoop ํด๋ฌ์คํฐ์ ์๋ ์ฅ์ ์กฐ์น(Failover) ๊ธฐ๋ฅ์ ์ํํ๋ฉฐ, ๋ฐฑ์ NameNode๋ก์์ ์ญํ ๋ ๋ด๋นํฉ๋๋ค. ์ด๋ก ์ธํด ๊ด๋ฆฌ์๊ฐ ์๋์ผ๋ก ์ ํํ ํ์ ์์ด ์๋ํ๋ ์ฅ์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ง๋ณด์ ์์ ์ค์๋ Graceful Failover๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค. โ HA ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ํด๊ฒฐํด์ผ ํ ๋ ๊ฐ์ง ์ฃผ์ ์ด์ ์ฒซ ๋ฒ์งธ : Active์ Standby NameNode๋ ํญ์ ๋๊ธฐํ๋์ด์ผ ํฉ๋๋ค. ๋ NameNode๊ฐ ๊ฐ์ ์ํ๋ฅผ ์ ์งํ์ง ์์ผ๋ฉด ์ฅ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ : ๋์์ ๋ ๊ฐ์ Active NameNode๊ฐ ์กด์ฌํ๋ฉด ์ ๋ฉ๋๋ค. ๋ ๊ฐ์ Active NameNode ๊ฐ ์์ผ๋ฉด, ๊ฐ NameNode ๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์๊ฐ ์์ต๋๋ค. ( ์ค์ ๋ก ๋คํธ์ํฌ๊ฐ ๋จ์ ๋๋ฉด ์ผ์์ ์ผ๋ก 2๊ฐ์ Active NameNode ๊ฐ ์๊ธธ ์ ์์ต๋๋ค. ) ์ด๋ฐ ์ํฉ์ Split-brain์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ NameNode๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋์ด ์ฌ๊ฐํ ๋ฐ์ดํฐ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Fencing์ด๋ผ๋ ์ ์ฐจ๋ฅผ ํตํด ํ์ชฝ NameNode์ ์ ๊ทผ์ ์ฐจ๋จํ๊ณ , ๋จ ํ๋์ Active NameNode๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅํฉ๋๋ค. โ HA Architecture์ ๊ตฌํ ๋ฐฉ์ Hadoop์์ HA ํ๊ฒฝ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ : Quorum Journal Nodes ์ฌ์ฉ ์ฌ๋ฌ ๊ฐ์ JournalNode๋ฅผ ํตํด NameNode ๊ฐ ๋ก๊ทธ๋ฅผ ๊ณต์ ํ๊ณ ๋๊ธฐํํฉ๋๋ค. ๋ค์๊ฒฐ(Quorum) ๋ฐฉ์์ ํตํด ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ์ฅ์ ๋ณต๊ตฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค. ๋ ๋ฒ์งธ : NFS ๊ธฐ๋ฐ์ ๊ณต์ ์ ์ฅ์ ์ฌ์ฉ Active์ Standby NameNode๊ฐ ๊ฐ์ ์คํ ๋ฆฌ์ง๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ด ๋ฐฉ์์ ๊ตฌํ์ด ์๋์ ์ผ๋ก ๋จ์ํ์ง๋ง, NFS ์์ฒด์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์์กดํ๊ฒ ๋ฉ๋๋ค. ์ด ๋์ ๋ํด์๋ ์๋์์ ๋ ์์ธํ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ ์, ์ด๋ฌํ H/A ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑ ํ ์ ์๊ฒ ํด์ค ํต์ฌ ์์ง์ธ Zookeeper ์ Hadoop ์ ๊ด๊ณ๋ฅผ ์กฐ๊ธ ์ง์ด๋ณด๊ณ ๊ฐ๊ฒ ์ต๋๋ค. ๐ 2.1. ํด๋ฌ์คํฐ ๊ตฌ์ฑ ์ํด ์ ์ ์ง์ด๊ฐ Zookeeper Apache Zookeeper ์ ๋ํ ๋ช ํํ ์ด๋ก ์ ๋ค๋ฅธ ํฌ์คํ ์์ ์์๋ณผ ์์ ์ด๋ฉฐ, ์ง๊ธ์ ์ด Zookeeper ๊ฐ ๋๋ต ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ Hadoop ์ H/A Cluster ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ ํ์ํ์ง๋ง ๊ฐ๋ตํ๊ฒ ์์ฑํ๊ฒ ์ต๋๋ค. Apache ZooKeeper๋ ๋ถ์ฐ ์์คํ ์์ ์๋ฒ๋ค ๊ฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐ์จํ๋ ์ญํ ์ ์ํํ๋ ์ค์ ์ง์คํ ์ฝ๋๋ค์ด์ ์๋น์ค์ ๋๋ค. Hadoop ํด๋ฌ์คํฐ์์๋ NameNode์ ๊ณ ๊ฐ์ฉ์ฑ(High Availability, H/A)์ ๊ตฌ์ฑํ ๋ ํ์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Hadoop์ ํ๋์ NameNode๋ง์ ์ฌ์ฉํฉ๋๋ค. ์ด NameNode๊ฐ ๋ค์ด๋๋ฉด ์ ์ฒด HDFS๊ฐ ์๋์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์, ์๋น์ค ์์ ์ฑ์ ์ํด NameNode๋ฅผ Active/Standby ๊ตฌ์กฐ๋ก ์ด์คํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ ์ด๋ NameNode๊ฐ Active๊ฐ ๋ ์ง ๊ฒฐ์ ํ๊ณ ์ํ๋ฅผ ๊ฐ์ํ๋ ์ญํ ์ ZooKeeper๊ฐ ๋งก์ต๋๋ค. ZooKeeper๋ Ephemeral ๋ ธ๋์ Watch ๊ธฐ๋ฅ์ ํตํด ๋ NameNode์ ์ํ๋ฅผ ๊ฐ์ํฉ๋๋ค. ๋ NameNode๋ ZooKeeper์ ์ฐ๊ฒฐ๋๋ฉฐ, ์๋ก ์ค๋ณต๋์ง ์๋๋ก ํ๋๋ง Active ์ํ๊ฐ ๋ ์ ์์ต๋๋ค. Active๋ก ์ ์ถ๋ NameNode๋ ZooKeeper ๋ด ZNode๋ฅผ ์ ์ ํ๊ณ , ๋๋จธ์ง ํ๋๋ Standby ์ํ๋ก ๋๊ธฐํฉ๋๋ค. ๋ง์ฝ Active NameNode๊ฐ ๋น์ ์ ์ข ๋ฃ๋๋ฉด ZooKeeper๋ ์ด ์ฐ๊ฒฐ์ด ๋๊ธด ๊ฒ์ ๊ฐ์งํ๊ณ , ๋๊ธฐ ์ค์ด๋ Standby NameNode๋ฅผ ์๋์ผ๋ก Active๋ก ์น๊ฒฉ์ํต๋๋ค. ์ด๋ฅผ ํตํด ์๋น์ค ์ค๋จ ์์ด NameNode๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ํด๋น ๊ณผ์ ์ ์ดํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฒซ๋ฒ์งธ, NameNode ์ํ ์ ๋ณด๋ฅผ ZooKeeper์ ZNode์ ๋ฑ๋กํฉ๋๋ค. HDFS ํด๋ฌ์คํฐ๊ฐ HA ๋ชจ๋๋ก ๊ตฌ์ฑ๋๋ฉด, ๊ฐ NameNode๋ ZKFailoverController(ZKFC) ํ๋ก์ธ์ค๋ฅผ ํจ๊ป ์คํํฉ๋๋ค. ์ด ZKFC๋ ZooKeeper์ ์ฐ๊ฒฐ๋๋ฉฐ, ์์ ์ NameNode๊ฐ Active ๋๋ Standby ์ํ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ๋ณด๋ฅผ ZooKeeper์ ZNode์ Ephemeral(์์) ZNode๋ก ๋ฑ๋กํฉ๋๋ค. /hadoop-ha/[nameservice]/ActiveStandbyElectorLock ์ด ActiveStandbyElectorLock ๋ ธ๋๋ ๋จ ํ๋์ NameNode๋ง ์์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ํ์ฌ Active NameNode๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ( ์ด๋ก์จ ์คํ๋ฆฟ ๋ธ๋ ์ธ ํ์์ ์ด๋์ ๋๋ ๋ฐฉ์ดํด ์ค ์ ์์ต๋๋ค. Zookeeper ๋ ์์ฒด ์์ง๋ง์ผ๋ก Lock ์ ๊ตฌํํ ์ ์์๋งํผ ๋์์ฑ ์ด์๋ฅผ ๋ฏผ๊ฐํ๊ฒ ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค. ) ๋๋ฒ์งธ, Ephemeral ZNode์ Watcher๋ฅผ ํตํ ์ํ ๊ฐ์ง ๋ฐ ์ฅ์ ์ธ์์ ํฉ๋๋ค. ๊ฐ NameNode์๋ ZKFailoverController(ZKFC)๊ฐ ํจ๊ป ์คํ๋๋ฉฐ, ZooKeeper์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด ZKFC๋ ์์ ์ด ๊ด๋ฆฌํ๋ NameNode๊ฐ Active ์ํ๊ฐ ๋์์ ๋, ZooKeeper ๋ด๋ถ์ /hadoop-ha/[nameservice]/ActiveStandbyElectorLock ๊ฒฝ๋ก์ Ephemeral ZNode๋ฅผ ์์ฑํฉ๋๋ค. Ephemeral ZNode๋ ํด๋น ZKFC์ ZooKeeper ๊ฐ์ ์ธ์ ์ด ์ ์ง๋๋ ๋์๋ง ์กด์ฌํ๋ฉฐ, ์ธ์ ์ด ๋๊ธฐ๋ฉด ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค. ์ด ZNode์๋ ๋ค๋ฅธ Standby ์ํ์ ZKFC ์ธ์คํด์ค๋ค์ด watcher๋ฅผ ๋ฑ๋กํฉ๋๋ค. ZooKeeper๋ ํด๋น ZNode์ ๋ณํ(์ญ์ , ์์ ๋ฑ)๊ฐ ๋ฐ์ํ๋ฉด, watch๋ฅผ ๋ฑ๋กํ ๋ชจ๋ ZKFC์๊ฒ ์ผํ์ฑ ์ด๋ฒคํธ ์๋ฆผ์ ์ ๋ฌํฉ๋๋ค. ์ด ์ด๋ฒคํธ๋ Active NameNode๊ฐ ๋น์ ์ ์ข ๋ฃ๋์ด ์ธ์ ์ด ๋์ด์ง๊ณ , ZNode๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. ์ด ์๋ฆผ์ ๋ฐ์ Standby NameNode๋ค์ ZKFC๋ ์ฅ์ ์ํฉ์ ๊ฐ์งํ๊ณ ์ฆ์ Leader Election(๋ฆฌ๋ ์ ์ถ) ์ ์ฐจ์ ์ฐธ์ฌํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ZooKeeper๋ ์์ฒด์ ์ผ๋ก ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํ์ง๋ ์์ง๋ง, Ephemeral ZNode์ watch ๋ฉ์ปค๋์ฆ์ ํตํด ์ํ ๋ณํ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์งํ๊ณ ์๋ฆผ์ ์ ๋ฌํจ์ผ๋ก์จ, ํด๋ผ์ด์ธํธ ์ธก์์ ์ฅ์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ณด์กฐํ๋ ์ญํ ์ ์ํํฉ๋๋ค. ์ธ๋ฒ์งธ, ZKFC๊ฐ ์ํ ๋ณํ ๊ฐ์ง ํ ๋ฆฌ๋ ์ ์ถ์ ์งํํฉ๋๋ค. Ephemeral ZNode ์ญ์ ๋ ZooKeeper ๋ด๋ถ์ ์ผ๋ก watcher ๋ฉ์ปค๋์ฆ์ ํตํด ๋ชจ๋ ZKFC์ ํต์ง๋ฉ๋๋ค. ๊ฐ Standby NameNode์ ZKFC๋ ๊ฐ NameNode ์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๋ค๊ฐ, ์ด๋ฅผ ๊ฐ์งํ๊ณ ์ฆ์ Leader Election(๋ฆฌ๋ ์ ์ถ)์ ์ฐธ์ฌํฉ๋๋ค. ์ด ๋ฆฌ๋ ์ ์ถ์ ZooKeeper์ ActiveStandbyElector ํด๋์ค๋ฅผ ํตํด ๊ตฌํ๋๋ฉฐ, ์ ์ถ๋ ๋ฆฌ๋๋ง์ด ActiveStandbyElectorLock ZNode์ ์๋ก Ephemeral ๋ ธ๋๋ฅผ ์์ฑํ ๊ถํ์ ํ๋ํฉ๋๋ค. ๊ฒฐ๊ตญ, ๋จ ํ๋์ Standby NameNode๋ง์ด ์น๊ฒฉ๋์ด Active ์ํ๋ก ์ ํ๋ฉ๋๋ค. ๋ค๋ฒ์งธ, ์๋ก์ด Active NameNode ๋ฑ๋ก ๋ฐ ์ํ๋ฅผ ๋ฐ์ํฉ๋๋ค. ๋ฆฌ๋๋ก ์ ์ถ๋ NameNode๋ ZooKeeper์ ActiveStandbyElectorLock ๊ฒฝ๋ก์ Ephemeral ZNode๋ฅผ ์์ฑํ์ฌ ์์ ์ด ์๋ก์ด Active์์ ๋ฑ๋กํฉ๋๋ค. ์ดํ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์(DataNode, Client ๋ฑ)๋ ZooKeeper์์ ์ด ์ ๋ณด๋ฅผ ์กฐํํ์ฌ, ์๋กญ๊ฒ ์น๊ฒฉ๋ NameNode๋ก ์ฐ๊ฒฐํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ์๋น์ค๋ ์ค๋จ ์์ด ์ง์๋ฉ๋๋ค. ๋ค์ฏ๋ฒ์งธ, ๊ธฐ์กด ์ฅ์ NameNode ๋ณต๊ตฌ ํ Standby๋ก ์ฌ๋ฑ๋กํฉ๋๋ค. ์ฅ์ ๋ก ์ธํด ์ข ๋ฃ๋์๋ NameNode๊ฐ ์ฌ์์๋๋ฉด, ํด๋น ๋ ธ๋์ ZKFC๋ ๋ค์ ZooKeeper์ ์ฐ๊ฒฐํ์ฌ Standby ์ํ๋ก ํด๋ฌ์คํฐ์ ์ฐธ์ฌํฉ๋๋ค. ์ด๋ ZooKeeper๋ ์ด๋ฏธ Active๊ฐ ์กด์ฌํจ์ ์๊ณ ์์ผ๋ฏ๋ก, ์ค๋ณต ํ์ฑํ๋ฅผ ๋ฐฉ์งํ๊ณ ํด๋น ๋ ธ๋๋ฅผ Standby๋ก๋ง ์ ์งํฉ๋๋ค. Apache Zookeeper ์ ๋ํ ๋ ์์ธํ ์ด์ผ๊ธฐ๋ ์ถํ Zookeeper ๋ฅผ ๋ ๊น๊ฒ ๊ณต๋ถํ๊ณ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ํ์ฌ๋ zNode ์ ๊ฐ๋ ๊ณผ, watch ์ ๊ฐ๋ . ๊ทธ๋ฆฌ๊ณ ๋ถ์ฐ๋ฝ์ ๊ฐ๋ ์ ๋๋ง ์์๋์ด๋, ํ๋ก์ ๊ณต๋ถํ๋๋ฐ์ ๋ฌธ์ ๊ฐ ์์๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค. ๐ 2.2. Quorum Journal Nodes H/A ์ถ์ฒ : Quorum Journal Nodes HDFS์ ๊ณ ๊ฐ์ฉ์ฑ(HA) ์ํคํ ์ฒ์์ Quorum Journal Nodes(QJN)์ด ํ์ํ๊ฒ ๋ ์ด์ ๋, Zookeeper๋ง์ผ๋ก๋ EditLog ๋๊ธฐํ ๋ฐ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋๋ค. Zookeeper๋ ์ฃผ๋ก NameNode์ ์ํ ๊ด๋ฆฌ์ Active/Standby ์ ํ์ ๋ด๋นํ์ง๋ง, HDFS์์ ์ค์ํ ์ญํ ์ ํ๋ EditLog์ ์ ์ฅ๊ณผ ๋๊ธฐํ๋ ์ฒ๋ฆฌํ์ง ๋ชปํฉ๋๋ค. ๋ํ, ๋ ๊ฐ์ NameNode๊ฐ ๋์์ Active๊ฐ ๋๋ Split-brain ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋, Quorum Journal Nodes์ ๊ฐ์ ๋ณ๋์ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค. Active์ Standby NameNode๋ Journal Nodes๋ผ๋ ๋ณ๋์ ๋ ธ๋ ๊ทธ๋ฃน(๋๋ ๋ฐ๋ชฌ ํ๋ก์ธ์ค)์ ํตํด ๋๊ธฐํ๋ฅผ ์ ์งํฉ๋๋ค. Journal Nodes๋ ring topology๋ก ์๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. Journal Node์ ๋ค์ด์จ request๋ ring ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ณต์ฌ๋ฉ๋๋ค. ์ด๋ก ์ธํด ํน์ Journal Node์ failure๊ฐ ๋ฐ์ํด๋ Fault Tolerance๊ฐ ๋ณด์ฅ๋ฉ๋๋ค. Active NameNode๋ Journal Node์ ์๋ EditLogs๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. Standby NameNode๋ Journal Node๋ก๋ถํฐ EditLogs์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ณ , ๊ทธ๊ฒ์ ์์ ์ namespace์ ์ ์ฉํฉ๋๋ค. Failover ์์ Standby NameNode๋ Active NameNode๊ฐ ๋๊ธฐ ์ ์ ์ฐ์ ์์ ์ด ๊ฐ์ง metadata์ ๋ด์ฉ์ด Journal Node์ ์๋ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ํ ์ํ์ธ์ง ํ์ธํฉ๋๋ค. Journal Node์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฑํฌ๋์๋ค๋ฉด ๊ทธ๋ Active NameNode๊ฐ ๋ฉ๋๋ค. ๋ชจ๋ DataNode๋ Active NameNode์ Standby NameNode์ IP ์ฃผ์๋ฅผ ๋ชจ๋ ์๊ณ ์์ต๋๋ค. DataNode๋ ์์ ์ heartbeat์ block report ๋ฐ์ดํฐ๋ฅผ ๋ NameNode์๊ฒ ๋ณด๋ ๋๋ค. ์ด๋ก ์ธํด Standby๋ Active๊ฐ ๋๊ธฐ ์ ์ ์ด๋ฏธ DataNode ์ ๋ณด์ block location ์ ๋ณด๋ฅผ ๋ชจ๋ ์๊ณ ์์ผ๋ฏ๋ก ๋น ๋ฅด๊ฒ failover๋ฅผ ์ํํ ์ ์์ต๋๋ค. ํนํ, Split-brain ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด, QJN์ ํ๋์ NameNode๋ง์ด EditLog๋ฅผ ๊ธฐ๋กํ๋๋ก ๋ณด์ฅํฉ๋๋ค. Standby NameNode๊ฐ QJN์ ๋ํ write ๊ถํ์ ํ๋ํ๋ฉด, ๋ค๋ฅธ NameNode๋ Active ์ํ๋ก ์ ํ๋์ง ๋ชปํ๋๋ก ๋ง์ต๋๋ค. ์ด ๊ณผ์ ์ Fencing์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ NameNode๊ฐ ๋์์ Active ์ํ๊ฐ ๋๋ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ ์ ์์ต๋๋ค. Fencing์ด ์๋ฃ๋ ํ, Standby๋ Active ์ญํ ์ ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค. ๐ 2.3. Shared Storage H/A ๋ง ํ ๊ตฌ์กฐ๋ก ๋ณ๋ ์ ๋ ๋ ธ๋๋ค์ด ์๋ก ์ฐ๊ฒฐ๋์ด ๋๊ธฐํํ๋ Quorum Journal Nodes ๋ฐฉ๋ฒ๋ ์์ง๋ง, ํ๋์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ณต์ ํ๋ Shared Storage ๋ฐฉ์๋ ์์ต๋๋ค. ๋จผ์ Active NameNode๋ EditLog๋ฅผ ๊ณต์ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํฉ๋๋ค. ์ดํ Standby NameNode๋ ๊ณต์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ EditLog๋ฅผ ์ฝ์ด ์์ ์ namespace์ ๋ฐ์ํฉ๋๋ค. ์ด ๊ณผ์ ์ Standby NameNode๊ฐ Active NameNode๋ก์์ ์ญํ ์ ๋งก์ ์ค๋น๊ฐ ๋๋๋ก ๋์์ค๋๋ค. Failover๊ฐ ๋ฐ์ํ๋ฉด, Standby NameNode๋ ๊ณต์ ์คํ ๋ฆฌ์ง์ ์๋ EditLog์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ ํ, Active NameNode๋ก ์ ํ๋ฉ๋๋ค. ์ด๋, Standby NameNode๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ํ์ Active ์ํ๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ๋ํ, Split-brain์ ๋ฐฉ์งํ๊ธฐ ์ํด, Shared Storage ํ๊ฒฝ์์๋ fencing ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ Fencing์ ๋ ๊ฐ์ NameNode๊ฐ ๋์์ Active ์ํ๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ํ๋ก์ ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ์๋ ์ ์ด๋ ํ๋์ fencing ๋ฐฉ๋ฒ์ ์ค์ ํด์ผ ํฉ๋๋ค. ๋ค์ํ fencing ๋ฐฉ๋ฒ์ด ์์ ์ ์๋๋ฐ.. ์๋ฅผ ๋ค์ด, ๋ฌธ์ ๊ฐ ๋๋ NameNode์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃ์ํค๊ฑฐ๋, ํด๋น NameNode ์ ๊ณต์ ์คํ ๋ฆฌ์ง์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ทจ์ํ๋ ๋ฐฉ์์ด ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ด์คํํ ์ข ๋ฃ๊ฐ ์ด๋ ค์ด ํ๊ฒฝ์ ์๋ค๋ฉด, STONITH(Shoot the Other Node in the Head) ๋ผ๋ ๋ง์ง๋ง ์๋จ์ผ๋ก ์ฌ์ฉํ ์ ์๋ fencing ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. STONITH๋ ํน์ ์ ์ ๊ณต๊ธ ์ฅ์น๋ฅผ ์ด์ฉํด ํ์ฑํ๋ NameNode์ ๋จธ์ ์ ๊ฐ์ ๋ก ์ข ๋ฃ์ํต๋๋ค. ์ด๋ฅผ ํตํด, Split-brain ์ํฉ์ ๋ฐฉ์งํ๊ณ ์์คํ ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ๐ 2.4. Failover ๊ฒฐ๊ตญ ์์ ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ ๊ณต๋ถํด์ผ ํ๋ ์ด์ ๋, ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ์ฅ์ ์กฐ์น๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ๋ฅผ ์ํด์์ ๋๋ค. ์ฌ๊ธฐ์ ์ฅ์ ์กฐ์น๋, ์์คํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋, ์ด๋ฅผ ๊ฐ์งํ๊ณ ๋ ๋ฒ์งธ ์์คํ ์ผ๋ก ์๋์ผ๋ก ์ ํํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค ์ฅ์ ์กฐ์น์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋๋ฐ, ๊ด๋ฆฌ์๊ฐ ๊ณํ์ ์ด๊ณ ์๋์ ์ผ๋ก ์งํํ๋ Graceful Failover ๊ฐ ์๊ณ , ๊ด๋ฆฌ์๊ฐ ์๋ํ์ง ์์ ํ์ด๋ฐ์ ๊ฐ์๊ธฐ ์งํ๋๋ Atomic Failover ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์์ ์์๋ณด์๋, Zookeeper ๋ฅผ ํตํ Failover ๊ณผ์ ์ ์ด๋ฌํ Atomic Failover ๊ณผ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๐ 2.5. Observer NameNode ( ONN ) ํ๋ก์ ๋ํ ์ฒซ ๊ฒ์๊ธ์ธ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ์์ Version ์ ๋ํ ํฌ์คํ ๋ถ๋ถ์์ ๋ฏธ์ฒ ์ด์ผ๊ธฐ ํ์ง ๋ชปํ ๋ถ๋ถ์ด ๋ฐ๋ก Observer NameNode ์ ๋๋ค. Observer NameNode ๋ ํ๋ก 3.x ๋ฒ์ ๋ถํฐ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ( ์๋์ ์ผ๋ก ๋นผ๋จน์ ๊ฑด ์๋๊ณ , ๊น๋นกํ์ต๋๋ค ใ ใ .. ) ๊ทธ๋ผ ๋์ฒด Observer NameNode ๊ฐ ๋ฌด์์ด๊ณ ์ ์๊ธด ๊ฒ์ผ๊น์. ์์์ ํฌ์คํ ํ HA ์ํคํ ์ฒ์์ Active NameNode๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์ผ๋ฉฐ, Standby NameNode๋ ๋จ์ํ Active NameNode์ ๊ฐ๋๋ก ๋๊ธฐํ๋ง ์ํํฉ๋๋ค. HA๋ ๋ฌ์ฑ๋์์ง๋ง, ์ฌ์ ํ ๋จ์ผ Active NameNode๊ฐ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋จ์ผ Active NameNode์ ๋ถํ๊ฐ ์ฌํด์ง๋ฉด, HA๋ฅผ ์ด์ฉํ์ฌ Failover๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ถํ๋ก ์ธํด Active NameNode๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ์ฐ์์ ์ผ๋ก ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฑ์ฅํ ๊ฒ์ด Observer NameNode ์ ๋๋ค. Observer NameNode๋ HDFS์์ Active NameNode์ Standby NameNode์ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์ญํ ์ ํฉ๋๋ค. Standby NameNode๋ Active NameNode์ ๋๊ธฐํ๋์ด ์์ง๋ง, ์ค์ ๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ์๊ณ , ์ฅ์ ๋ฐ์ ์ Failover๋ฅผ ์ํด ๋๊ธฐ๋ง ํฉ๋๋ค. ๋ฐ๋ฉด, Observer NameNode๋ Standby์ ์ ์ฌํ๊ฒ ์ํ๋ฅผ ์ ์งํ์ง๋ง, Active NameNode์ฒ๋ผ ์ฝ๊ธฐ ์์ฒญ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ฆ, Observer NameNode๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์ฒญ์ ๋ฐ์๋ค์ผ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด Active NameNode์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํฌ ์ ์์ต๋๋ค. HDFS์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ โwrite-once-read-manyโ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฆ ๋๋ค. ์ฆ, ํ ๋ฒ ์ฐ๊ณ ์ฌ๋ฌ ๋ฒ ์ฝ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ถ์ Observer NameNode๊ฐ ์ฝ๊ธฐ ์์ฒญ์ ๋ถ๋ดํจ์ผ๋ก์จ Active NameNode์ ๋ถํ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ Active NameNode๊ฐ ์ฒ๋ฆฌํด์ผ ํ ์ฝ๊ธฐ ์์ ์ ์์ด ์ค์ด๋ค์ด ์์คํ ์ ์ ์ฒด ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ, NameNode ๋ ํ๋ก 3 ๋ฒ์ ๋ถํฐ, HA Hadoop Cluster ์์ 3๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง ์ ์๊ฒ ๋ฉ๋๋ค. ( Active, Standby, Observer ) ๋ํ, NameNode ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์์ต๋๋ค. active โ observer ( : โ ๋ถ๊ฐ๋ฅ ) observer โ active ( : โ ๋ถ๊ฐ๋ฅ ) active โ standby โ observer ( : โ ๊ฐ๋ฅ ) observer โ standby โ active ( : โ ๊ฐ๋ฅ ) ์ฆ, ๊ฐ๋ฅํ ์ ์ด ์์๋ ๋ฐ๋์ ์ค๊ฐ์ standby๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ ํ ์ด์ ๋, ์ผ๋ฐ์ ์ผ๋ก ์์ ์ฑ๊ณผ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ํนํ observer๋ passive(์๋์ ) ์ญํ ์ด๊ธฐ ๋๋ฌธ์, ๊ณง๋ฐ๋ก ์๋น์ค๋ฅผ ์ด์ํ๋ active๋ก ์ ํ๋๋ฉด ์ํํ ์ ์์ด ์ด๋ฐ ์ ํ์ ๋ก๋๋ค. โ Read-Write ์ ์ผ๊ด์ฑ ์ ์ง ๋ฐฉ๋ฒ ( ํ๋์ ํด๋ผ์ด์ธํธ - read your own writes ) ๊ธฐ์กด ํ๋ก์ ์ฐ๊ธฐ ์์ ์ด ์์ ํ ์ข ๋ฃ๋์ด close() ๋ฉ์๋๊ฐ ์คํ๋จ์ผ๋ก์จ NameNode์ edit log์ ๋ฐ์๋๊ณ , ํด๋น block์ด ์ต์ข ์ ์ผ๋ก commit๋๊ธฐ ์ ๊น์ง๋, ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ๋ฌผ๋ก , ๋์ผ ํด๋ผ์ด์ธํธ๋ผ๋ ๊ทธ ๋ฐ์ดํฐ๋ ๋ณด์ฅ๋์ง ์์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ write ๋์ค read ๋ฅผ ํ์ฌ๋ ๋ฌธ์ ๊ฐ ๋์ง ์๊ฒ๋ ์ค๊ณ๊ฐ ๋์ด์์์ต๋๋ค. ํ์ง๋ง ํ๋ก V3 ์ ๋ฑ์ฅํ Observer NameNode ๋, wrtie ๊ฐ close() ๋ ๋์์ง๋ง, NameNode ๋ก๋ถํฐ ๋ณต์ฌ๋ฅผ ์๋ฃํ์ง ๋ชปํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์์์ ์ค๋ช ํ์๋ฏ, Observer NameNode ๋ Active NameNode ์ ๋น์ทํ ์ญํ ์ ํ์ง๋ง read ์ ์ฉ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ผ๊ด์ฑ์ด ๊นจ์ง๊ฒ ๋๋ฉด, ์ฝ๊ธฐ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ํ๋ก V3 ๋ถํฐ๋ State ID ๋ผ๋ ๊ฒ์ ๋์ ํ๊ฒ ๋ฉ๋๋ค. Iceberg ๋, Hudi ๋ฑ์ ๊ณต๋ถํ ์ ์ด ์๋ค๋ฉด, ์ด ํ ์ด๋ธ ํฌ๋ฉง๋ค์ด ACID ๋ฅผ ๋ณด์ฅํด ์ค ๋, ์ค๋ ์ท ์์ด๋๋ผ๋ ๊ฒ์ ์ฐ๋ ๊ฑธ ์ ์ ์์ต๋๋ค. ํ๋ก๋ ๋น์ทํ ๊ฐ๋ ์ผ๋ก State ID ๋ฅผ ์ฌ์ฉํฉ๋๋ค. state ID๋ Namenode์ transaction ID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ฉฐ, ํด๋ผ์ด์ธํธ ์ธก์์ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅ ๋ฐ ๊ด๋ฆฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ด state ID๋ฅผ RPC ์์ฒญ์ ํค๋์ ํฌํจ์์ผ NameNode์ ์ ๋ฌํฉ๋๋ค. ์ด state ID๋ Hadoop ๋ด๋ถ์ DFSClient์ ๊ฐ์ ๊ตฌ์ฑ ์์์์ ๋ฉ๋ชจ๋ฆฌ ์์ผ๋ก ์ ์ง๋๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ธฐ๋ ์ฝ๊ธฐ ์์ ์ ์ํํ ๋๋ง๋ค ๊ฐฑ์ ๋๊ณ ์ ์ก๋ฉ๋๋ค ์๋ฅผ ํ๋ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ Active NameNode๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ HDFS์ ์๋๋ค. Active NameNode๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ DataNode์ ์ ์ฅํ๋๋ก ์ง์ํ๊ณ , ํด๋น ์์ ์ ๋ํ transaction ID๋ฅผ ์์ฑํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ด transaction ID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก state ID๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ํด Observer NameNode ์ ์ฝ๊ธฐ๋ฅผ ์์ฒญํฉ๋๋ค. ์ด ๋, ํด๋ผ์ด์ธํธ๋ ์ด์ ์ ๊ฐฑ์ ํ state ID๋ฅผ Observer NameNode์ ์ ๋ฌํฉ๋๋ค. Observer NameNode๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ ํ์ฌ transaction ID์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ state ID๋ฅผ ๋น๊ตํฉ๋๋ค. ( ํ๋์ ํด๋ผ์ด์ธํธ์ผ ๊ฒฝ์ฐ, write ํ ์ชฝ์์ ๊ณ์ state ID ๋ฅผ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ฌธ์ ๊ฐ๋ฅํฉ๋๋ค. ) ๋ง์ฝ, Observer NameNode์ transaction ID๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ state ID๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ ์ต์ ์ด๋ผ๋ฉด, Observer๋ ์ฝ๊ธฐ ์์ ์ ์ํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ด ์ต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ ์ ์์ต๋๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ๊ฐ ๊ฐฑ์ ๋ ์ํ ID๋ฅผ ๋ณด๋ด์ง ์์ ๊ฒฝ์ฐ, Observer NameNode๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด ์ต์ ์ํ๋ฅผ ๋ฐ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ์๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ฉ๋๋ค. ๐ก Stats ID ๋ โํ์ผ ๋จ์โ๋ โ๋๋ ํ ๋ฆฌ ๋จ์โ๊ฐ ์๋๋ผ, HDFS ์ ์ฒด ๋ฉํ๋ฐ์ดํฐ์ ๊ธ๋ก๋ฒํ ๋ณ๊ฒฝ ์์๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค. โ Observer NameNode ์ Edit Log Tailing Observer NameNode์๊ฒ Edit log tailing์ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ Active NameNode์ ๊ธฐ๋ก๋๋ ์๋ก์ด ํธ๋์ญ์ ๋ค์ Observer NameNode๊ฐ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋๋์ ๋ฐ๋ผ, ์ฝ๊ธฐ ์์ฒญ ์ฒ๋ฆฌ ์์ ์ผ๊ด์ฑ๊ณผ ์ ํ๋๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. Observer NameNode๋ ์ฝ๊ธฐ ์ ์ฉ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ Active NameNode์ ๋ถํ๋ฅผ ์ค์ด๋ ์ญํ ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ต์ ์ํ๋ก ๋ฐ์๋์ง ์์ผ๋ฉด ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๊ฒ ๋์ด ์ ์ฒด ์์คํ ์ ๋ขฐ๋์ ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Edit log tailing์ ๋ฐ์ ์ง์ฐ ์๊ฐ, ์ฆ latency๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ฑ๋ฅ ํฅ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ธฐ์กด์ Edit log tailing ๋ฐฉ์์ HTTP ๊ธฐ๋ฐ ํต์ ์ ์ฌ์ฉํ์๊ณ , Edit log๊ฐ ๋์คํฌ์ flush๋ ์ดํ์์ผ Observer๊ฐ ๋ก๊ทธ๋ฅผ tailingํ ์ ์์์ต๋๋ค. ์ด ๋ฐฉ์์ ํต์ ์๋์ ๋์คํฌ I/O ์์กด์ฑ ์ธก๋ฉด์์ latency๊ฐ ํด ์๋ฐ์ ์์์ต๋๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์๋กญ๊ฒ ๋์ ๋ Edit Tailing Fast-Path ๋ฐฉ์์ latency๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ ๊ฐ์ง ํต์ฌ ๋ณ๊ฒฝ์ ์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ฒซ์งธ, ๊ธฐ์กด์ HTTP ํต์ ๋์ RPC ๊ธฐ๋ฐ ํต์ ์ ์ฌ์ฉํ์ฌ ๋์ฑ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๋ก๊ทธ ์ ๋ฌ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. RPC๋ ๋ฌด๊ฑฐ์ด ๊ธฐ๋ฅ ์์ด ๊ฐ๋จํ๊ฒ ํต์ ํ ์ ์๊ณ , ๊ฐ๋ฐ์๊ฐ ์ด๋ป๊ฒ ํต์ ํ ์ง ์ง์ ์ ํ ์ ์์ด์, ๋ถํ์ํ ์ง์ฐ์ด ์ค์ด๋ค๊ณ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค. ๋์งธ, JournalNode์ in-memory cache๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๋์คํฌ์ ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ edit log ํญ๋ชฉ์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ก ์ธํด Observer NameNode๋ ๊ฑฐ์ ์ค์๊ฐ์ ๊ฐ๊น์ด ๋ก๊ทธ ๋ฐ์์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Edit Tailing Fast-Path๋ Observer NameNode์ latency๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ฉฐ, ๋ฉํ๋ฐ์ดํฐ ๋ฐ์ ์๋๋ฅผ ๋์ฌ ์ ์ฒด HDFS ์์คํ ์ ์ฑ๋ฅ๊ณผ ์ ๋ขฐ์ฑ์ ํฅ์์ํค๋ ๋ฐ ํฌ๊ฒ ๊ธฐ์ฌํ๊ฒ ๋์์ต๋๋ค. โ Client-side Proxy Provider ObserverReadProxyProvider ๋ผ๋ ํด๋์ค๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ฌ์ฉ๋๋ ์๋ก์ด ํด๋ผ์ด์ธํธ ์ธก ํ๋ก์ ์ ๊ณต์์ ๋๋ค. ์ด ํด๋์ค๋ ๊ธฐ์กด์ ConfiguredFailoverProxyProvider ๋ฅผ ์์๋ฐ์ ๋ง๋ค์ด์ก์ต๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ active namenode๋ฟ๋ง ์๋๋ผ observer namenode์์๋ ์ฝ์ ์ ์๊ฒ ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฝ๊ธฐ ์์ฒญ์ ๋ณด๋ด๋ฉด, ObserverReadProxyProvider๋ ๋จผ์ ํด๋ฌ์คํฐ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ observer namenode๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค ์๋ํฉ๋๋ค. ๋ง์ฝ ๋ชจ๋ observer namenode์์ ์ฝ๊ธฐ์ ์คํจํ ๊ฒฝ์ฐ, ๊ทธ๋์์ผ active namenode๋ก ์์ฒญ์ ๋ณด๋ ๋๋ค. Read-Write ์ ์ผ๊ด์ฑ ์ ์ง ๋ฐฉ๋ฒ ( ์ฌ๋ฌ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ - Maintaining Client Consistency) ์์์ ์ค๋ช ํ โread your own writesโ ๊ฐ๋ ์ ๋ฐ๋ผ, ํด๋ผ์ด์ธํธ โAโ๊ฐ active NameNode์ a.txt ํ์ผ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, โAโ๊ฐ observer NameNode์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ผ๊ณ ์์ฒญํ๋ฉด, observer๋ a.txt ํ์ผ์ด ์์ ํ ์์ฑ๋์๋์ง ํ์ธํ ํ์ ์๋ตํฉ๋๋ค. ์ฆ, โAโ๋ ์์ ์ด ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ ์ ์์ต๋๋ค. ํ์ง๋ง โAโ๊ฐ ํ์ผ์ ์์ฑํ ๋ค, ์ด ์ฌ์ค์ HDFS์ ๋ฌด๊ดํ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ โBโ์๊ฒ ์๋ ค์ฃผ์๋ค๊ณ ํด๋ด ์๋ค. ์ดํ โBโ๊ฐ HDFS์์ a.txt๋ฅผ ์ฝ์ผ๋ ค๊ณ ์๋ํ ๊ฒฝ์ฐ, ํด๋น ํ์ผ์ ์ฝ์ ์ ์๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. ์ด์ ๋ โBโ๊ฐ observer NameNode๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค ํ ๋, ํด๋น observer๊ฐ ์์ง ์ต์ ๋ฉํ๋ฐ์ดํฐ๋ก ๋๊ธฐํ๋์ง ์์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ , ์ฆ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ผ๊ด์ฑ ๊ฒฐ์ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด msync()๋ผ๋ ๊ธฐ๋ฅ์ด ๋์ ๋์์ต๋๋ค. msync()๋ฅผ ํธ์ถํ๋ฉด ํด๋ผ์ด์ธํธ๋ active NameNode์ ์ต์ ์ํ ID(state ID)๋ฅผ ๋๊ธฐํํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ์ดํ ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ํด๋น ์์ ๊น์ง์ ๋ฉํ๋ฐ์ดํฐ์ ์ผ์นํ๊ฒ ๋ฉ๋๋ค. ์ฆ, โBโ๊ฐ msync()๋ฅผ ๋จผ์ ํธ์ถํ ํ a.txt๋ฅผ ์กฐํํ๋ฉด, ํ์ผ์ ์ ์์ ์ผ๋ก ์ฝ์ ์ ์๊ฒ ๋ฉ๋๋ค. msync()๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ฐ๋ก ์์ ํ ํ์๋ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ observer NameNode์์ ์ฝ๊ธฐ๋ฅผ ์ํํ๊ธฐ ์ ์ ์๋์ผ๋ก msync()๋ฅผ ํธ์ถํ์ฌ ์ด๊ธฐํ ์ ์ ๋ฐ์ํ ์ฐ๊ธฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํฉ๋๋ค. ๋ํ ObserverReadProxyProvider๋ ์๋ msync() ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค. ์ด ๋ชจ๋๋ฅผ ์ค์ ํ๋ฉด ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ์๋์ผ๋ก msync()๋ฅผ ์ํํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ผ์ ์๊ฐ ์ด์ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋จ, ์ด ๊ธฐ๋ฅ์ msync() ํธ์ถ๋ง๋ค active NameNode์ RPC๋ฅผ ์ํํ๋ฏ๋ก ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ์ค์ ์ผ๋ก๋ ๋นํ์ฑํ๋์ด ์์ต๋๋ค. ์ค์ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค. -- hdfs-site.xml <property> <name>dfs.client.observer.auto-msync.enabled</name> <value>true</value> </property> <property> <name>dfs.client.observer.auto-msync.interval.ms</name> <value>5000</value> <!-- 5์ด๋ง๋ค `msync()` ์ํ --> </property> ์ด ๋ด์ฉ์ ์ข ๋ ์ง๊ด์ ์ด๊ณ , ์์๋๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค. A ํด๋ผ์ด์ธํธ(foo)๊ฐ a.txt ํ์ผ ์์ฑ A๋ active NameNode์ a.txt ํ์ผ์ ์์ฑํ๋ write ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด write๋ active NameNode์์ ์ฒ๋ฆฌ๋๊ณ , ์ดํ observer NameNode๋ก ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋น๋๊ธฐ ์ ํ๋ฉ๋๋ค. B ํด๋ผ์ด์ธํธ(bar)๊ฐ observer NameNode์ read ์์ฒญ B๋ a.txt ํ์ผ์ ์ฝ๊ธฐ ์ํด observer NameNode์ read ์์ฒญ์ ๋ณด๋ ๋๋ค. ํ์ง๋ง ์ด ์์ ์ observer NameNode๊ฐ ์์ง ์ต์ ๋ฉํ๋ฐ์ดํฐ(a.txt ์์ฑ ์ ๋ณด)๋ฅผ ๋ฐ์ง ๋ชปํ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. B๊ฐ a.txt๋ฅผ ์ฝ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ฐ์ observer๊ฐ ์์ง ๋๊ธฐํ๋์ง ์์๋ค๋ฉด, B๋ a.txt ํ์ผ์ ์ฐพ์ ์ ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋๋ค๋ ์๋ต์ ๋ฐ์ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ๊ฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฐ์ ๊ฐ์ ์์ ์ A๋ ํ์ผ์ ๋ณผ ์ ์๋๋ฐ, B๋ ๋ณผ ์ ์๋ read-your-own-writes ๋ถ์ผ์น ์ํฉ์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ msync() ํธ์ถ B๊ฐ msync()๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๊ฑฐ๋ ์๋ msync() ๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์๋ค๋ฉด, B๋ active NameNode์ ์ต์ ์ํ ID๋ฅผ ๋๊ธฐํํฉ๋๋ค. B๊ฐ observer์ ๋ค์ read ์์ฒญ ์ด์ observer๋ active NameNode์์ ์ ํ๋ ์ต์ ๋ฉํ๋ฐ์ดํฐ ์ํ๋ฅผ ๋ฐ์ํ๊ฒ ๋์ด, B๋ ์ ์์ ์ผ๋ก a.txt๋ฅผ ์ฝ์ ์ ์์ต๋๋ค. msync() ๊ฐ ๋์ํ๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ msync() ํธ์ถ โ active NameNode์ ์ต์ state ID ์์ฒญ โ active NameNode๊ฐ ์ต์ state ID ์๋ต โ ํด๋ผ์ด์ธํธ๋ ํด๋น state ID ๊ธฐ์ค์ผ๋ก observer NameNode์ ๋๊ธฐํ ์ฌ๋ถ ํ์ธ โ observer๊ฐ ์ต์ ์ด๋ฉด observer์์ read, ์๋๋ฉด active๋ก read ์ฐํ์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. โ ๐ 3. Eraser Coding ๐ 3.1. Software Data Fault Tolerance Hadoop์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ์ ๋ด๊ฒฐํจ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ๋์ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ํด 3๊ฐ์ ๋ณต์ ๋ณธ(replica)์ ์์ฑํ์ฌ ์ ์ฅํฉ๋๋ค. ์ด ๋ณต์ ๋ณธ๋ค์ ์๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ์์น์ ์ ์ฅ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก๋ ์๋ก ๋ค๋ฅธ ๋จธ์ , ๋ค๋ฅธ ๋(Rack), ์ฌ์ง์ด๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถ์ฐ์์ผ ์ ์ฅํฉ๋๋ค. ์ด์ ๊ฐ์ ๋ฐฉ์์ ํน์ ํ๋์จ์ด์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋๋ก ๋ณดํธํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ณต์ ๋ณธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๋ณดํธ ๋ฐฉ์์ ๋งค์ฐ ๊ฐ๋ ฅํ ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ์ฒซ์งธ, ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์๊ฐ๊ณผ ๋ฆฌ์์ค๊ฐ ๋ ๋ง์ด ์๋ชจ๋ฉ๋๋ค. ํนํ Write ์์ ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋์งธ, 3๊ฐ์ ๋ณต์ ๋ณธ์ ์ ์งํ๊ธฐ ์ํด ์ค์ ๋ฐ์ดํฐ ํฌ๊ธฐ์ 3๋ฐฐ ์ด์์ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋๋ฏ๋ก, ์ ์ฅ ๋น์ฉ์ด ์๋นํ ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์ ์ค ํ๋๋ก Hadoop 3์์๋ Erasure Coding(์ญ์ ์ฝ๋) ๊ธฐ๋ฒ์ ๋์ ํ์ฌ ์คํ ๋ฆฌ์ง ํจ์จ์ฑ๊ณผ ๋ด๊ฒฐํจ์ฑ์ ๋์์ ํ๋ณดํ๊ณ ์ ํ์์ต๋๋ค. (โป Erasure Coding์ ๋ํด์๋ ์๋์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.) ๐ 3.2. Hardware Data Fault Tolerance & RAID Hadoop ํด๋ฌ์คํฐ๋ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์ํํธ์จ์ด์ ์ผ๋ก ๋ณต์ ๋ณธ์ ํตํด ๋ฐ์ดํฐ ์ ์ค์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํ์ง๋ง, ์์คํ ์ ์ฒด์ ๋ด๊ฒฐํจ์ฑ ์์ค์ ๋ ๋์ด๊ธฐ ์ํด ํ๋์จ์ด ์ฐจ์์์์ ๋ณด์ ๋ฐฉ๋ฒ์ ํจ๊ป ์ ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๋ํ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ RAID(Redundant Array of Independent Disks) ๊ตฌ์ฑ์ ํตํด ํ๋์จ์ด ์์ฒด์์ ์ฅ์ ์ ๋์ํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด RAID-5๋ RAID-6 ๊ฐ์ ๋ฐฉ์์ ๋์คํฌ ์ผ๋ถ์ ํจ๋ฆฌํฐ(Parity) ์ ๋ณด๋ฅผ ์ ์ฅํจ์ผ๋ก์จ, ํน์ ๋์คํฌ๊ฐ ๊ณ ์ฅ๋๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์๋๋ก ํฉ๋๋ค. ํ๋์จ์ด ๊ธฐ๋ฐ์ Fault Tolerance๋ ์ํํธ์จ์ด๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ ๋ณดํธ ์์ค์ ํฅ์์ํฌ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ RAID ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ฉฐ, ๋ฐ์ดํฐ ์ ์ฅ ๋๋ ๋ณต๊ตฌ ์ ๋ ๋ง์ ์์คํ ์์์ด ์๋ชจ๋๋ฏ๋ก ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด, ๋ณธ๊ฒฉ์ ์ธ Hadoop ์ Eraser Coding ์ ์์๋ณด๊ธฐ ์ ์, RAID ์ ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ๋๋ง ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค. โ RAID ๋? RAID๋ Redundant Array of Inexpensive Disks์ ์ฝ์๋ก, ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ํ๋ ๋์คํฌ๋ฅผ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์ฅ์น๋ก ๋ฌถ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ง๋ก๋ ๋ณดํต ์ค๋ณต ๋ฐฐ์ด ๋์คํฌ ๋๋ ๋ณต์ ์ ๊ฐํ ๋์คํฌ ๋ฐฐ์ด์ด๋ผ๊ณ ๋ฒ์ญ๋ฉ๋๋ค. ์ฆ, 1๊ฐ์ Disk ๋ฅผ ๊ฐ์ํ๋ก ๊ฐ ๋ ๋ฆฝ์ ์ธ ๋ฐฐ์ด Drive ๋ก ๋๋๋ ๊ฒ์ RAID ๋ผ๊ณ ํฉ๋๋ค. ( ex - 1๊ฐ์ Disk ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, C ๋๋ผ์ด๋ธ์ D ๋๋ผ์ด๋ธ๋ก ๋๋๋ ๊ฒ. ) ํ์ฌ by ํ์ฌ๊ฒ ์ง๋ง, ๋ณดํต ํ์ ์์๋ 1 Disk ๋น, 1 Drive ๋ก Mapping ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. RAID๋ ๋์คํฌ๋ฅผ ๋ฐฐ์ด๋ก ๊ฐ์ํํ์ฌ ๊ตฌ์ฑํจ์ผ๋ก์จ, ์ฑ๋ฅ(Performance), ์ฉ๋(Capacity), ์ ๋ขฐ์ฑ(Reliability) ์ธก๋ฉด์์ ์์คํ ์ ํฅ์์ํค๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฝ๊ณ ์ธ ์ ์์ด I/O ์ฑ๋ฅ์ด ํฅ์๋๋ฉฐ, ์ผ๋ถ ๋์คํฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋๋จธ์ง ๋์คํฌ์ ์ ๋ณด๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์๋ ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํฉ๋๋ค. RAID ๊ตฌํ ๋ฐฉ์์ ํฌ๊ฒ ํ๋์จ์ด RAID์ ์ํํธ์จ์ด RAID๋ก ๋๋ฉ๋๋ค. ํ๋์จ์ด RAID๋ ์ ์ฉ RAID ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ RAID ๊ตฌ์ฑ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ฐฉ์์ ์ด์์ฒด์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉฐ, ์์คํ ์์ ์๋ชจ๊ฐ ์ ๊ณ ์์ ์ฑ ๋ฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋ค๋ง, ์ ์ฉ ์ฅ๋น๊ฐ ํ์ํ๋ฏ๋ก ๊ตฌ์ถ ๋น์ฉ์ด ๋๊ณ , ์ปจํธ๋กค๋ฌ ๊ณ ์ฅ ์ ์ ์ฒด ์์คํ ์ด ์ํฅ์ ๋ฐ์ ์ ์๋ ๋จ์ ๋ ์กด์ฌํฉ๋๋ค. ์ํํธ์จ์ด RAID๋ RAID ๊ธฐ๋ฅ์ ์ด์์ฒด์ ๊ฐ ์ง์ ๊ตฌํํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค. ๋ณ๋์ ํ๋์จ์ด๊ฐ ํ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ์ ๋ ดํ๊ณ ์ค์ ์ด ์ ์ฐํ์ง๋ง, CPU์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ ์์คํ ์์์ ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ฉฐ, ์ฑ๋ฅ ๋ฉด์์๋ ํ๋์จ์ด RAID์ ๋นํด ๋ค์ ๋ฎ์ ์ ์์ต๋๋ค. RAID๋ ๊ตฌ์ฑ ๋ฐฉ์์ ๋ฐ๋ผ RAID 0, RAID 1, RAID 5, RAID 6, RAID 10 ๋ฑ ์ฌ๋ฌ ๋ ๋ฒจ๋ก ๋๋๋ฉฐ, ๊ฐ ๋ฐฉ์์ ๋ฐ์ดํฐ ๋ณดํธ ์์ค, ์ฐ๊ธฐ/์ฝ๊ธฐ ์ฑ๋ฅ, ๋์คํฌ ์ฌ์ฉ ํจ์จ์ฑ์ ๋ฐ๋ผ ์ ํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ 0, 1, 5, 6, 10 ๋ฑ์ผ๋ก ๋๋๋ ๊ฒ์ ํ๋์จ์ด RAID๋ ์ํํธ์จ์ด RAID๋ ๋ ๋ค์์ ๊ตฌํํ ์ ์๋ ๊ตฌ์ฑ ๋ฐฉ์์ ๋๋ค. ์๋๋ RAID ์ ์ข ๋ฅ ๋ช ๊ฐ์ง๋ฅผ ์ ๋ฆฌํ์์ต๋๋ค. ( Hadoop ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์, RAID ๋ด์ฉ์ ๊ฐ๋จํ๊ฒ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ง ์ ๋ฆฌํ์์ต๋๋ค. ) โ RAID 0 ์ถ์ฒ : RAID 0 Image RAID 0์ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ๋ถํ (striping)ํ์ฌ ์ฌ๋ฌ ๋๋ผ์ด๋ธ์ ๋ถ์ฐ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๊ตฌ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋๋์ด ๊ฐ ๋์คํฌ์ ๋ฐฐ์ด์ฒ๋ผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ๋๋ผ์ด๋ธ ์๋งํผ ๋์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, I/O ์ฑ๋ฅ์ด ๋งค์ฐ ์ฐ์ํ๋ฉฐ ์ ์ฅ ๊ณต๊ฐ์ ์์ค๋ ์์ด ์ ์ฒด ๋์คํฌ ์ฉ๋์ ๋ชจ๋ ํ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ํจ๋ฆฌํฐ ๊ณ์ฐ์ด๋ ์ค๋ณต ์ ์ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ์ ํ ๋ฐ์ํ์ง ์๋๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง RAID 0์ ๋ฐ์ดํฐ ์ค๋ณต(redundancy)์ด ์ ํ ์๋ ๊ตฌ์กฐ์ ๋๋ค. ์ฆ, ํ๋์ ๋์คํฌ๋ผ๋ ๊ณ ์ฅ์ด ๋๋ฉด ํด๋น ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ ์ฒด ํ์ผ์ด ์์๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค. ์ด๋ก ์ธํด RAID 0์ ์ ๋ขฐ์ฑ๋ณด๋ค๋ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ง ์ ํฉํฉ๋๋ค. ๋ฐ๋ผ์ RAID 0์ ๋ฐ์ดํฐ ๋ณด์กด์ด ์ค์ํ์ง ์์ ์์ ์์ ๊ณต๊ฐ์ด๋ ๊ณ ์ ์บ์, ๋น์ค์ ํ ์คํธ ํ๊ฒฝ ๋ฑ์ ํ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ ๋ณด๊ด์ด๋ ๋ณต๊ตฌ๊ฐ ํ์ํ ํ๊ฒฝ์์๋ ์ ๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค. โ RAID 1 ์ถ์ฒ : RAID 1 Image RAID 1์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ต์ ๋ ๊ฐ์ ๋๋ผ์ด๋ธ์ ๋์ผํ๊ฒ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๊ตฌ์กฐ๋ ํ๋์ ๋๋ผ์ด๋ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋, ๋ค๋ฅธ ๋๋ผ์ด๋ธ์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ ์ค ์์ด ์์ ์ ์ธ ์ด์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ์ฅ์ ํ์ฉ(fault tolerance) ๋ฅ๋ ฅ์ด RAID 0๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ฉ๋๋ค. ๋ํ, RAID 1์ ์ฝ๊ธฐ(Read) ์ฑ๋ฅ์ด ์ฐ์ํ ํธ์ ๋๋ค. ๋ฐ์ดํฐ๋ ๋ ๊ฐ์ ๋์คํฌ ์ค ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ ์ชฝ์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์, ๋ณ๋ ฌ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ฌ ์๋ต ์๋๊ฐ ํฅ์๋ฉ๋๋ค. ๋ฐ๋ฉด, ์ฐ๊ธฐ(Write) ์ฑ๋ฅ์ RAID 0์ ๋นํด ๋๋ฆด ์ ์์ต๋๋ค. ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋๋ผ์ด๋ธ์ ์ค๋ณต ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ RAID 1์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ ๊ฐ์ ๋๋ผ์ด๋ธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ์ค์ ๋ก ์ฌ์ฉํ ์ ์๋ ์ฉ๋์ ์ ๋ฐ ์์ค์ธ 50%์ ๋๋ค. ์๋ฅผ ๋ค์ด, 1TB ๋์คํฌ 2๊ฐ๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ค์ง์ ์ผ๋ก๋ 1TB์ ๊ณต๊ฐ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ RAID 1์ ๋ฐ์ดํฐ ์์ ์ฑ์ด ์ค์ํ ์์คํ ์ ์ ํฉํ๋ฉฐ, ์๋๋ณด๋ค ๊ฐ์ฉ์ฑ๊ณผ ๋ณต๊ตฌ ๊ฐ๋ฅ์ฑ์ ์ฐ์ ์ํ๋ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ๐ก RAID 5, 6๋ฅผ ๋ฐฐ์ฐ๊ธฐ์ ์, Parity ์ ๋ํ์ฌ RAID 5์ RAID 6์ ๋จ์ ๋ณต์ (RAID 1)๋ ๋ถ์ฐ ์ ์ฅ(RAID 0)๊ณผ ๋ฌ๋ฆฌ, โํจ๋ฆฌํฐ(Parity)โ๋ผ๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ํจ๋ฆฌํฐ๊ฐ RAID์ ํต์ฌ์ ์ธ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ด๊ธฐ ๋๋ฌธ์, ๋จผ์ Parity๊ฐ ๋ฌด์์ธ์ง ์ดํดํ์ง ๋ชปํ๋ฉด RAID 5/6์ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค. Parity(ํจ๋ฆฌํฐ)๋ ์ปดํจํฐ ๊ณผํ์์ ๋ฐ์ดํฐ์ ์ค๋ฅ ๊ฒ์ถ์ ์ํด ์ฌ์ฉํ๋ ๋นํธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ 7๋นํธ์ ์๋ ๋ฐ์ดํฐ์ 1๋นํธ์ Parity Bit๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ก ๋์ค ๋ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๊ฒ ํฉ๋๋ค. Parity๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์์ต๋๋ค: Even Parity (์ง์ ํจ๋ฆฌํฐ): ์ ์ฒด ๋นํธ ์ค 1์ ๊ฐ์๊ฐ ์ง์๊ฐ ๋๋๋ก Parity Bit๋ฅผ ์ค์ Odd Parity (ํ์ ํจ๋ฆฌํฐ): ์ ์ฒด ๋นํธ ์ค 1์ ๊ฐ์๊ฐ ํ์๊ฐ ๋๋๋ก Parity Bit๋ฅผ ์ค์ ๐ก Parity ์์: 7๋นํธ ๋ฐ์ดํฐ โ 8๋นํธ ํจ๋ฆฌํฐ ์ฒ๋ฆฌ 7 bits of data 1-bit count 8 bits (Even Parity) 8 bits (Odd Parity) 0000000 0 00000000 00000001 1010001 3 10100011 10100010 1101001 4 11010010 11010011 1111111 7 11111111 11111110 ํจ๋ฆฌํฐ ๋นํธ๋ ๋จ์ํ ์ค๋ฅ ๊ฐ์ง๋ฟ๋ง ์๋๋ผ, RAID ์์คํ ์์๋ ์ฅ์ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ํต์ฌ ์์๋ก ๋ฐ์ ํ์ต๋๋ค. ๐ก Parity ๋ธ๋ก์ ํน์ง ์ฃผ๋ก XOR ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉฐ, ๋ณต์์ ๋ฐ์ดํฐ ๋ธ๋ก๋ค์ XOR ์ฐ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ํจ๋ฆฌํฐ ๋ธ๋ก์ ์ ์ฅํฉ๋๋ค. ๋์คํฌ ํ๋๊ฐ ๊ณ ์ฅ๋๋ฉด, ๋๋จธ์ง ๋ฐ์ดํฐ + ํจ๋ฆฌํฐ๋ก ์ ์ค๋ ๋ธ๋ก์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ๐ก XOR(๋ฐฐํ์ ๋ ผ๋ฆฌํฉ, Exclusive OR) ์ฐ์ฐ : ๋ ๊ฐ์ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅผ ๋ 1, ๊ฐ์ ๋๋ 0์ ๋ฐํํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ๋๋ค. ๐ก 0 โ 0 = 0 ๊ทธ๋ฆฌ๊ณ , 1 โ 1 = 0 ๊ทธ๋ฆฌ๊ณ , 0 โ 1 = 1 ๊ทธ๋ฆฌ๊ณ , 1 โ 0 = 1 ๊ฐ ์์ต๋๋ค. ๐ก Parity ์์ : 5๊ฐ์ ๋์คํฌ ์ค 1๊ฐ๊ฐ ์ฅ์ ๋ฐ์ํ ๊ฒฝ์ฐ โญ ์ ์ ์ํ ์์: DISK 1 DISK 2 DISK 3 DISK 4 DISK 5 (Parity) 0 0 0 0 0 = 0โ0โ0โ0 0 1 0 1 0 = 0โ1โ0โ1 0 1 1 0 0 = 0โ1โ1โ0 1 0 0 1 0 = 1โ0โ0โ1 1 0 0 0 1 = 1โ0โ0โ0 โ DISK 3 ์ฅ์ ๋ฐ์ ์: DISK 1 DISK 2 DISK 3 (โ) DISK 4 DISK 5 (Parity) 0 0 โ 0 0 0 1 โ 1 0 0 1 โ 0 0 1 0 โ 1 0 1 0 โ 0 1 ๐ Parity ๋ณต๊ตฌ ๋ฐฉ์ ํจ๋ฆฌํฐ๋ XOR ์ฐ์ฐ์ด๊ธฐ ๋๋ฌธ์, ์ ์ค๋ ๋ธ๋ก์ ์ ์ธํ ๋ชจ๋ ๋ธ๋ก๊ณผ ํจ๋ฆฌํฐ๋ฅผ XOR ํ๋ฉด ์ ์ค๋ ๋ธ๋ก ๊ฐ์ ์ญ์ฐํ ์ ์์ต๋๋ค. โ RAID 5 ๊ทธ๋ผ ๋ค์ RAID ๋ก ๋์์์, ์ด๋ฒ์๋ RAID 5์ ๋๋ค. ์ถ์ฒ : RAID 5 Image RAID 5๋ ์ต์ 3๊ฐ ์ด์์ ๋๋ผ์ด๋ธ๋ก ๊ตฌ์ฑํด์ผ ํ๋ ์คํ ๋ฆฌ์ง ๋ฐฉ์์ ๋๋ค. ํ๋์ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ฌ๋ฌ ๋๋ผ์ด๋ธ์ ๋๋์ด ์ ์ฅํ๋ฉฐ, ๊ฐ๋ณ ๋ธ๋ก์ ํต์งธ๋ก ๋ณต์ ํ์ง๋ ์์ต๋๋ค. ๋์ , ํจ๋ฆฌํฐ(parity) ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํน๋ณํ ๋ธ๋ก์ ์ถ๊ฐ๋ก ์์ฑํ์ฌ ๋ค๋ฅธ ๋๋ผ์ด๋ธ์ ๋ถ์ฐ ์ ์ฅํฉ๋๋ค. ๋ง์ฝ ํ๋์ ๋๋ผ์ด๋ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ๋๋ผ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ค๋ฅธ ๋๋ผ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ์ ํจ๋ฆฌํฐ ๋ธ๋ก์ ์ด์ฉํด ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋จ์ผ ๋๋ผ์ด๋ธ ์ฅ์ ์์๋ ์ ๋ก ๋ค์ดํ์(Zero downtime)์ด ๋ณด์ฅ๋๋ฉฐ, ์ฝ๊ธฐ ์ฑ๋ฅ๋ ๋น ๋ฅธ ํธ์ ๋๋ค. RAID 5๋ ์ ์ฒด ๋์คํฌ ์ฉ๋ ์ค ์ฝ 33% (3๊ฐ ๋๋ผ์ด๋ธ ๊ธฐ์ค)๋ฅผ ํจ๋ฆฌํฐ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉํ๋ฏ๋ก, ๋ฐ์ดํฐ ๋ณดํธ๋ฅผ ์ ์งํ๋ฉด์๋ RAID 1๊ณผ ๋น๊ตํด ๋ ๋์ ์ ์ฅ ํจ์จ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 3๊ฐ์ 1TB ๋๋ผ์ด๋ธ๋ก RAID 5๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ด 3TB์ ์ฉ๋์ด ํ์ํ์ง๋ง, ์ค์ ์ ์ฅ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฉ๋์ 2TB์ ๋๋ค. ์ด๋ ํ๋์ ๋์คํฌ ๋ถ๋์ด ํจ๋ฆฌํฐ ์ ์ฅ์ฉ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง์ฝ 1TB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด, ์ต์ 1.5TB ์ด์์ ์ด ๋์คํฌ ์ฉ๋์ด ํ์ํ๋ค๋ ๋ป์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ 4๊ฐ์ ๋๋ผ์ด๋ธ๋ก ๊ตฌ์ฑํด ์ฝ 25%์ ์ฉ๋ ์์ค๋ก ์ด์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด, 4๊ฐ์ 1TB ๋๋ผ์ด๋ธ๋ฅผ RAID 5๋ก ๊ตฌ์ฑํ๋ฉด ์ด 4TB ์ฉ๋ ์ค 3TB๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ง๋ค ํจ๋ฆฌํฐ๋ฅผ ๊ณ์ฐํด์ผ ํ๋ฏ๋ก ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋ค์ ๋๋ ค์ง๋๋ค. ๋ํ ๋ ๊ฐ ์ด์์ ๋๋ผ์ด๋ธ๊ฐ ๋์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. RAID 5๋ ์ต๋ 16๊ฐ ๋๋ผ์ด๋ธ๊น์ง ํ์ฅํ ์ ์์ผ๋ฉฐ, ๋์คํฌ ์๊ฐ ์ ํ๋ ํ์ผ ์๋ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ ํฉํ ๊ตฌ์ฑ ๋ฐฉ์์ ๋๋ค. ํ๋ ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. 4๊ฐ์ ๋์คํฌ๊ฐ ์๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ๊ฐ ๋์คํฌ์๋ ๋ฐ์ดํฐ ์กฐ๊ฐ๊ณผ ํจ๊ป ํจ๋ฆฌํฐ๋ผ๋ ํน๋ณํ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์์ต๋๋ค. ํจ๋ฆฌํฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐ ํ์ํ โ์ฒดํฌํฌ์ธํธโ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์คํฌ 1์๋ ์ซ์ 5, ๋์คํฌ 2์๋ ์ซ์ 7, ๋์คํฌ 3์๋ ์ซ์ 3์ด ์ ์ฅ๋์ด ์๋ค๊ณ ํฉ์๋ค. ๋์คํฌ 4์๋ ์ด ์ซ์๋ค์ XOR ์ฐ์ฐํ ๊ฒฐ๊ณผ์ธ ํจ๋ฆฌํฐ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค. ๋ง์ฝ ๋์คํฌ 2๊ฐ ๊ณ ์ฅ ๋์ ์ซ์ 7์ ์์ด๋ฒ๋ ธ๋ค๋ฉด, ๋๋จธ์ง ์ซ์๋ค๊ณผ ํจ๋ฆฌํฐ ๊ฐ์ ์ด์ฉํด ์์ด๋ฒ๋ฆฐ ์ซ์ 7์ ๋ค์ ๊ณ์ฐํด ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ RAID 5๋ ํ๋์ ๋์คํฌ๊ฐ ๊ณ ์ฅ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ง ์๊ณ ๋ณต๊ตฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ ๋๋ค. โ RAID 6 ์ถ์ฒ : RAID 6 Image RAID 6๋ RAID 5์ ๋งค์ฐ ์ ์ฌํ ๋ฐฉ์์ด์ง๋ง, ํจ๋ฆฌํฐ(parity) ๋ธ๋ก์ด ๋ ๊ฐ์ ๋๋ผ์ด๋ธ์ ๋๋์ด ์ ์ฅ๋๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋๋ค. ๋ํ, RAID 5์์ ์ฌ์ฉ๋๋ XOR ์ฐ์ฐ ๋์ ์ Reed-Solomon ๋ถํธ๋ผ๋ ๋ ๋ณต์กํ ๋ฐฉ์์ผ๋ก ํจ๋ฆฌํฐ๋ฅผ ์์ฑํฉ๋๋ค. RAID 6๋ ์ต์ 4๊ฐ์ ๋๋ผ์ด๋ธ๋ก ๊ตฌ์ฑํด์ผ ํ๋ฉฐ, ๋์์ ๋ ๊ฐ์ ๋๋ผ์ด๋ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์๋ค๋ ๊ฐ๋ ฅํ ๋ด๊ฒฐํจ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฝ๊ธฐ ์ฑ๋ฅ์ RAID 5์ ๋น์ทํ์ง๋ง, ํจ๋ฆฌํฐ ๋ธ๋ก์ด ํ๋ ๋ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ฐ๊ธฐ ์ฑ๋ฅ์ RAID 5๋ณด๋ค ๋๋ฆฐ ํธ์ ๋๋ค. ์ด๋ฌํ ํน์ง ๋๋ฌธ์ RAID 6๋ ์ฝ๊ธฐ ์์ฃผ์ ํธ๋์ญ์ ์ด ๋ง์ ์น ์๋ฒ์ ์ ํฉํ๋ฉฐ, ์ฐ๊ธฐ ์์ ์ด ๋น๋ฒํ ๋ฌด๊ฑฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ํฉํ์ง ์์ต๋๋ค. ๐ก Reed-Solomon ๋ถํธ๋? ๋ด๋ถ ๊ตฌํ์ ์์ง ์ ํํ ๊ณต๋ถํ์ง ์์์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์์๋๊ฑฐ๋ ์ผ๋ถ๊ฐ ์ฌ๋ผ์ ธ๋, ์ด ์ฝ๋๋ฅผ ํตํด ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์๊ฒ ํด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํ๋ ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. 4๊ฐ์ ๋์คํฌ๋ก RAID 6๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ด๋, ๋ฐ์ดํฐ ๋ธ๋ก๋ฟ ์๋๋ผ ๋ ์ข ๋ฅ์ ํจ๋ฆฌํฐ ์ ๋ณด๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ ๋์คํฌ์ ๋๋์ด ์ ์ฅ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์คํฌ 1๊ณผ ๋์คํฌ 2์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๊ณ , ๋์คํฌ 3๊ณผ ๋์คํฌ 4์๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ํจ๋ฆฌํฐ ์ ๋ณด๊ฐ ์ ์ฅ๋ฉ๋๋ค. ๋ง์ฝ ๋์คํฌ 2์ ๋์คํฌ 4๊ฐ ๋์์ ๊ณ ์ฅ ๋๋๋ผ๋, ๋๋จธ์ง ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ ์ข ๋ฅ์ ํจ๋ฆฌํฐ ์ ๋ณด๋ฅผ ์ด์ฉํด ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ RAID 6๋ ํ ๋ฒ์ ๋ ๊ฐ์ ๋์คํฌ ์ฅ์ ๊น์ง ๊ฒฌ๋ ์ ์์ด, ๋ ๋์ ์์ ์ฑ์ด ํ์ํ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. โ RAID 10 ์ถ์ฒ : RAID 10 Image RAID 10์ RAID 0๊ณผ RAID 1์ ์ฅ์ ์ ๊ฒฐํฉํ ์์คํ ์ ๋๋ค. ( ๊ทธ๋์ RAID 10 ์ด ์๋๋ผ, RAID 1 + 0 ์ด๋ผ๊ณ ๋ณด๋๊ฒ ๋ง์ต๋๋ค :D ) ๋ชจ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ํด ๋ณต์ ๋ณธ์ ๋ค๋ฅธ ๋๋ผ์ด๋ธ์ ์ ์งํ๋ฉด์, ์ ์ฒด ๋ฐ์ดํฐ ๋ธ๋ก์ ์๋ก ๋ ๊ฐ ์ด์์ ๋๋ผ์ด๋ธ์ ๋๋์ด ๋ถ๋ฐฐํ๋ ๋ฐฉ์์ ๋๋ค. ์ต์ 4๊ฐ์ ๋๋ผ์ด๋ธ๊ฐ ํ์ํฉ๋๋ค. RAID 10์ RAID 0 ์์ค์ ๋น ๋ฅธ ์๋์ RAID 1 ์์ค์ ๋์ ๋ด๊ฒฐํจ์ฑ์ ๋์์ ๋ณด์ฅํฉ๋๋ค. ํ๋์ ๋๋ผ์ด๋ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ณต์ ๋ณธ์ด ์ ์ง๋ ๋ค๋ฅธ ๋๋ผ์ด๋ธ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ๋ค๋ง, ์ฉ๋ ์ธก๋ฉด์์๋ RAID 1๊ณผ ๋์ผํ๊ฒ 50%๋ง ํ์ฉํ ์ ์์ด, RAID 5๋ RAID 6์ ๋นํด ์ ์ฅ ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๋น์ฉ์ด ๋ ๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. โ RAID ํน์ง๋ค์ ๊ฐ๋จํ ํ๋ก ์ ๋ฆฌ ํน์ง RAID 0 RAID 1 RAID 5 RAID 6 RAID 10 ์ต์ ๋๋ผ์ด๋ธ ์ 2 2 3 4 4 ๋ด๊ฒฐํจ์ฑ ์์ ๋จ์ผ ๋๋ผ์ด๋ธ ์ฅ์ ๊ฐ๋ฅ ๋จ์ผ ๋๋ผ์ด๋ธ ์ฅ์ ๊ฐ๋ฅ ๋ ๊ฐ ๋๋ผ์ด๋ธ ์ฅ์ ๊ฐ๋ฅ ๊ฐ ์๋ธ์ด๋ ์ด๋ณ 1๊ฐ ์ฅ์ ๊ฐ๋ฅ ์ฝ๊ธฐ ์ฑ๋ฅ ๋์ ์ค๊ฐ ๋ฎ์ ๋ฎ์ ๋์ ์ฐ๊ธฐ ์ฑ๋ฅ ๋์ ์ค๊ฐ ๋ฎ์ ๋ฎ์ ์ค๊ฐ ์ฉ๋ ํ์ฉ๋ 100% 50% 67% ~ 94% 50% ~ 88% 50% ์ฃผ์ ์ฌ์ฉ์ฒ ๊ณ ์ฑ๋ฅ ์ํฌ์คํ ์ด์ , ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ด์์ฒด์ , ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค, ์น์๋ฒ, ์์นด์ด๋น ๋ฐ์ดํฐ ๋ฐฑ์ , ๊ณ ๊ฐ์ฉ์ฑ ์๋ฒ ๋น ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ ์๋ฒ, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ๋ด๊ฒฐํจ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ชจ๋ ๊ณ ๋ คํ๋ค๋ฉด RAID 5, RAID 6, RAID 10 ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ๋ค๋ง, RAID 10์ ์ฉ๋ ์์ค์ด ํฌ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์, ํ์ค์ ์ผ๋ก๋ RAID 5๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ ํํ๋ ํธ์ ๋๋ค. ๐ 3.3. Hadoopโs Eraser Coding ์ด์ ํ๋ก์์ Erasure Coding์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ณต๋ถํด๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ Replication์ ์ํ ๋ณต์ ๋ฐ์ดํฐ๋ฅผ 2๊ฐ๊น์ง ๋ณต์ฌํด๋ก๋๋ค. ์ด๋ ์ฅ์ ๋์์ ํจ๊ณผ์ ์ด๋ผ๋ ์ฅ์ ์ด ์์ง๋ง, Disk ํ์ฉ ๋ฉด์์๋ ์ต์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด, ํด๋ฌ์คํฐ ํ๊ฒฝ์ ํตํ์ด 1TB ์ ๋ ๊ณต๊ฐ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, Replication์ ์ํ ๋ณต์ ๋ณธ๊น์ง ๋ด๊ธฐ ์ํด, ์ค์ ๋ฐ์ดํฐ๋ 333.33GB๋ฐ์ ๋ด์ง ๋ชปํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Hadoop V3๋ถํฐ๋ Erasure Coding ๋ฐฉ๋ฒ์ ๊ธฐ์ฉํ์์ต๋๋ค. RAID๋ ํ๋์จ์ด ๋ฐฉ์๊ณผ ์ํํธ์จ์ด ๋ฐฉ์์ผ๋ก ๋๋๋๋ฐ, ํ๋์จ์ด RAID๋ ๋ณ๋์ RAID ์ปจํธ๋กค๋ฌ ์นด๋๋ฅผ ํตํด ๊ตฌํ๋ฉ๋๋ค. ์ด ์ปจํธ๋กค๋ฌ๊ฐ ํจ๋ฆฌํฐ ๊ณ์ฐ์ด๋ ์ฝ๊ธฐยท์ฐ๊ธฐ ์์ ์ ์ ๋ดํ๊ธฐ ๋๋ฌธ์ ์์คํ ์ CPU์ ๋ถ๋ด์ ์ฃผ์ง ์๊ณ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ์ปจํธ๋กค๋ฌ ์นด๋ ์์ฒด๊ฐ ๊ณ ๊ฐ๋ผ๋ ๋จ์ ์ด ์์ต๋๋ค. ๋ฐ๋ฉด ์ํํธ์จ์ด RAID๋ ๊ธฐ์กด ์ปดํจํฐ์ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์ ๋์คํฌ๋ง ์ถ๊ฐํ๋ฉด ๋ณ๋์ ํ๋์จ์ด ์์ด๋ RAID๋ฅผ ๊ตฌํํ ์ ์์ด ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ์์ ์ด CPU ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์์ ๋ค๊ณผ ๋ฆฌ์์ค๋ฅผ ๋๋๊ฒ ๋์ด ์ ๋ฐ์ ์ธ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ์ถ์ฒ : Hadoop Erasure Coding Image 1 ๐ก ์ค์ ๐ก N: ๋ช๊ฐ์ chunk ๋ก ๋๋์ง K: ๋ช๊ฐ์ parity ๋ก ๊ตฌ์ฑํ ์ง RS(N,K) ๋ก ํํํจ. Hadoop์ Erasure Coding์ RAID ๋ฐฉ์์ ์ํํธ์จ์ด๋ก ๊ตฌํํ ๊ธฐ์ ์ ๋๋ค. RAID 5๋ RAID 6์ฒ๋ผ ํจ๋ฆฌํฐ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐฉ์์ด์ง๋ง, ํจ๋ฆฌํฐ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์์ ์ฐจ์ด๋ฅผ ๋ณด์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ , Reed-Solomon๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ํจ๋ฆฌํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋ฐ์ดํฐ ๋ณดํธ ์์ค์ ์ ์ฐํ๊ฒ ์ค์ ํ ์ ์๋ค๋ ์ ์์ ๊ธฐ์กด RAID์ ์ฐจ๋ณํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, n๊ฐ์ ๋ธ๋ก์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ , ์ฌ๊ธฐ์ ๋ํด k๊ฐ์ ํจ๋ฆฌํฐ ๋ธ๋ก์ ์ถ๊ฐํ๋ฉด, ์ด n+k๊ฐ์ ๋ธ๋ก ์ค ์ต๋ k๊ฐ์ ๋ธ๋ก์ด ์์ค๋๋๋ผ๋ n๊ฐ์ ๋ฐ์ดํฐ ๋ธ๋ก์ด ๋จ์์๋ค๋ฉด ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์ผ๋ฐ์ ์ผ๋ก RS(n, k) ํํ๋ก ํํ๋ฉ๋๋ค. ์ถ์ฒ : Hadoop Erasure Coding Image 2 ์ ๊ทธ๋ฆผ์ Hadoop์์ Erasure Coding ์ด ์ ์ฉ๋๊ธฐ ์ ๊ณผ ํ์ ๋ธ๋ก ๊ตฌ์กฐ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ฆ, ํ๋์ ๋ ผ๋ฆฌ์ ๋ธ๋ก(Logical Block)์ ๊ธฐ๋ฐ์ผ๋ก ํจ๋ฆฌํฐ(parity)๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๋ณํ๋ฅผ ์ค๋ช ํ ๊ฒ์ ๋๋ค. ์ฐธ๊ณ ๋ก ๋ ผ๋ฆฌ์ ๋ธ๋ก ํฌ๊ธฐ ์์ฒด๋ Erasure Coding ๊ฐ ์ ์ฉ๋๋๋ผ๋ ๋ฐ๋์ง ์์ต๋๋ค. ๋จผ์ , Contiguous Block ๊ตฌ์กฐ๋ ํ๋์ ๋ ผ๋ฆฌ ๋ธ๋ก์ด ํ๋์ ๋ฌผ๋ฆฌ ๋ธ๋ก(Storage Block)์ ๊ทธ๋๋ก ์ ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค. ์ด ๊ตฌ์กฐ์์๋ ํ๋์ ํ์ผ์ ์์ฐจ์ ์ผ๋ก ์ฝ์ ์ ์๊ณ , ๊ตฌํ์ด ๊ฐ๋จํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋ง์ฝ Erasure Coding ์ ์ ์ฉํด์ผ ํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฐ๋ด์ด ์ฌ๋ฌ ๋์คํฌ์ ๋ถ์ฐ์์ผ์ผ ํ๋ฏ๋ก, ์ด๋ ๊ฒ ๋จ์ผ ๋ธ๋ก์ ์ ์ฅํ๋ ๊ตฌ์กฐ์์๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ํจ๋ฆฌํฐ ๋ถ์ฐ ์ ์ฅ์ด ์ด๋ ต์ต๋๋ค. ๋จ์ผ ๋ธ๋ก ๋จ์๋ก๋ง ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ IO ๋ถ์ฐ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ฉด, Striped Block ๊ตฌ์กฐ๋ ํ๋์ ๋ ผ๋ฆฌ ๋ธ๋ก์ ๋ ์์ ๋จ์์ธ ์ (cell)๋ก ์ชผ๊ฐ ๋ค์, ์ด ์ ๋ค์ stripe(์ฌ๋ฌ ์ ๋ก ๊ตฌ์ฑ๋ ์งํฉ)๋ก ๊ตฌ์ฑํด, ์ฌ๋ฌ ๊ฐ์ ์คํ ๋ฆฌ์ง ๋ธ๋ก ์ธํธ์ ๋ผ์ด๋๋ก๋น ๋ฐฉ์์ผ๋ก ๋๋ ์ ์ฅํฉ๋๋ค. ์ฝ๊ฒ ๋งํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์๊ฒ ์ฐ์ด์ ์ฌ๋ฌ ๋์คํฌ์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์์ผ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค. ์ฝ์ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ํ๋์ ๋ ผ๋ฆฌ ๋ธ๋ก์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ์ ์ ๋ณ๋ ฌ๋ก ๋์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์, ์ฝ๊ธฐ ์๋(read performance)๊ฐ ๊ธฐ์กด ๊ตฌ์กฐ๋ณด๋ค ๋ ๋นจ๋ผ์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ์ ๋๋ถ์ ๋จ์ผ ๋ธ๋ก์ ๋ํด์๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ฏ๋ก, ์ฑ๋ฅ ํฅ์์ด๋ผ๋ ์ธก๋ฉด์์๋ ํจ๊ณผ๊ฐ ํฝ๋๋ค. โ Erasure Coding ์ ์ฅ์ Erasure Coding์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๋ฅ๋ ฅ์ ์ ์งํ๋ฉด์๋ ์ ์ฅ ๊ณต๊ฐ์ ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๊ธฐ์กด์ Hadoop์ ์ฅ์ ๋๋น๋ฅผ ์ํด ํ๋์ ๋ธ๋ก์ 3๊ฐ๊น์ง ๋ณต์ (3-way replication) ํ๋ค ๋ณด๋, ์ ์ฒด ์ ์ฅ ๊ณต๊ฐ์ 2/3๊ฐ ๋ณต์ ๋ณธ ์ ์ฅ์ ์๋ชจ๋๋ ๋นํจ์จ์ด ์์์ต๋๋ค. ํ์ง๋ง EC๋ฅผ ๋์ ํ๋ฉด, ์๋ฅผ ๋ค์ด RS(6,3)์ฒ๋ผ 6๊ฐ์ ๋ฐ์ดํฐ ๋ธ๋ก๊ณผ 3๊ฐ์ ํจ๋ฆฌํฐ ๋ธ๋ก์ ์ฌ์ฉํด ์ด 9๊ฐ์ ๋ธ๋ก์ ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ 3๊ฐ์ ๋ธ๋ก์ด ์์๋๋๋ผ๋ ๋๋จธ์ง ๋ธ๋ก์ผ๋ก ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์๊ณ , ์ ์ฒด ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉ๋ฅ ๋ ํจ์ฌ ๋์์ง๊ฒ ๋ฉ๋๋ค. ์ถ์ฒ : Hadoop Erasure Coding ๋น๊ต ํ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ, RS(10, 4) ๋ก ๊ตฌํํ๋ฉด, ์คํ ๋ฆฌ์ง์ 40%๋ง์ ๋ณต์์ ์ํด ์ฐ๊ฒ ๋์ง๋ง, ๊ธฐ์กด ๋ฐฉ์๋๋ก ํ๊ฒ ๋๋ค๋ฉด 200%๋ฅผ ๋ณต์์ ์ํด ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์ฐจ์ด๋ฅผ ๊ทน๋ช ํ๊ฒ ๋ณผ ์ ์๋ ํ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ถ์ฒ : EC ์ ์ฉ ์ ํ์ ๋ํ Read ์ฑ๋ฅ ์งํ ๋ํ ์์ ์ค๋ช ํ Striped Block ๊ตฌ์กฐ ๋๋ถ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ฏ๋ก, ํ์ผ์ ์ฝ๋ ์ฑ๋ฅ์ด ๊ธฐ์กด๋ณด๋ค ๋ ๊ฐ์ ๋๋ ๊ฒฐ๊ณผ๋ ํจ๊ป ์ป์ ์ ์์ต๋๋ค. ํด๋น ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์คํธํ ์ฑ๋ฅ ์งํ ์ฐธ๊ณ ์๋ฃ์ ๋๋ค. โ Erasure Coding ์ ๋จ์ ๋ฌผ๋ก ๋จ์ ๋ ์กด์ฌํฉ๋๋ค. RAID์์์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋จ์ ๋ณต์ ๋ฐฉ์์ ๋นํด Erasure Coding ์ ๋ ๋ง์ ๊ณ์ฐ์ด ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ํจ๋ฆฌํฐ๋ฅผ ๊ณ์ฐํ๋ ์ธ์ฝ๋ฉ(encoding) ์์ ์ด ํ์ํ๊ณ , ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ๋๋ ๋์ฝ๋ฉ(decoding) ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ํนํ ์ฐ๊ธฐ ์ฑ๋ฅ(write performance) ๋ฉด์์๋ ๊ธฐ์กด๋ณด๋ค ๋๋ ค์ง ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๋จ์ ๋ ์์ ํ ํด๊ฒฐ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. Intel์์ ์ ๊ณตํ๋ ISA-L encoder ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ์, ํจ๋ฆฌํฐ ๊ณ์ฐ ์๋๊ฐ ๊ฐ์ ๋์ด ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ ์ ๋ ์ค์ผ ์ ์์์ต๋๋ค. ์ค์ ๋ก ์ธก์ ํด๋ณด๋ฉด, ์ฐ๊ธฐ ์ฑ๋ฅ์ ์ฝ 30% ์ ๋๋ง ๊ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ถ์ฒ : 100GB ๋ฐ์ดํฐ์ ์ ๋ํ ์ฐ๊ธฐ ์ฑ๋ฅ ์งํ ํด๋น ์ฑ๋ฅ ์งํ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ ISA-L(์ธํ ์ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) ์ฌ์ฉ ์ ์ฐ๊ธฐ ์ฑ๋ฅ์ด ํฌ๊ฒ ๊ฐ์ ๋ฉ๋๋ค. ํจ๋ฆฌํฐ๊ฐ ๋ง์์ง์๋ก ์ธ์ฝ๋ฉ ๋ถ๋ด์ด ์ปค์ ธ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ธฐ ์๊ฐ์ด ๋์ด๋์ง๋ง, ISA-L ๋๋ถ์ ์ด๋ฅผ ์๋น ๋ถ๋ถ ์ค์ผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ํ๋ก์์ Erasure Coding์ ์ธ ๋ ISA-L ๊ฐ์ ํ๋์จ์ด ์ต์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฑ๋ฅ ๋ณ๋ชฉ์ ์ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๐ 3.4. FIFO Queue vs Fair Call Queue Hadoop๊ณผ ๊ฐ์ ๋ถ์ฐ ์์คํ ์์๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์๋ฒ(NameNode, DataNode ๋ฑ)์ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด๋ฌํ ์์ฒญ๋ค์ ๊ณง๋ฐ๋ก ์ฒ๋ฆฌ๋ ์ ์๊ณ , ์ ์ ์ ์ฅํด๋์๋ค๊ฐ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก Call Queue (์์ฒญ ํ) ์ ๋๋ค. ๐ก ์์ฒญ ํ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์จ ์์ ์์ฒญ์ ์์๋ก ๋ณด๊ดํ๊ณ , ์๋ฒ์ ๊ฐ์ฉํ ๋ฆฌ์์ค์ ๋ง์ถฐ ํ๋์ฉ ๊บผ๋ด ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋๊ธฐ์ด ๊ตฌ์กฐ์ ๋๋ค. โ FIFO Queue๋? ์ถ์ฒ : FIFO Queue FIFO (First-In-First-Out) Queue๋ ๋จผ์ ๋ค์ด์จ ์์ฒญ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํ(queue)์ ๋๋ค. Hadoop์์ Fair Call Queue๊ฐ ๋์ ๋๊ธฐ ์ ๊น์ง๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ์ด ๋จ์ผ FIFO ํ์ ์ ์ฅํ ๋ค, ์์ฒญ ๋์ฐฉ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ๊ฐ ์ฌ์ฉ๋์์ต๋๋ค. ์ค์ ์ core-site.xml ์์ ํ ์ ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ( * ์ค์ ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ผ๋ก๋ FIFO Queue ๋ฅผ ํ์ฉํฉ๋๋ค. ) <property> <name>ipc.server.callqueue.class</name> <value>org.apache.hadoop.ipc.FifoCallQueue</value> <description>RPC ์์ฒญ ์ฒ๋ฆฌ ์ FIFO Queue๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ </description> </property> ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ ์์ฒญ์ด ๋์ฐฉํ๋ฉด, Reader Thread๊ฐ ์ด ์์ฒญ์ ํ๋์ FIFO ํ์ ์ ์ฅํฉ๋๋ค. Handler๊ฐ ์์ ์ ์ํํ ์ค๋น๊ฐ ๋๋ฉด, ์ด ํ์์ ๋งจ ์์ ์๋ ์์ฒญ์ ํ๋์ฉ ๊บผ๋ด์ด ์ฒ๋ฆฌํฉ๋๋ค. ์์ ์ ์์๋ก๋ ์ ๋ณด ์กฐํ๋, ์์ฑ, append ์์ , ํ์ผ๋ฆฌ์คํธ ์กฐํ(๋๊ท๋ชจ์ ๊ฒฝ์ฐ ๋ณ๋ชฉ ๋ฐ์), ๋ณ๊ฒฝ ๋ฑ์ด ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํ ์์ ์ด๋ , hdfs dfs ๋ช ๋ น์ด๋ฅผ ํตํ ์์ ์ด๋ ๋์ผํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋จ์ํ๊ณ ๊ตฌํ์ด ์ฌ์ฐ๋ฉฐ, ์์ฒญ ์์๋ฅผ ๊ทธ๋๋ก ์ ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง, ๋ถ์ฐ ์์คํ ํ๊ฒฝ์์๋ ์ฌ๊ฐํ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ด, ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ณต์ ์ฑ๊ณผ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. โ FIFO Queue ์ ๋จ์ FIFO ๊ตฌ์กฐ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋, ํน์ ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋์ ์์ฒญ.. ํน์ ๋ฌด๊ฑฐ์ด ์์ฒญ์ ์ ์กํ ๊ฒฝ์ฐ ํ๋ฅผ ์ฌ์ค์ ์ ๋ นํ๊ฒ ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ heavy user๋ก ์ธํด ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์์ฒญ์ ๋ค๋ก ๋ฐ๋ ค, ์ ์ฒด ์์คํ ์ ์๋ต ์๊ฐ์ด ์ฌ๊ฐํ๊ฒ ์ง์ฐ๋ฉ๋๋ค. โ๏ธ ์: ํ๋์ ์ ์ ๊ฐ ์์ฒ ๊ฐ์ ์์ฒญ์ ๋ณด๋ผ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ ์์ฒญ์ ํด๋น ์์ฒญ ๋ค์ ๋๊ธฐํ๊ฒ ๋์ด ์๋ฐฑ ms ์ด์์ ์ง์ฐ ๋ฐ์ ๋ํ, Hadoop์ NameNode๋ ํ์ผ ์์คํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ํต์ฌ ๊ตฌ์ฑ์์๋ก, ํด๋ฌ์คํฐ์ ๋ชจ๋ read, write, create, delete ์์ฒญ์ด ์ด ๋ ธ๋๋ฅผ ๊ฑฐ์นฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฌํ FIFO Queue ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์์ฒญ๋ค์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๊ณ , ๋ชจ๋ ์์ฒญ์ด ํ๋์ ์ค์์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ณ๋ชฉ์ด ๋งค์ฐ ์ฌ๊ฐํ๊ฒ ๋ฐ์ํฉ๋๋ค. ์ค์ ๋ก ๊ณผ๊ฑฐ ํ๋ก์ ์ด์ํ๋ ์ ์ฒด๋ค์ ์๋ง์ ํด๋ฌ์คํฐ์์ ์ ms~์๋ฐฑ ms ๋จ์์ ์๋ต ์ง์ฐ์ด ๋น๋ฒํ ๋ฐ์ํ์ผ๋ฉฐ, ์ด๋ ์ ์ฒด ์์คํ ์ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ก์ต๋๋ค. ๊ทธ๋ด๊ฒฝ์ฐ ๊ณผ๊ฑฐ์๋ ํ๋ฅผ ๋ ์ ํ ์ฌ์ฉ์ ์์ฒญ์ ๊ฐ์ ๋ก ์ข ๋ฃ(kill) ํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค ํ์ต๋๋ค. ํ์ง๋ง, ๊ทธ๋ ๊ฒ kill ์ ํด๋ฒ๋ฆฌ๋ฉด, ์ด๋ฏธ ์ฒ๋ฆฌ ์ค์ด๋ ์์ฒญ์ ๊ฐ์ ๋ก ์ข ๋ฃํ๋ฉด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์์์ด ์๊ธฐ๊ฑฐ๋, ์ข ๋ฃ ๋์ค ์ค๋ฅ ๋ฐ์ ์ ์ฌ์๋ ์คํจ, ๊ทธ๋ฆฌ๊ณ ์ฌํ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ์ ์ฒด๊ฐ ์ ์๊ฐ ๋์ ๋ฉ์ถ๋ ์ํฉ๊น์ง ๋ฐ์ํ์์ต๋๋ค. ์ถ์ฒ : FIFO Queue ์ ๋ฌธ์ ์ ๋น๊ต ํต๊ณ ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋๋ ์์ฒญ์ด ์ฌ์ฉ์์ ์๋ชป๋ MapReduce ์์ ์ ์ํด ์์ฃผ ๋ฐ์ํ๋ค๋ ์ ์ ๋๋ค. ์๋ํ์ง ์์๋๋ผ๋, ์ด๋ฌํ ์์ ์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ณผ๋ํ ์์ฒญ์ ๋ฐ์์์ผ ์์คํ ์ ์ฒด์ ๋ถํ๋ฅผ ์ ๋ฐํฉ๋๋ค. ๋ ๋์๊ฐ, ์๋์ ์ผ๋ก ์ด๋ฌํ ์์ ์ ์ํํ ๊ฒฝ์ฐ DDoS ๊ณต๊ฒฉ์ฒ๋ผ ์์คํ ์ ๋ง๋น์ํค๋ ์ ์์ ์ธ ํ์๋ ๊ฐ๋ฅํด์ง๋๋ค. ๋ฐ๋ผ์, ๋จ์ํ FIFO ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ณต์ ์ฑ ๊ฒฐ์ฌ๋ฟ๋ง ์๋๋ผ, ๋ณด์ ์ธก๋ฉด์์๋ ์ทจ์ฝํ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๐ก DDos ๋?: ๋ถ์ฐ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ์ผ๋ก, ์ฌ๋ฌ ๋์ ์ปดํจํฐ(๋ถ์ฐ๋ ์ฌ๋ฌ ๊ณต๊ฒฉ์)๊ฐ ๋์์ ํน์ ์๋ฒ๋ ๋คํธ์ํฌ์ ๋๋์ ์์ฒญ์ ๋ณด๋ด์ ์ ์์ ์ธ ์๋น์ค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ์ง ๋ชปํ๋๋ก ๋ฐฉํดํ๋ ๊ณต๊ฒฉ์ ๋๋ค. โ Fair Call Queue ๋? ์ถ์ฒ : Fair Call Queue Hadoop์์ ๊ธฐ์กด์ FIFO Queue๊ฐ ๊ฐ์ง ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด, ๋ผ์ฐํฐ์์ ์ฌ์ฉํ๋ QoS(Quality of Service) ๊ธฐ๋ฅ์์ ์๊ฐ์ ๋ฐ์ FIFO Queue๋ฅผ Fair Call Queue๋ก ๊ต์ฒดํ์์ต๋๋ค. QoS๋ ๋คํธ์ํฌ ์ฅ๋น์์ ํธ๋ํฝ์ ๊ด๋ฆฌํด ๊ฐ ์๋น์ค๊ฐ ์ ์ ํ ํ์ง์ ์ ์งํ๋๋ก ๋ณด์ฅํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฅผ Hadoop์ ์์ฒญ ์ฒ๋ฆฌ์ ์ ์ฉํ์ฌ, ํด๋ผ์ด์ธํธ๋ณ ์์ฒญ์ด ๊ณต์ ํ๊ฒ ์ฒ๋ฆฌ๋๊ณ , ํน์ ํด๋ผ์ด์ธํธ์ ๊ณผ๋ํ ์์ฒญ์ผ๋ก ์ธํด ์ ์ฒด ์๋น์ค๊ฐ ์ง์ฐ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ์์ต๋๋ค. ์ค์ ์ core-site.xml ์์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค. <property> <name>ipc.server.callqueue.class</name> <value>org.apache.hadoop.ipc.FairCallQueue</value> <description>RPC ์์ฒญ ์ฒ๋ฆฌ ์ Fair Call Queue๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ </description> </property> Fair Call Queue๋ ํฌ๊ฒ scheduler, multiplexer , ๊ทธ๋ฆฌ๊ณ multi-level queue ์ด๋ ๊ฒ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. RPC Scheduler ๊ฐ ํด๋ผ์ด์ธํธ๋ณ ํ์ ๋ด๊ธด ์์ฒญ๋ค์ ์ ์ ํ ๋น์จ๋ก ์ ํํ์ฌ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ ๊ฐ ๊ณต์ ์ฑ์ ๋ณด์ฅํ๊ณ , ์์์ ํจ์จ์ ์ผ๋ก ๋ถ๋ฐฐํ์ฌ ์๋ต ์ง์ฐ์ ์ต์ํํฉ๋๋ค. Multi-level Queue ๊ฐ ํด๋ผ์ด์ธํธ๋ณ๋ก ๋ถ๋ฆฌ๋ ์์ฒญ๋ค์ด ๋ค์ด๊ฐ๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก, ํด๋ผ์ด์ธํธ๋ง๋ค ๋ ๋ฆฝ์ ์ธ ๋๊ธฐ์ด์ ๊ฐ์ง๋๋ค. ์ด๋ ๊ฒ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ฒ๋ฆฌ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํฉ๋๋ค. ์ด 4๋จ๊ณ์ ํ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. (priority 0 ~ 3) RPC Multiplexer ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ ์์ฒญ๋ค์ ๋ฐ์ ๊ฐ๊ฐ์ ํด๋ผ์ด์ธํธ๋ณ ํ๋ก ๋ถ๋ฐฐํ๋ ์ญํ ์ ํฉ๋๋ค. ์ฆ, ์์ฒญ์ ํ ๊ณณ์ ๋ชฐ์๋์ง ์๊ณ ๊ฐ ์ฌ์ฉ์๋ณ๋ก ์์ฒญ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ Fair Call Queue๋ ํน์ ์ฌ์ฉ์์ ๊ณผ๋ํ ์์ฒญ์ด ์ ์ฒด ์์คํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ๋ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ๋ฉฐ, Hadoop ํด๋ฌ์คํฐ์ ์์ ์ฑ๊ณผ ์๋ต์ฑ์ ๋์์ต๋๋ค. โ Fair Call Queue - RPC Scheduler ํด๋ผ์ด์ธํธ์ RPC ์์ฒญ์ด Listen Queue์ ๋์ฐฉํ๋ฉด, ์ฌ๋ฌ ๊ฐ์ Reader Thread๊ฐ ์์ฒญ์ RpcScheduler์ ์ ๋ฌํฉ๋๋ค. RpcScheduler๋ ์์ฒญ์ ์ฌ๋ฌ ๊ฐ์ Priority Queue๋ก ๋ถ๋ฆฌํ์ฌ ์ ์ฅํฉ๋๋ค. ๊ฐ ์์ฒญ์ ์ฐ์ ์์(priority)๋ฅผ ๊ณ์ฐํ ๋ค, ํด๋น Priority Queue์ ํ ๋น๋ฉ๋๋ค. RPC Scheduler๋ pluggable ๊ตฌ์กฐ๋ก ๋์ด ์์ด, ๋ค์ํ ๊ตฌํ์ฒด๋ฅผ ์ ํํ ์ ์์ต๋๋ค. RPC Scheduler ์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ DecayRpcScheduler์ ๋๋ค. ( ๊นํ๋ธ ์ฝ๋ ) DecayRpcScheduler๋ ๊ฐ ์ฌ ์ฌ์ฉ์๋ง๋ค ์ผ๋ง๋ ๋ง์ ์์ฒญ์ ๋ณด๋ด๋์ง๋ฅผ ์ถ์ ํ๊ณ , ์ด ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๋ค๋ง, ์ค๋ ์ ์ ๋ณด๋ธ ์์ฒญ์ ์ค์๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์๊ฐ์ ๋ฐ๋ผ ์์น๋ฅผ ๊ฐ์์ํค๋(decay) ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋์ ๊ณผ์ ์ ํ์ด์ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ์ฌ์ฉ์๊ฐ RPC ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค, ๊ทธ ์ฌ์ฉ์์ ๋ํ ์์ฒญ ํ์(count)๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๊ทธ ํ 5์ด๋ง๋ค(sweep period) ๋ชจ๋ ์ฌ์ฉ์์ ๋ํด ์์ฒญ ์๋ฅผ ๋ค์ ๊ณ์ฐํฉ๋๋ค. ์ด ๋ ์ํ ์์ฒญ ์๋ฅผ ๋ํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์กด ์์ฒญ ์์ Decay Factor๋ฅผ ๊ณฑํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ๊ธฐ์กด ์์ฒญ ์๊ฐ 10์ด๊ณ decay factor๊ฐ 0.5๋ผ๋ฉด 10 ร 0.5 ๋ฅผ ํด์ 5 ๊ฐ ๋ฉ๋๋ค. ์์์ Decay ๋ ๊ฐ์ ์ด๋ฒ sweep ์ฃผ๊ธฐ ๋์ ์๋กญ๊ฒ ๋ค์ด์จ ์์ฒญ ์๋ฅผ ๋ํฉ๋๋ค. Decay ๋ ๊ฐ์ด 5์ด๊ณ , ์ ์์ฒญ์ด 4๊ฑด์ด๋ฉด 5 + 4 ํด์ 9 ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ฌ์ฉ์์ decay๋ ์์ฒญ ์๋ฅผ ํฉ์ฐํ์ฌ ์ ์ฒด ์์ฒญ๋์ ๊ตฌํฉ๋๋ค. ๊ทธ ์ค ๊ฐ ์ฌ์ฉ์๊ฐ ์ฐจ์งํ๋ ๋น์จ์ ๋ฐ๋ผ ์ฐ์ ์์(priority)๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๊ณ์ฐ๋ ์ฐ์ ์์๋ ์บ์์ ์ ์ฅ๋์ด ๋ค์ sweep ๋๊น์ง ์ ์ง๋๋ฉฐ, ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ ์ด priority๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ ํ priority queue์ ๋ถ๋ฅ๋ฉ๋๋ค. ๋ง์ฝ ์ ์ฌ์ฉ์๊ฐ ๋ฑ์ฅํ์ฌ ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด, ์ด์ ์บ์๊ฐ ์๊ธฐ ๋๋ฌธ์ on-the-fly๋ก ์ฐ์ ์์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋๋ ์ ์ฒด ์์ฒญ ๋๋น ๋น์จ์ ๋ฐ์ ธ์ ์์๋ก priority๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ๋ค์์ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค. Sweep ์ฃผ๊ธฐ๋ 5์ด, Decay Factor ๋ 0.5๋ก ์ก์ ์ํ์์ 3๋ช ์ User ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ ์ํฉ์ ๋๋ค. ๐ ์์ฒญ ์ ๋ณํ ๋ฐ ์ฐ์ ์์ ๊ณ์ฐ ์์ ์๊ฐ(์ด) ์ฌ์ฉ์ ์ด์ ์์ฒญ ์ Decay ์ ์ฉ ํ ์ ์์ฒญ ์ ํ์ฌ ์์ฒญ ์ (Decay + ์ ์์ฒญ) ์ ์ฒด ํฉ ์ ์ฒด ๋๋น ๋น์จ Priority 0 userA 0 - 10 10 24 41.7% 2 0 userB 0 - 8 8 ย 33.3% 2 0 userC 0 - 6 6 ย 25.0% 1 5 userA 10 5 4 9 18.75 48.0% 2 5 userB 8 4 2 6 ย 32.0% 2 5 userC 6 3 0.75 3.75 ย 20.0% 1 10 userA 9 4.5 0 4.5 10.125 44.4% 2 10 userB 6 3 0 3 ย 29.6% 2 10 userC 3.75 1.875 0.75 2.625 ย 25.9% 1 ๐ ์ฐ์ ์์ ๊ธฐ์ค (๊ธฐ๋ณธ ์ค์ ) ์ ์ฒด ์ ์ ์จ ๊ธฐ์ค Priority ์ค๋ช โฅ 50% 3 ์ตํ ์ฐ์ ์์ 25% ~ 50% 2 ์ค๊ฐ ์ฌ์ฉ์ 12.5% ~ 25% 1 ์ผ๋ฐ ์ฌ์ฉ์ < 12.5% 0 ์ต์ ์ฐ์ ์์ ์ฐธ๊ณ ๋ก Sweep ์ฃผ๊ธฐ์ Decay Factor ๋ core-site.xml ์์ ์ค์ ํด์ค ์ ์์ต๋๋ค. <property> <name>ipc.server.callqueue.sweep.period.ms</name> <value>5000</value> <description>Sweep ์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ค์ (๊ธฐ๋ณธ 5์ด)</description> </property> <property> <name>ipc.server.callqueue.decay.factor</name> <value>0.5</value> <description>Decay Factor ๊ฐ์ ์ค์ (๊ธฐ๋ณธ 0.5)</description> </property> โ Fair Call Queue - Multi-level Queue Multi-level Queue๋ ์์ฒญ(Call)์ ์ฐ์ ์์๋ ์ค์๋์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฒจ(๊ณ์ธต) ํ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ ํ ๊ตฌ์กฐ์ ๋๋ค. ๋์ ์ฐ์ ์์ ํ์ ์์ฒญ์ด ๋จผ์ ์ฒ๋ฆฌ๋๊ณ , ๋ง์ฝ ํด๋น ํ์ ์์ฒญ์ด ์์ผ๋ฉด ๋ฎ์ ์ฐ์ ์์ ํ์ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. โ Fair Call Queue - RPC Multiplexer RPC Multiplexer ๋ ์ฌ๋ฌ ์ฐ์ ์์ ํ์์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ปดํฌ๋ํธ์ ๋๋ค. ์ฌ๋ฌ ์ฐ์ ์์ ํ(์: high-priority, low-priority)๋ฅผ ๋น๊ตํ์ฌ ์์ฒญ์ ์ ํํฉ๋๋ค. ์ด ๋ ๋์ ์ฐ์ ์์ ํ๋ฅผ ๋ ์์ฃผ ์ฒ๋ฆฌํ์ฌ ์ค์ํ ์์ฒญ์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋์์, ๋ฎ์ ์ฐ์ ์์ ํ๋ ์ผ์ ๋น์จ๋ก ์ฒ๋ฆฌํ์ฌ starvation(์ฒ๋ฆฌ ์ง์ฐ)์ ๋ฐฉ์งํฉ๋๋ค. Multiplexer ๋ ํ์ฌ ๊ตฌํ์ฒด๋ก WeightedRoundRobinMultiplexer๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ( ๊นํ๋ธ ์ฝ๋ ) WeightedRoundRobinMultiplexer ๋ ๊ฐ ์ฐ์ ์์ ํ๋ณ๋ก ๊ฐ์ค์น(weight)๋ฅผ ๋ถ์ฌํ๊ณ , ๊ทธ ๋น์จ์ ๋ฐ๋ผ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ ๊ฐ์ค์น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค ์ฐ์ ์์ ๋ ๋ฒจ ๊ฐ์ค์น (Weight) ์ฒ๋ฆฌ ๋ฐฉ์ Highest priority (0) 8 ํ์์ 8๊ฐ์ ์์ฒญ์ ์ฐ์์ผ๋ก ๊บผ๋ด์ ์ฒ๋ฆฌ 2nd highest priority (1) 4 ํ์์ 4๊ฐ์ ์์ฒญ์ ๊บผ๋ด์ ์ฒ๋ฆฌ 3rd highest priority (2) 2 ํ์์ 2๊ฐ์ ์์ฒญ์ ๊บผ๋ด์ ์ฒ๋ฆฌ Lowest priority (3) 1 ํ์์ 1๊ฐ์ ์์ฒญ์ ๊บผ๋ด์ ์ฒ๋ฆฌ ์ด ๋ฐฉ์์ผ๋ก ๋์ ์ฐ์ ์์ ํ์์ ๋ ๋ง์ ์์ฒญ์ ๋จผ์ ์ฒ๋ฆฌํ์ง๋ง, ๋ฎ์ ์ฐ์ ์์ ํ๋ ์ ์ ํ ์ฒ๋ฆฌํ์ฌ ์ฒ๋ฆฌ ์ง์ฐ ํ์(starvation)์ ๋ฐฉ์ง ํฉ๋๋ค. ์ด๋ฌํ ํ๋ฆ์ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด, Fair Call Queue ๊ฐ ๋์ ๋๊ณ , RPC Scheduler ๋ Decay Factor ๋ฅผ ํตํด ์ฐ์ ์์๋ฅผ ๋๋์ด ์ด 4๊ฐ์ Multi-level Queue ๋ก ์์ ์ ๋ฃ์ด์ฃผ๊ณ , RPC Multiplexer ๋ ํด๋น ํ์์, ์ฐ์ ์์์ ๋ฐ๋ผ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ์ ์ ์์ ์์ ์ ๊บผ๋ด ์ฒ๋ฆฌ ํ ์ ์๊ฒ ํ๋ค๊ณ ํ ์ ์์ต๋๋ค. โ Fair Call Queue - Backoff Backoff๋ priority-weighting ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐ๋ก ๋์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. BackOff ๋ ์์ฒญ์ ์ฆ์ ์ฒ๋ฆฌํ์ง ์๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์์ธ(Exception)๋ฅผ ๋์ง๋ ๋ฐฉ์์ ๋๋ค. ์ ํ์ ์ผ๋ก request queue๊ฐ ๊ฐ๋ ์ฐผ์ ๋ ๋ฐ์ํฉ๋๋ค. ๋ํ, backkoff by response time ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ๋ ํ๋๋ฐ ์ด๋ ๋์ ์ฐ์ ์์ ํ์ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ๋๋ ค์ง ๊ฒฝ์ฐ, ๋ฎ์ ์ฐ์ ์์ ํ์ ์์ฒญ์ backoff ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, priority 1์ response time threshold๊ฐ 10์ด๋ก ์ค์ ๋์ด ์๋๋ฐ, ํด๋น ํ์ ํ๊ท ์๋ต ์๊ฐ์ด 12์ด๋ผ๋ฉด, priority 2 ์ดํ์ ์์ฒญ์ backoff exception์ ๋ฐ์ต๋๋ค. ๋ฐ๋ฉด์ priority 0๊ณผ 1์ ์์ฒญ์ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด ๋ฐฉ์์ ์์คํ ์ ๋ถํ๊ฐ ๋์์ ธ ๋์ ์ฐ์ ์์ ์ฌ์ฉ์๊น์ง ์ํฅ๋ฐ์ ๋, heavy user์๊ฒ backoff๋ฅผ ๊ฐ์ ํ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ Hadoop Client๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ backoff์ ์ํ ์์ธ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค๋ฉด, ์์ ์ ์์ฒญ์ด ์์คํ ์ ๊ณผ๋ํ ๋ถํ๋ฅผ ์ฃผ๊ณ ์์ง ์์์ง ์ ๊ฒํ ํ์๊ฐ ์์ต๋๋ค. <!-- Backoff ๊ธฐ๋ฅ ํ์ฑํ --> <property> <name>ipc.decay.scheduler.enable.backoff</name> <value>true</value> </property> <!-- ์๋ต์๊ฐ ๊ธฐ๋ฐ Backoff ๊ธฐ์ค ํ์ฑํ --> <property> <name>ipc.decay.scheduler.enable.response.time.backoff</name> <value>true</value> </property> <!-- Priority 1์ ์๋ต์๊ฐ Backoff ๊ธฐ์ค (์ด ๋จ์) --> <property> <name>ipc.decay.scheduler.response.time.threshold.priority.1</name> <value>10</value> </property> โ Fair Call Queue - Identity Provider ์์์ ์ค๋ช ํ RPC Scheduler ๋ ์ฌ์ฉ์ ๋จ์๋ก ์์ฒญ ์, ์ฐ์ ์์, decay, backoff ๋ฑ์ ๊ด๋ฆฌํฉ๋๋ค. ๋ โ์ฌ์ฉ์โ๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ์ง ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก IdentityProvider์ ๋๋ค. ์๋ฅผ ๋ค์ด, userA, userB์ ์์ฒญ์ ๋ถ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด user.name ๊ธฐ์ค์ผ๋ก ์๋ณํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด ๋์ผ ์ฌ์ฉ์๊ฐ ๋ค์ํ ์๋น์ค๋ IP์์ ์ค๋ ์์ฒญ์ ๋ถ๋ฆฌํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๊ธฐ๋ณธ์ UserIdentityProvider๋ก, ๋จ์ํ client์ username ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค. โ Cost based Fair Call Queue ? Fair Call Queue๋ ์ฌ์ฉ์ ๊ฐ์ ์์ฒญ ์๋ฅผ ๊ธฐ์ค์ผ๋ก priority ์ฒ๋ฆฌ๋ฅผ ์๋ํฉ๋๋ค. ํ์ง๋ง, ์์ฒญ์ด ์ผ๋ง๋ ๋น์ผ ์์ ์ธ์ง์ ๋ํ ๊ณ ๋ ค๋ ๋ถ์กฑํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ์์ฒญ ์๋ ๊ฐ์ง๋ง ์์คํ ์์์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ ์ฌ์ฉ์๊ฐ ๊ณต์ ์ฑ์ ํด์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ 3๊ฐ์ง ์์ฒญ์ ์๊ฐํด๋ด ์๋ค. getFileInfo ์์ฒญ 1000๊ฐ์, listStatus ์์ฒญ 1000๊ฐ (ํฐ ๋๋ ํ ๋ฆฌ ๋์), ๊ทธ๋ฆฌ๊ณ mkdir ์์ฒญ 1000๊ฐ ๊ฐ ์์ต๋๋ค. getFileInfo, listStatus๋ ๋จ์ ์กฐํ๋ผ์ ๊ฐ๋ณ์ต๋๋ค. ๋ฐ๋ฉด, mkdir์ ํ์ผ์์คํ ์ ์ง์ ๋ณ๊ฒฝ์ ๊ฐํ๊ณ , exclusive lock์ด ํ์ํด์ ํจ์ฌ ๋ฌด๊ฒ์ต๋๋ค. ํ์ง๋ง Fair Call Queue๋ ๋จ์ํ โ1000๋ฒ ์์ฒญโ๋ง ๋ณด๋, ์ด ์ฐจ์ด๋ฅผ ๊ตฌ๋ถ ๋ชปํฉ๋๋ค. ํ๋ก์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์์ฒญ ํ๋ํ๋๊ฐ ์์คํ ์์์ ์ผ๋ง๋ ์ฌ์ฉํ๋์ง๋ฅผ ๊ณ์ฐํด์ ์ฐ์ ์์์ ๋ฐ์ํ๋ Cost-based Fair Call Queue ๊ธฐ๋ฅ์ ๋์ ํ์ต๋๋ค. ์ฆ, ์์ฒญ ์๊ฐ ์๋๋ผ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๋จํฉ๋๋ค. ๋ฌด๊ฑฐ์ด ์์ฒญ์ ์์ฃผ ๋ณด๋ด๋ ์ฌ์ฉ์๋ ์๋์ผ๋ก ๋ฎ์ ์ฐ์ ์์๋ฅผ ๋ฐ๋๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. Cost based Fair Call Queue ๋ ์์ฒญ ์ฒ๋ฆฌ์ ๊ฑธ๋ฆฐ ์ค์ ์๊ฐ + ์ฌ์ฉ๋ lock์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๋จ์ ์์ : lock ์์ด ์คํ๋ ์๊ฐ โ ๊ทธ๋๋ก ๋ฐ์ (ร1) ๊ณต์ ๋ฝ(shared lock)์ด ๊ฑธ๋ฆฐ ์์ : ร10 ๊ฐ์ค์น ๋ฐฐํ ๋ฝ(exclusive lock)์ด ๊ฑธ๋ฆฐ ์์ : ร100 ๊ฐ์ค์น ๋จ, ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ(queue ๋๊ธฐ)์ด๋ ๋ฝ์ ์ป๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ์ฐ์ ํฌํจ๋์ง ์์ต๋๋ค. ์ ๋ ์ด ๋ถ๋ถ์ ๊ณต๋ถํ ๋ ์ดํด๊ฐ ์ข ๋์ง ์์์, ํ๋ก ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ๋จผ์ , 3๋ช ์ ์ฌ์ฉ์๊ฐ ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ฒญ์ ํ ๊ฒฝ์ฐ ์๋ ํ์ ๊ฐ์ด ๋ฉ๋๋ค. ์ฌ์ฉ์ ์์ฒญ ์ข ๋ฅ ์คํ ์๊ฐ(ms) Lock ์ข ๋ฅ ๊ฐ์ค์น Cost ๊ณ์ฐ (์๊ฐ ร ๊ฐ์ค์น) userA getFileInfo 10 ์์ ร1 10 userB listStatus 20 Shared Lock ร10 200 userC mkdir 15 Exclusive Lock ร100 1500 ๊ทธ๋ฌ๋ฉด, ๋ค์ ํ์ฒ๋ผ ์ฐ์ ์์๋ฅผ ๊ณ์ฐํฉ๋๋ค. (๋น์ค ๊ธฐ์ค) ์ฌ์ฉ์ Cost ์ ์ฒด ๋น์ค (%) ์ฐ์ ์์ (๊ธฐ๋ณธ ๊ธฐ์ค) userA 10 0.58% 0 (์ต์์) userB 200 11.7% 0 (์ต์์) userC 1500 87.7% 3 (์ตํ์) ๊ทธ๋ฌ๋ฉด, ์์ฒญ ๋ฐ๋ณต ์ ๋์ Cost ๋ณํ๊ฐ ์ผ์ด๋ฉ๋๋ค. (์ด ๋, Decay ๋ ๊ณ ๋ คํ์ง ์์ต๋๋ค.) ์ฌ์ฉ์ ์์ฒญ 1ํ๋น Cost ์์ฒญ ํ์ ๋์ Cost userA 10 2ํ 20 userB 200 2ํ 400 userC 1500 2ํ 3000 ์ต์ข ์ ์ผ๋ก๋ ์๋ ํ์ ๊ฐ์ด ๋ฉ๋๋ค. ์ฌ์ฉ์ ์ ์ฒด ๋น์ค (%) ์ฐ์ ์์ userA 0.58% 0 userB 11.7% 0 userC 87.7% 3 ์ค์ ์ core-site.xml ์์ ๊ฐ๋ฅํฉ๋๋ค. ์ด ์ค์ ์ ์ถ๊ฐํ๋ฉด Fair Call Queue๊ฐ ์์ฒญ์ ์ค์ ๋น์ฉ๊น์ง ๊ณ ๋ คํด์ ์ฌ์ฉ์ ์ฐ์ ์์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. <property> <name>ipc.costprovider.class</name> <value>org.apache.hadoop.ipc.WeightedTimeCostProvider</value> </property> ์ด๋ฌํ ๋ฐฉ๋ฒ์ ํตํด, FIFO Queue ์ ๋จ์ ์ ๋ณด์ํ๊ณ , ๋ฌด์๋ณด๋ค DoS ๊ณต๊ฒฉ์ ๋ํด์ ์ผ์ ์์ค ์ดํ์ ๋ฎ์ latency๋ฅผ ๋ณด์ฅํ ์ ์๊ฒ ๋์์ต๋๋ค. โ โ๏ธ ๊ฒฐ๋ก ์ด๋ฒ ํฌ์คํ ์์๋ ํ๋ก์ ํต์ฌ ์ด๋ก ๋ค์ ์์๋ณด์์ต๋๋ค. HDFS ์ ์ํคํ ์ฒ๋ถํฐ ์์ํด์ HA ๊ตฌ์ฑ, ONN ๊ทธ๋ฆฌ๊ณ EC ์ Fair Call Queue ๊น์ง.. ํ์ฌ์์ ๋จ์ํ ํ๋ก์ ๋ค๋ฃจ๋ ๊ฑฐ ๋ง์ผ๋ก๋ ์ ์ ์์๋ ๋ฐฉ๋ํ ์ง์๋ค์ ๊ณต๋ถ ํ ์ ์์์ต๋๋ค. ํ๋ก์ ๋จ์ํ ๋ถ์ฐ ํ์ผ ์์คํ ์ด์์ ์๋ฏธ๋ฅผ ์ง๋๋๋ค. ์๋ง์ ์์ฒญ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ค๊ฐ๋ ๋๊ท๋ชจ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋์ง, ์ด๋ค ์๋ฆฌ์ ๊ธฐ๋ฒ๋ค์ด ๊ทธ ๋ฐํ์ ์๋์ง๋ฅผ ์๊ฒ ๋๋ฉด, ๋น๋ก์ ํ๋ก์ โ์ ๋ค๋ฃฌ๋คโ๋ ๋ง์ด ์ด๋ค ์๋ฏธ์ธ์ง ๊น์ด ๊ณต๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฒ ํ์ต์ ํตํด ์๊ฒ ๋ ์ฌ๋ฌ ๋ฉ์ปค๋์ฆ๋ค์ ๋จ์ํ ๊ธฐ์ ์ ์ธ ์ง์์ ๋จธ๋ฌด๋ฅด์ง ์๊ณ , ์ค์ ํ์ฅ์์ ๋ง์ฃผํ๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๊ฐ ๋์ด์ค ๊ฒ์ ๋๋ค. ์์ผ๋ก๋ ํ๋ก๊ณผ ๊ฐ์ ๋๊ท๋ชจ ์์คํ ์ ๋ค๋ฃจ๋ฉด์, ์ด๋ก ๊ณผ ์ค๋ฌด์ ๊ฐ๊ทน์ ์ค์ด๊ณ , ์ง์์ ์ผ๋ก ์ฑ์ฅํด ๋๊ฐ์ผ๊ฒ ๋ค๋ ๋ค์ง์ ํ๊ฒ ๋์์ต๋๋ค. ์ด ํฌ์คํ ์ ์ฝ์ด์ฃผ์ ์ฌ๋ฌ๋ถ๋ ์ด ๊ธ์ ํตํด ํ๋ก์ ๋ํ ์ดํด๊ฐ ํ์ธต ๋ ๊น์ด์ง๊ณ , ๋ณต์กํ ์์คํ ์์์ ๋๋ง์ ํต์ฐฐ์ ์ป์ด๊ฐ์๊ธธ ๋ฐ๋๋๋ค. ๊ทธ๋ผ ๋ค์ ํฌ์คํ ์์๋ YARN ์ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ ๐ 1. ํจ์คํธ ์บ ํผ์ค - ํ ๋ฒ์ ๋๋ด๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ์ด๊ฒฉ์ฐจ ํจํค์ง Online. ๐ 2. HDFS NameNode RPC QoS ์ต์ ํ ๐ 3. Hadoop์ด๋ ๋ฌด์์ ๋๊น? ๐ 4. ํ๋ก 3.0์์ ๋ฌด์์ด ๋ฌ๋ผ์ก์๊น? ( Erasure Coding ์ ์ดํดํ๊ธฐ ์ข์ ๊ธ ) ๐ 5. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ ๐ 6. HDFS ์ํคํ ์ฒ ๐ 7. NameNode High Availability with Quorum Journal Manager ๐ 8. RAID ์ ๋ํ์ฌ ๐ 9. ํ๋ก๊ณผ ์ฃผํคํผ
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-03-05
๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
์ค๋๋ ๋ฐ์ดํฐ๋ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๊ธฐ์ ์ ์ค์์ฑ๋ ํจ๊ป ์ปค์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ฆ ์์์ ์ฃผ๋ชฉ๋ฐ์ ๊ธฐ์ ์ค ํ๋๊ฐ ๋ฐ๋ก ํ๋ก(Hadoop)์ ๋๋ค. ํ๋ก์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ ์คํ์์ค ํ๋ ์์ํฌ๋ก, ํ๋์ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํต์ฌ ๋๊ตฌ๋ก ๋๋ฆฌ ํ์ฉ๋์ด ์์ต๋๋ค. ์ต๊ทผ์๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๊ฒฝ์ด ํ์ฐ๋๊ณ , Spark๋ Flink์ ๊ฐ์ ๋ณด๋ค ์ ์ฐํ๊ณ ๊ณ ์ฑ๋ฅ์ ๊ธฐ์ ๋ค์ด ์ฃผ๋ฅ๋ก ๋ ์ค๋ฅด๋ฉด์ ํ๋ก์ ์ฌ์ฉ ๋น๋๋ ์ค์ด๋ค๊ณ ์๋ ์ถ์ธ์ ๋๋ค. ํ์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ๋ก์ ํ์ตํ๋ ์ผ์ ์ฌ์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค. ํ๋ก์ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์กฐ์ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ๋์ํ๋ฉฐ, ์ด๋ฌํ ๊ฐ๋ ์ ํ๋์ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ์ ์ ์ ์ฉ๋๋ ํต์ฌ ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ํ๋ก์ ํตํด ๋ถ์ฐ ์์คํ ์ ๊ฐ๋ ์ ์ตํ๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ๋ฆ์ ์ดํดํ๋ ๊ฒ์ ์ดํ ๋ค๋ฅธ ๊ธฐ์ ์ ๋ฐฐ์ฐ๋ ๋ฐ์๋ ํฐ ๋์์ด ๋ฉ๋๋ค. ํนํ ํ๋ก์ ๋จ์ผ ์๋ฒ๊ฐ ์๋ ๋ค์์ ์๋ฒ๊ฐ ํ๋ ฅํ์ฌ ์์ ์ ์ํํ๋ ๋ถ์ฐ ์์คํ ๊ธฐ๋ฐ ์์์ ์ค๊ณ๋์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ตํ๊ธฐ ์ ์ ๋ถ์ฐ ์์คํ ์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์๋ฆฌ๋ฅผ ๋จผ์ ์ตํ๋๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ฒ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ , ์ฅ์ ๋ณต๊ตฌ, ์ผ๊ด์ฑ ์ ์ง์ ๊ฐ์ ํต์ฌ ๊ฐ๋ ๋ค์ ์ดํดํ๋ฉด ํ๋ก์ ๋ด๋ถ ๋์๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๋น ๋ฐ์ดํฐ ๊ธฐ์ ์ ๋ฐ์ ๋ํ ํต์ฐฐ์ ์ป์ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ํ๋ก์ ์ ์ฌ์ ํ ๊ณต๋ถํ ํ์๊ฐ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ์์ ๋ถ์ฐ ์์คํ ์ ๋จผ์ ํ์ตํด์ผ ํ๋ ์ด์ ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. โ ๐ 1. ๋ถ์ฐ ์์คํ ๋ฑ์ฅ ์ด์ ์ ์๋ ์ปดํจํฐ๋ ์ฒ์ ๋ฑ์ฅํ ์ดํ, ์ค๋ ์๊ฐ ๋์ ๋จ์ผ ์์คํ ์์์ ๋ชจ๋ ์ฐ์ฐ๊ณผ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๊ตฌ์กฐ๋ก ๋ฐ์ ํด ์์ต๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ํด ๋ ๋น ๋ฅธ CPU, ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ, ๋ ํฐ ์ ์ฅ ์ฅ์น๊ฐ ๊พธ์คํ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ , ์ค์๊ฐ ์ฒ๋ฆฌ์ ์ค์์ฑ์ด ๋์์ง๋ฉด์ ๋จ์ผ ์์คํ ์ ํ๊ณ๊ฐ ์ ์ ๋๋ ทํ๊ฒ ๋๋ฌ๋๊ธฐ ์์ํ์ต๋๋ค. ์ด ์ฅ์์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ถ์ฐ ์์คํ ์ ๊ฐ๋ ์ ์ดํด๋ณด๊ธฐ ์ ์, ๋ถ์ฐ ์์คํ ์ด ์ ํ์ํ์ง๋ฅผ ์ดํดํ๊ธฐ ์ํ ๋ฐฐ๊ฒฝ์ผ๋ก์ ๊ณผ๊ฑฐ์ ์ปดํจํ ํ๊ฒฝ์ ์ด๋ป๊ฒ ๋ฐ์ ํด์๋์ง๋ฅผ ๋จผ์ ์ง์ด๋ณด๊ณ ์ ํฉ๋๋ค. ๋จ์ผ ์์คํ ์ ํน์ง๊ณผ ํ๊ณ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ๊ธฐ์ ์ ํ๋ฆ์ ์ดํด๋ณด๋ฉฐ, ๋ถ์ฐ ์์คํ ์ ํ์์ฑ์ด ์ด๋ป๊ฒ ๋ฑ์ฅํ๊ฒ ๋์๋์ง ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค. ๐ 1.1. ์ปดํจํฐ๋ ์ด๋ป๊ฒ ๋ฐ์ ํด์์๊น โ 1.1.1. 1930๋ ๋ ์ปดํจํฐ์ ์์ ์ปดํจํฐ์ ์์์ ์ฌ๋์ด ์ง์ ๊ณ์ฐํด์ผ ํ๋ ๋ฐ๋ณต์ ์ธ ์์ ์ ๋์ ํด์ฃผ๋ ๊ธฐ๊ณ๋ฅผ ๋ง๋๋ ๊ฒ์์ ์ถ๋ฐํ์ต๋๋ค. ์ง๊ธ์ฒ๋ผ ํค๋ณด๋๋ ๋ชจ๋ํฐ๊ฐ ์๋ ํํ๋ ์๋์๊ณ , ๋ง์ฐ์ค๋์ปค๋ ํ๋ฉด์กฐ์ฐจ ์กด์ฌํ์ง ์์์ต๋๋ค. ์ด๊ธฐ ์ปดํจํฐ๋ ์ฐ์ฐ ์์ ์ ์๋ํํ๊ธฐ ์ํ ์ ๊ธฐ ๊ธฐ๊ณ์ ์ฅ์น์ ๊ฐ๊น์ ์ต๋๋ค. ๊ทธ ๋ํ์ ์ธ ์๊ฐ 1941๋ ์ ๋ฑ์ฅํ Z3 ์ปดํจํฐ์ ๋๋ค. ๋ ์ผ์ ์ฝ๋ผ๋ ์ถ์ ๊ฐ ๊ฐ๋ฐํ Z3๋ ์ธ๊ณ ์ต์ด์ ํ๋ก๊ทธ๋๋จธ๋ธ ์ปดํจํฐ๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, ๋น์์๋ ์ ์์์ด ์๋ ๋ฆด๋ ์ด ๊ธฐ๋ฐ์ ์ ๊ธฐ ๊ธฐ๊ณ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ํ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ๊ณ์ ๋ฐฐ์ ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋, ๋ช ๋ น์ ์๋์ผ๋ก ์ ๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ๊ณผ๋ ๋น๊ตํ ์ ์์ ๋งํผ ๋นํจ์จ์ ์ด์์ต๋๋ค. ์ด๋ฌํ ์ด๊ธฐ ์ปดํจํฐ๋ค์ ์ฃผ๋ก ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ ๊ตฐ์ฌ์ ์์ ์ ํ์ฉ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํฌํ์ ๊ถค์ ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ๋์ ์์ผ๋ก๋ ํ ์๊ฐ ์ด์ ๊ฑธ๋ฆฌ๋ ์์ ์, ๊ธฐ๊ณ๋ ๋ช ๋ถ ๋ง์ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค. ์ด๋ ๊ณ์ฐ ์ ํ๋์ ์๋ ๋ฉด์์ ํฐ ์ง๋ณด์๊ณ , ์ดํ ์ปดํจํฐ ๊ธฐ์ ๋ฐ์ ์ ์ค์ํ ๊ธฐ๋ฐ์ด ๋์์ต๋๋ค. โ 1.1.2. ์ปดํจํฐ ๊ตฌ์กฐ์ ์ค์ํ ์ ํ์ 1940๋ ๋์ ๋ค์ด์๋ฉด์ ์ปดํจํฐ์ ๊ตฌ์กฐ๋ ์ค์ํ ์ ํ์ ์ ๋ง์ดํ๊ฒ ๋ฉ๋๋ค. ์ด ์๊ธฐ์ ๋ฑ์ฅํ ํฐ ๋ ธ์ด๋ง ์ํคํ ์ฒ๋ ์ปดํจํฐ ์ค๊ณ์ ํจ๋ฌ๋ค์์ ์์ ํ ๋ฐ๊พธ์ด ๋์์ผ๋ฉฐ, ์ค๋๋ ๋๋ถ๋ถ์ ์ปดํจํฐ ๊ตฌ์กฐ์ ๊ธฐ๋ณธ์ด ๋๋ ๊ฐ๋ ์ ๋๋ค. 1945๋ ์ ๋ฏธ๊ตญ์์ ๊ฐ๋ฐ๋ ENIAC์ ์ธ๊ณ ์ต์ด์ ๋ฒ์ฉ ์ ์์ ์ปดํจํฐ๋ก, ๋ณธ๊ฒฉ์ ์ธ ์ ์ ๊ณ์ฐ๊ธฐ์ ์๋๋ฅผ ์ด์์ต๋๋ค. ํ์ง๋ง ENIAC์ ํ๋ก๊ทธ๋จ์ ์ ์ฅํ ์ ์๋ ๊ตฌ์กฐ์๊ธฐ ๋๋ฌธ์, ์๋ก์ด ์์ ์ ์ํํ๋ ค๋ฉด ์ผ์ผ์ด ๋ฐฐ์ ์ ๋ณ๊ฒฝํด์ผ ํ์ต๋๋ค. ์ด๋ ๋ง์น ์ค๋งํธํฐ์์ ์ฑ์ ๋ฐ๊ฟ ๋๋ง๋ค ๋ด๋ถ ํ๋ก๋ฅผ ์๋ก ๋ฉ๋ํด์ผ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๋นํจ์จ์ ์ธ ๋ฐฉ์์ด์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ ์ด ๋ฐ๋ก โ์ ์ฅ ํ๋ก๊ทธ๋จ ๋ฐฉ์(stored-program concept)โ์ ๋๋ค. ์ด ๊ฐ๋ ์ ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ์ ๊ธฐ์ต์ฅ์น์ ์ ์ฅํ๊ณ , CPU๊ฐ ์ด๋ฅผ ๋ถ๋ฌ์ ์คํํ๋๋ก ๊ตฌ์ฑ๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ก ์ธํด ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝ์ด ํจ์ฌ ์ ์ฐํ๊ณ ๋น ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง ์ ์๊ฒ ๋์์ผ๋ฉฐ, ์ปดํจํฐ๊ฐ ์ง๊ธ์ฒ๋ผ ๋ค์ํ ์์ ์ ์์ฝ๊ฒ ์ํํ ์ ์๋ ๊ธฐ๋ฐ์ด ๋ง๋ จ๋์์ต๋๋ค. ์ถ์ฒ : Stored Program Image ์ถ์ฒ ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ๋ ํ๋ก๊ทธ๋จ๋ ๋ฐ์ดํฐ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ์ํ์์ต๋๋ค. ์ด ๊ตฌ์กฐ์ ๊ฐ์ฅ ํฐ ํน์ง์ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํจ์ผ๋ก์จ, ์ปดํจํฐ๊ฐ ๋ณด๋ค ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ฒ ๋์๋ค๋ ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ์์ ์ ์์ฝ๊ฒ ์ํํ ์ ์๊ฒ ๋์๊ณ , ์ฌ์ฉ์๊ฐ ํ์ํ ๋๋ง๋ค ํ๋ก๊ทธ๋จ์ ๋ฐ๊พธ์ด ์คํํ๋ ์ด๋ฅธ๋ฐ โ์ฌํ๋ก๊ทธ๋๋ฐโ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ค๋๋ ์ฌ์ฉ๋๋ ๊ฑฐ์ ๋ชจ๋ ์ปดํจํฐ๋ ์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์์ฒ๋ฆฌ์ฅ์น(CPU), ๊ธฐ์ต์ฅ์น(๋ฉ๋ชจ๋ฆฌ), ๊ทธ๋ฆฌ๊ณ ์ ์ถ๋ ฅ ์ฅ์น๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ช ๋ น์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์์๋๋ก ํ๋์ฉ ๋ถ๋ฌ์ ์คํ๋ฉ๋๋ค. ์ด๋ฌํ ์ฒ๋ฆฌ ๋ฐฉ์์ ํ๋ ์ปดํจํฐ ์์คํ ์ ํ์ค์ ์ธ ๋์ ์๋ฆฌ๊ฐ ๋์๊ณ , ๋ค์ํ ๊ธฐ์ ์ ๋ฐ์ ์ ์ด๋๋ ํ ๋๊ฐ ๋์์ต๋๋ค. โ 1.1.3. ๊ฐ์ธ PC ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋์คํ ์ปดํจํฐ๋ ์ ์ฐจ ์ฐ๊ตฌ์ค๊ณผ ๊ธฐ์ ์ ์ ์ ๋ฌผ์์ ๋ฒ์ด๋, ์ผ๋ฐ ๊ฐ์ ๊ณผ ๊ฐ์ธ์ ์์ ๋ค์ด์ค๊ฒ ๋์์ต๋๋ค. ์ด๋ฌํ ๋ณํ์ ์ค์ฌ์๋ ๋ง์ดํฌ๋กํ๋ก์ธ์์ ๋ฑ์ฅ๊ณผ IBM์ x86 ์ํคํ ์ฒ ๊ธฐ๋ฐ ๊ฐ์ธ์ฉ ์ปดํจํฐ๊ฐ ์์์ต๋๋ค. ์ด ์๊ธฐ๋ ์ปดํจํฐ๊ฐ ๋์คํ๋๋ ๊ฒฐ์ ์ ์ธ ์ ํ์ ์ด ๋์์ผ๋ฉฐ, ์ดํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ์ ์๋ ํฐ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค. 1981๋ , IBM์ด ๋ฐํํ IBM PC๋ ์ธํ ์ 8086 ๋ง์ดํฌ๋กํ๋ก์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค. ์ด ๊ตฌ์กฐ๋ ์ดํ ๋ฐ์คํฌํฑ PC์ ํ์ค์ด ๋์๊ณ , ์ค๋๋ ์๋ ์ฌ์ ํ ๋ง์ ์ปดํจํฐ๊ฐ x86 ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. x86 ์ํคํ ์ฒ๋ CPU๊ฐ ์ดํดํ๋ ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ํํธ์จ์ด์ ํ๋์จ์ด ๊ฐ์ ํธํ์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ์์ต๋๋ค. ์ด๋ฌํ ํ๋์จ์ด ๊ธฐ๋ฐ ์์์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฐ์ ํ์์ต๋๋ค. ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ ๊ธฐ๊ณ์ด๋ณด๋ค ์ฌ๋์ด ์ดํดํ๊ธฐ ์ฌ์ด ๋ช ๋ น์ด๋ก ๊ตฌ์ฑ๋์ด ์์์ผ๋ฉฐ, CPU๋ฅผ ์ง์ ์ ์ดํ ์ ์๋ ํน์ง์ด ์์์ต๋๋ค. ์ด์ด์ C ์ธ์ด๋ Pascal๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ธ์ด๋ค์ด ๋ฑ์ฅํ๋ฉด์, ํ๋ก๊ทธ๋๋ฐ์ ๋์ฑ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๋ณํํด๊ฐ์ต๋๋ค. ์ด๋ฌํ ์ธ์ด๋ค์ ๋ค์ํ ์ด์์ฒด์ ์ ์์คํ ์์ ํ์ฉ๋ ์ ์์๊ณ , ์ปดํจํฐ ํ์ฉ์ ํญ์ ํฌ๊ฒ ๋ํ๋ ์ญํ ์ ํ์์ต๋๋ค. Apple II, Commodore 64์ ๊ฐ์ ๊ฐ์ธ์ฉ ์ปดํจํฐ๊ฐ ๋ณด๊ธ๋๋ฉด์, ์ด๋ฆฐ ์์ ๋ถํฐ ์ปดํจํฐ๋ฅผ ์ ํ๊ณ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๋ ์ธ๋๋ ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค. ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด ์๊ธฐ์ ์ฒ์ ์ปดํจํฐ๋ฅผ ๊ฒฝํํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ฌธํ์๊ณ , ์ด๋ ํ์ฌ IT ์ฐ์ ์ ์ฑ์ฅ์ ํฐ ๋ฐ๊ฑฐ๋ฆ์ด ๋์์ต๋๋ค. ๐ก x86 ์ํคํ ์ฒ๋? x86 ์ํคํ ์ฒ๋ ์ธํ ์ด ๋ง๋ 8086 ๋ง์ดํฌ๋กํ๋ก์ธ์์์ ์์๋ CPU์ ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ(Instruction Set Architecture, ISA)๋ฅผ ์ด์ผ๊ธฐํจ. ์ฝ๊ฒ ์ด์ผ๊ธฐํ๋ฉด, CPU๊ฐ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์ดํดํ๊ณ ์ฒ๋ฆฌํ ์ ์๋์ง๋ฅผ ์ ์ํ ์ผ์ข ์ โ์ธ์ด ์ฒด๊ณโ. โ 1.1.4. Remote Procedure Call ( RPC ) ์ ๋ฑ์ฅ ์ปดํจํฐ๋ ์ธ๊ฐ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋๋ก ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๊ณ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์์ ์ ์ปดํจํฐ๊ฐ ๋์ ์ฒ๋ฆฌํด์ฃผ๊ธฐ๋ฅผ ๋ฐ๋๋ค๋ฉด, ๋ช ํํ ๋ช ๋ น์ด๋ง ์ ๋ ฅํด์ฃผ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊น๋๋ค. โ๋ฐ๋์ ๋ด ์ปดํจํฐ์์๋ง ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๊น?โ ๋ง์ฝ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฝ์ ๋์ด์, ๋ค๋ฅธ ์ปดํจํฐ์์ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ๋ ๋ด ์ปดํจํฐ์ฒ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ฉด, ํจ์ฌ ๋ ๋ง์ ์ฌ๋๊ณผ ์์คํ ์ด ํจ์จ์ ์ผ๋ก ์์ ์ ์ํํ ์ ์์ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์์์์ ๋ฑ์ฅํ ๊ฐ๋ ์ด ๋ฐ๋ก RPC(Remote Procedure Call)์ ๋๋ค. RPC๋ โ์๊ฒฉ ํ๋ก์์ ํธ์ถโ์ด๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ง ๊ทธ๋๋ก ๋ค๋ฅธ ์ปดํจํฐ์ ์กด์ฌํ๋ ํจ์(ํ๋ก์์ )๋ฅผ ํธ์ถํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด, ๋คํธ์ํฌ๋ฅผ ํตํด ์๊ฒฉ์ ์๋ ํจ์๋ฅผ ๋ง์น ๋ด ์ปดํจํฐ์ ์๋ ํจ์์ฒ๋ผ ๊ฐ๋จํ๊ฒ ํธ์ถํ ์ ์์ต๋๋ค. // ์ผ๋ฐ ํจ์ ํธ์ถ int result = add(3, 5); // ์ค์ ๋ก๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์๊ฒฉ ์๋ฒ์ ์๋ 'add' ํจ์๋ฅผ ํธ์ถ // ํ์ง๋ง ํ๋ก๊ทธ๋๋จธ๋ ๋ก์ปฌ ํธ์ถ์ฒ๋ผ ์ฌ์ฉ RPC๋ ์ด์ฒ๋ผ ๋ณต์กํ ๋คํธ์ํฌ ํต์ ๊ณผ์ ์ ๊ฐ์ถ๊ณ , ํ๋ก๊ทธ๋๋จธ๊ฐ ์ต์ํ ํจ์ ํธ์ถ ํํ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ถ์ํํฉ๋๋ค. ๊ฐ๋ฐ์๋ ํจ์๊ฐ ๋ก์ปฌ์ ์๋์ง ์๊ฒฉ์ ์๋์ง ๊ตฌ๋ถํ์ง ์๊ณ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. RPC๊ฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ค์ฉํ๋ ๊ฒ์ 1980๋ ๋์ ๋๋ค. ํนํ 1984๋ , Sun Microsystems๊ฐ ์ ๋์ค ํ๊ฒฝ์์ ONC RPC(Open Network Computing RPC)๋ฅผ ๊ตฌํํ๋ฉด์ ๋ค์ํ ์์คํ ์ ์ ์ฉ๋๊ธฐ ์์ํ์ต๋๋ค. ์ด ์๊ธฐ์ ๋ฑ์ฅํ ๋ํ์ ์ธ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ฒ์ ๋๋ค. ํด๋ผ์ด์ธํธ(Client): ์์ฒญ(Request)์ ๋ณด๋ด๋ ์ธก. ์๋ฒ(Server): ์์ฒญ์ ๋ฐ์ ์๋ต(Response)์ ์ฒ๋ฆฌํ๋ ์ธก. RPC๋ ์ด ๊ตฌ์กฐ ์์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ด๋ ํต์ ์ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ-์๋ต(request-response) ํจํด์ ๋ฐ๋ฆ ๋๋ค. โ 1.1.5. ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database)์ ๋ฑ์ฅ ์ปดํจํฐ๊ฐ ๋จ์ํ ๊ณ์ฐ์ ๋์ด์ ๋ค์ํ ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด์, ์ฌ๋๋ค์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์๋ ์์๊น?๋ผ๋ ์ง๋ฌธ์ ๋์ง๊ธฐ ์์ํ์ต๋๋ค. ํนํ ๋คํธ์ํฌ ๊ธฐ์ ์ด ๋ฐ์ ํ์ฌ ์ฌ๋ฌ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋๊ณ , ์๊ฒฉ์ผ๋ก ํ๋ก๊ทธ๋จ์ ํธ์ถํ ์ ์๊ฒ ๋์, ํ๋์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋๊ณ ์ฌ๋ฌ ์ฌ๋์ด ๋์์ ์ ๊ทผํ์ฌ ์ฒ๋ฆฌํ๋ ํ๊ฒฝ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ด๋ฌํ ์๋์ ๋ฐฐ๊ฒฝ ์์์ ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (Database System)์ ๋๋ค. 1970๋ ๋, IBM์ ์ฐ๊ตฌ์์ด์๋ E.F. Codd๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํ๋ ํํ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ(Relational Model)์ ์ ์ํฉ๋๋ค. ์ด ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ(ํ๊ณผ ์ด)์ ํํ๋ก ๊ตฌ์ฑํ์ฌ, ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ดํ ์ด๋ฌํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ๋ฐ์ ํ ์์คํ ์ด ๋ฐ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํ ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค. SQL์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ , ์ฝ์ ํ๊ณ , ์์ ํ๋ฉฐ, ์ญ์ ํ ์ ์์ต๋๋ค. IBM์ ์ด ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก 1983๋ , ์ธ๊ณ ์ต์ด์ ์์ฉ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ IBM DB2๋ฅผ ์ถ์ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฅ์ ๋ฌธ์ ์ด์์ต๋๋ค. ๋ํ, SQL(Structured Query Language)์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ธ์ด๋ก, 1986๋ ANSI(๋ฏธ๊ตญํ์คํํ)์ ์ํด ํ์คํ๋ฉ๋๋ค. SQL์ ํ์คํ๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๊ฐ์ ํธํ์ฑ๊ณผ ํต์ผ์ฑ์ ๋์ด๋ ๊ณ๊ธฐ๊ฐ ๋์์ผ๋ฉฐ, ํ์ฌ๊น์ง๋ ๋๋ถ๋ถ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ค ์ธ์ด๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. -- ์: ๊ณ ๊ฐ ํ ์ด๋ธ์์ ์ด๋ฆ์ด 'Hadoop' ์ด๋ผ๋ ๊ณ ๊ฐ์ ์กฐํ SELECT * FROM customers WHERE name = 'Hadoop'; ์ดํ Oracle, MySQL, PostgreSQL ๋ฑ ๋ค์ํ RDBMS๊ฐ ๋ฑ์ฅํ๋ฉด์, ๋๋์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ํ๊ฒฝ์ด ๊ตฌ์ถ๋ฉ๋๋ค. ์ด ๋น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋์จ์ด ์์ฒด์ ์ฑ๋ฅ์ ๋๋ฆฌ๋ ๋ฐฉ์(Scale-Up)์ผ๋ก ์ฒ๋ฆฌ๋์ ํ์ฅํ์ต๋๋ค. CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ๋ฑ์ ์ ๊ทธ๋ ์ด๋ํ๋ ์์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ , ์ผ์ ์ด์์ผ๋ก๋ ํ์ฅ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ๊ทน๋ช ํ์ต๋๋ค. ์ดํ ํ๋ก์ด๋ผ๋ ๋ถ์ฐ ์์คํ ์ ์ฌ์ฉํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋๊ธฐ๋ ํ์์ผ๋ฉฐ, ํ์ฌ๋ ์ค๋ฉ(Sharding) ์ด๋ผ๋ ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ Scale-Out ํํ๋ก ์ฑ๋ฅ์ ๋๋ฆฌ๊ณ ์์ต๋๋ค. โ 1.1.6. 3-Tier Architecture ์ ๋ฑ์ฅ ์ด๊ธฐ์ ์น ์๋น์ค ๊ตฌ์กฐ๋ ๋งค์ฐ ๋จ์ํ์ต๋๋ค. ๋๋ถ๋ถ์ ์์คํ ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋์ ์๋ฒ์์ ์ฒ๋ฆฌํ๋ ๋ชจ๋๋ฆฌ์(Monolithic) ๊ตฌ์กฐ๋ฅผ ๋ฐ๋์ต๋๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ชจ๋ ์์ ์ ํ๋์ ์๋ฒ๊ฐ ์ ๋ดํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ์์ ์๊ท๋ชจ ์์คํ ์์๋ ํจ์จ์ ์ผ ์ ์์ง๋ง, ์๊ฐ์ด ์ง๋๊ณ ์ฌ์ฉ์ ์๊ฐ ๊ธ์ฆํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ํ๊ณ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. โ๏ธ ์ฌ์ฉ์ ์๊ฐ ์ฆ๊ฐํ ์๋ก ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ. โ๏ธ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ ์๋ฒ์ ์ง์ค๋์ด ์์ด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์. โ๏ธ ์ ์ฒด ์์คํ ์ ํ์ฅ์ด ์ด๋ ค์. ํน์ ๊ธฐ๋ฅ๋ง ํ์ฅํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ์ ์ฒด ์๋ฒ๋ฅผ ์ ๊ทธ๋ ์ด๋ํด์ผ ํจ. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก 3-Tier Architecture(3๊ณ์ธต ์ํคํ ์ฒ)์ ๋๋ค. 1990๋ ๋ ์ค๋ฐ, ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ 3-Tier Architecture๊ฐ ๋์ ๋์์ต๋๋ค. ์ด๋ ์์คํ ์ ๊ธฐ๋ฅ๋ณ๋ก ์ธ ๊ฐ์ ๊ณ์ธต์ผ๋ก ๋๋์ด ์ค๊ณํ๋ ๋ฐฉ์์ ๋๋ค. ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์๋๋ฉฐ, ์๋ก ๋ช ํํ ์ฑ ์์ ๊ฐ์ต๋๋ค. โถ 1. Presentation Tier (ํ๋ ์ ํ ์ด์ ๊ณ์ธต) ์ฌ์ฉ์๊ฐ ์ง์ ์ ํ๋ UI ๋ถ๋ถ์ด๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ ์ฑ ๋ฑ์ ํํ๋ก ์ฌ์ฉ์์ ์ํธ์์ฉ์ ํฉ๋๋ค. โถ 2. Application Tier (๋ก์ง ๊ณ์ธต) ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ ํต์ฌ ๊ณ์ธต์ ๋๋ค. โถ 3. Data Tier (๋ฐ์ดํฐ ๊ณ์ธต) ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ณ์ธต์ ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๋์ ํ๋ฉด ๋ค์ํ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ์ฐ์ , ๊ฐ ๊ณ์ธต์ด ๋ด๋นํ๋ ์ญํ ์ด ๋ช ํํ ๋ถ๋ฆฌ๋๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ํจ์ฌ ์์ํด์ง๋๋ค. ์๋ฅผ ๋ค์ด, UI์ ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์ ์ฅ ์์ญ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ด ๋ฌธ์ ๋ฐ์ ์ ๋น ๋ฅด๊ฒ ์์ธ์ ํ์ ํ๊ณ ์์ ํ ์ ์์ต๋๋ค. ๋ํ, ์์คํ ํ์ฅ์ฑ๋ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ํน์ ๊ธฐ๋ฅ์ด๋ ๊ณ์ธต์ ๋ถํ๊ฐ ๋ชฐ๋ฆด ๊ฒฝ์ฐ, ํด๋น ๋ถ๋ถ๋ง ์ ํ์ ์ผ๋ก ํ์ฅํ๊ฑฐ๋ ๋ณด์ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์์คํ ์ ์ฌ๊ตฌ์ฑํ์ง ์์๋ ๋ฉ๋๋ค. ๋ฟ๋ง ์๋๋ผ, ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋์ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ๊ต์ฒดํ ๋ ๋ค๋ฅธ ๊ณ์ธต์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ด์์ ๊ณ์ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, RPC(Remote Procedure Call)๋ ์ ๋ฌธ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (DBMS)๊ณผ์ ์ฐ๊ณ๊ฐ ์ฉ์ดํด์ ธ ๊ณ์ธต ๊ฐ ํต์ ์ด ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ณ , ๋ค์ํ ์ธ๋ถ ์์คํ ๊ณผ์ ํตํฉ๋ ํจ์ฌ ์์ํด์ง๋๋ค. 3-Tier Architecture๋ ์ค๋๋ ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ๊ธฐ๋ณธ์ด ๋์์ผ๋ฉฐ, ์ดํ ๋ฑ์ฅํ๋ N-Tier Architecture, ๋ง์ดํฌ๋ก์๋น์ค(MSA) ์ํคํ ์ฒ์ ๊ธฐ๋ฐ์ด ๋๊ธฐ๋ ํฉ๋๋ค. โ 1.1.7. Web-WAS-DB ๊ตฌ์กฐ์ ๋ฑ์ฅ 3-Tier Architecture๊ฐ ๊ฐ๋ ์ ์ผ๋ก ์ ๋ฆฝ๋ ์ดํ, ์ด๋ฅผ ์ค์ง์ ์ผ๋ก ์น ํ๊ฒฝ์์ ๊ตฌํํ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก Web-WAS-DB ๊ตฌ์กฐ์ ๋๋ค. ์ด ๊ตฌ์กฐ๋ ๊ฐ๊ฐ์ ์ญํ ์ ๋ด๋นํ๋ ์ธ ๊ฐ์ง ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. โถ 1. Web Server(์น ์๋ฒ) ์ฌ์ฉ์์ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์๋ค์ด๋ ๊ณ์ธต์ ๋๋ค. HTML, CSS, JS, ์ด๋ฏธ์ง์ ๊ฐ์ ์ ์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ๋จ์ํ ์์ฒญ์ ์น ์๋ฒ๊ฐ ์ง์ ์๋ต์ ๋ฐํํฉ๋๋ค. ๋ํ์ ์ธ ์น ์๋ฒ๋ก๋ Apache, Nginx ๋ฑ์ด ์์ต๋๋ค. โถ 2. WAS(Web Application Server, ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ) ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ ๊ณ์ธต์ผ๋ก, ๋ก๊ทธ์ธ, ํ์๊ฐ์ , ๋ฐ์ดํฐ ์กฐํ, ๊ฒฐ์ ๋ฑ ๋ณต์กํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. ํ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํฉ๋๋ค. ๋ํ์ ์ธ ์๋ก๋ Tomcat, Spring Boot, JBoss ๋ฑ์ด ์์ต๋๋ค. โถ 3. Database(๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ) ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๊ณ์ธต์ผ๋ก, ์ฌ์ฉ์ ์ ๋ณด, ์ํ ์ ๋ณด, ๋ก๊ทธ ๋ฑ ์์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. MySQL, PostgreSQL, Oracle, MongoDB ๋ฑ์ ์์คํ ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค. ์ค์ ์น ์๋น์ค์์ ๋ฐ์ํ๋ ์์ฒญ์ 90% ์ด์์ ์ ์ ์ธ ์ฝํ ์ธ ์ ๋ํ ์์ฒญ์ ๋๋ค. ๊ณต์ง์ฌํญ, ์ด๋ฏธ์ง, ๊ฒ์๊ธ ๋ชฉ๋ก๊ณผ ๊ฐ์ด ๋ณํ์ง ์๋ ์ ๋ณด๋ฅผ ๋ฐ๋ณตํด์ ์์ฒญํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ ๋๋ค. ์ด๋ฌํ ๋จ์ ์์ฒญ์กฐ์ฐจ WAS์ DB๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ์์์ด ๋ถํ์ํ๊ฒ ๋ญ๋น๋๊ณ , ์๋ต ์๋๋ ๋๋ ค์ง ์ ์์ต๋๋ค. Web-WAS-DB ๊ตฌ์กฐ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ ๊ณ์ธต์ ์ญํ ์ ๋ช ํํ ๋ถ๋ฆฌํ๊ณ ์์ต๋๋ค. ์ ์ ์ธ ์์ฒญ์ ์น ์๋ฒ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฉฐ, WAS๋ ๋ก์ง ์ฒ๋ฆฌ๊ฐ ํ์ํ ์์ฒญ๋ง ๋ด๋นํฉ๋๋ค. DB๋ ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ๋ํ ์์ฃผ ์์ฒญ๋๋ ์ ์ ์๋ต์ ์บ์(Cache)๋ก ๋ฏธ๋ฆฌ ์ ์ฅํด๋๊ณ , ๋์ผํ ์์ฒญ์ด ๋ฐ๋ณต๋ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ์๋ตํ ์ ์๋๋ก ํ์ฌ ์์คํ ์ ์ ์ฒด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๊ตฌ์กฐ๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ๋ชจ๋ ์์ฒญ์ด ๊ฒฐ๊ตญ WAS๋ DB ๊ฐ์ ํน์ ๊ณ์ธต์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์, ํธ๋ํฝ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ์ฌ ์๋ต ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ์ด๊ธฐ์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ Scale-Up ๋ฐฉ์, ์ฆ ์๋ฒ์ ํ๋์จ์ด ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ ค ํ์ง๋ง, ์ ์ฐจ ์ฆ๊ฐํ๋ ํธ๋ํฝ๊ณผ ๋ณต์กํ ์๋น์ค ๊ตฌ์กฐ์๋ ํ๊ณ๊ฐ ์์์ต๋๋ค. ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์์คํ ์ ์ํ ํ์ฅ(Scale-Out) ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ๊ฒ ๋์์ต๋๋ค. WAS๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ์ฌ๋ฌ ์๋ฒ์ ์์ฒญ์ ๋ถ์ฐ์ํค๋ฉฐ MSA ๊ตฌ์กฐ๋ก ์ ์ฐจ ๋ณํํด ๊ฐ์ผ๋ฉฐ, DB๋ ๋ฐ์ดํฐ๋ฅผ ๋๋์ด ์ ์ฅํ๋ ์ค๋ฉ(Sharding)์ด๋ ํ๋ก๊ณผ ๊ฐ์ ๋ถ์ฐ ์์คํ ์ ๋์ ํ์ฌ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํ๋ณดํ๊ฒ ๋์์ต๋๋ค. ๐ 1.2. ๊ธฐ์กด ์์คํ ์ ํ๊ณ์ ์์์ ์ค๋ช ํ ๋ด์ฉ์ฒ๋ผ ์ต์ด์ ์ปดํจํฐ๋ ๋งค์ฐ ๊ฑฐ๋ํ๊ณ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ณผ์ ๋ํ ๋ฒ๊ฑฐ๋กญ๊ณ ์ด๋ ค์ ์ต๋๋ค. ์ดํ ์ปดํจํฐ ๊ธฐ์ ์ ๋ฐ์ ์ ์ด๋ฌํ ๋ฌผ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ํ๋ก๊ทธ๋จ์ ๋ณด๋ค ์ฝ๊ฒ ์์ฑํ๊ณ ์คํํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ์ง์ค๋์์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ ๊ณผ์ ์์์ ๋ฑ์ฅํ ๋ํ์ ์ธ ๊ฐ๋ ์ด ๋ฐ๋ก ์์์ ์ค๋ช ํ ํฐ ๋ ธ์ด๋ง ์ํคํ ์ฒ์ x86 ๊ธฐ๋ฐ์ CPU ์ํคํ ์ฒ์ ๋๋ค. ์ด๋ค ๊ฐ๋ ์ ํตํด ์ปดํจํฐ์ ๊ตฌ์กฐ์ ๋์ ๋ฐฉ์์ด ํ์คํ๋์์ผ๋ฉฐ, ๋ง์ ์์คํ ์ด ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก ๋์ํ๊ฒ ๋์์ต๋๋ค. ์ปดํจํฐ ๊ตฌ์กฐ๊ฐ ํ์คํ๋ ์ดํ์๋ ํ๋์ ์ปดํจํฐ ๋ด๋ถ์์ ๋ ๋น ๋ฅธ CPU๋ก ๊ต์ฒดํ๋ค๊ฑฐ๋, ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ต์ฒดํ๋ ๋ฑ, ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ์, ์ฆ Scale-Up ๋ฐฉ์์ผ๋ก ๋ฐ์ ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. ํ์ง๋ง ์จ๋ผ์ธ ์๋น์ค๊ฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ฐ๋๋ฉด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์์ํ์ต๋๋ค. ์๋น์ค ์ด์ฉ์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ฉด์, ๋จ์ผ ์ปดํจํฐ๋ง์ผ๋ก๋ ๊ธ์ฆํ๋ ํธ๋ํฝ๊ณผ ๋ฐ์ดํฐ ์์ ๊ฐ๋นํ ์ ์๊ฒ ๋์์ต๋๋ค. ํ๋์จ์ด๋ ์๊ฐ์ด ์ง๋๋ฉด์ ๊พธ์คํ ๋ฐ์ ํด์์ง๋ง, ๊ทธ ๋ฐ์ ์๋๋ ์ ํ์ ์ด์์ต๋๋ค. ๋ฐ๋ฉด ์ฌ์ฉ์ ์, ํธ๋ํฝ, ๋ฐ์ดํฐ๋์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฐ๊ฒฝ์์ ๋ฌด์ด์ ๋ฒ์น์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค. ๐ก ๋ฌด์ด์ ๋ฒ์น CPU ํธ๋์ง์คํฐ ์๋ ์ฝ 18~24๊ฐ์๋ง๋ค ๋ ๋ฐฐ์ฉ ์ฆ๊ฐ โ ๊ทธ๋ฌ๋ ์ด์กฐ์ฐจ๋ ์ค๋๋ ์ ์๊ตฌ์ฌํญ์ ๊ฐ๋นํ๊ธฐ์๋ ํ๊ณ๊ฐ ๋ฐ์ํ์์. ์ด์ ๋ฌธ์ ํด๊ฒฐ์ ์ค์ฌ์ ํ๋์จ์ด์์ ์ํํธ์จ์ด๋ก ๋์ด๊ฐ ์๋ฐ์ ์๊ฒ ๋์์ต๋๋ค. ๊ธฐ์กด์ Scale-Up ๋ฐฉ์์ ๋ ์ข์ ํ๋์จ์ด๋ฅผ ๋์ ํจ์ผ๋ก์จ ์ฑ๋ฅ์ ๋์ด๋ ์ ๊ทผ์ด์์ง๋ง, ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋ค๋ฉฐ ํ์ฅ์ฑ์๋ ๋ถ๋ช ํ ํ๊ณ๊ฐ ์กด์ฌํ์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ค์ ๋ณด๋ค ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ์์ธ Scale-Out ์ ๋ต์ ๊ณ ๋ฏผํ๊ฒ ๋์์ต๋๋ค. Scale-Out์ ์ฌ๋ฌ ๋์ ์์คํ ์ ์ฐ๊ฒฐํด ์ ์ฒด ์ฑ๋ฅ์ ๋์ด๋ ์ ๋ต์ ๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ๊ตฌํํ๋ ค๋ฉด ๋ฐ๋์ ์์คํ ๊ฐ ์ํ๋ฅผ ๊ณต์ ํ์ง ์์์ผ ํ๋ค๋ ์ค์ํ ์กฐ๊ฑด์ด ์์์ต๋๋ค. ์ํ๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ฉด ์์์ด ๋ง์ด ์๋ชจ๋๊ฑฐ๋, ๊ธฐ์ ์ ์ผ๋ก ๋ถํ์ํ ์ ์ฝ์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋จํธ์ ์ผ๋ก ์ดํด๋ณด๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ(Application Server)๋ ๋ก๋ ๋ฐธ๋ฐ์(Load Balancer)๋ฅผ ํตํด ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๊ณ , ๋ณ๋์ ์ํ๋ฅผ ๊ฐ์ง์ง ์๋๋ก ์ค๊ณํจ์ผ๋ก์จ Scale-Out ํ์ฅ์ด ๊ฐ๋ฅํ์ต๋๋ค. ํ์ง๋ง ์จ๋ผ์ธ ์๋น์ค์ ํต์ฌ์ด๋ผ ํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database)๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ๋ฏ๋ก, ์ฝ๊ฒ Scale-Out์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ํนํ Sharding ๊ธฐ๋ฅ์ด ๋์ ๋๊ธฐ ์ด์ ๊น์ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฅ์ฑ์ ํฐ ์ ์ฝ์ด ์กด์ฌํ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ฌ์ผ๋ก ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ํ์ฅํ๋ฉด์๋, ์ํ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ณต์ ํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์๊ตฌ๋์์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ์ ๋ฐ๋ผ ๋ถ์ฐ ์์คํ ์ ํ์์ฑ์ด ์ ์ฐจ ๋ถ๊ฐ๋๊ธฐ ์์ํ์ต๋๋ค. ๋ถ์ฐ ์์คํ ์ ๊ฐ ์๋ฒ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉด์๋, ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค. ์ด์ ๊ฐ์ ํ์๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ๋ค์ํ ๋ถ์ฐ ์์คํ ๊ธฐ์ ๋ค์ด ๋ฐ์ ํ์์ผ๋ฉฐ, ์ด๋ ์ค๋๋ ๋๊ท๋ชจ ์จ๋ผ์ธ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์์ด ํ์์ ์ธ ์ํคํ ์ฒ๋ก ์๋ฆฌ ์ก๊ฒ ๋์์ต๋๋ค. โ ๐ 2. ๋ถ์ฐ ์์คํ ์ ๋ฑ์ฅ ๐ 2.1. ๋ถ์ฐ ์์คํ ์ด๋ ๋ถ์ฐ ์์คํ ์ด๋ ์ฌ๋ฌ ๋์ ์ปดํจํฐ(๋ ธ๋)๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด, ๋ง์น ํ๋์ ์์คํ ์ฒ๋ผ ๋์ํ๋๋ก ๊ตฌ์ฑ๋ ์์คํ ์ ๋งํฉ๋๋ค. ์ด๋ฌํ ์์คํ ์ ๊ฐ ๋ ธ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํ๋ฉด์๋, ์ ์ฒด์ ์ผ๋ก๋ ํ๋์ ํตํฉ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ฆ, ๋จ์ผ ์์คํ ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ , ํ์ฅ์ฑ๊ณผ ์ ๋ขฐ์ฑ, ๊ณ ๊ฐ์ฉ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ํคํ ์ฒ์ ๋๋ค. ์๋ฒ, ์ ์ฅ์, ๋คํธ์ํฌ ๋ฑ ๋ค์ํ ์์์ด ์ฌ๋ฌ ์์น์ ๋ถ์ฐ๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ฌ์ฉ์์๊ฒ๋ ํ๋์ ์ผ๊ด๋ ์์คํ ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด ๋ถ์ฐ ์์คํ ์ ํต์ฌ์ ๋๋ค. ๋ถ์ฐ ์์คํ ์ ํ๋์ ๋๊ท๋ชจ ์จ๋ผ์ธ ์๋น์ค, ํด๋ผ์ฐ๋ ์ปดํจํ , ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์์ ์ธ ๊ธฐ๋ฐ ๊ธฐ์ ๋ก ํ์ฉ๋๊ณ ์์ต๋๋ค. ๐ 2.2. ๋ถ์ฐ ์์คํ ์ ๊ธฐ๋ณธ์ ์ธ ํน์ง ๋ถ์ฐ ์์คํ ์ ๋ฐ๋์ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ถ์ฐ ์์คํ ๋ค์ด ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋์ง ๊ณ ๋ฏผํ๋ฉด์ ๋ณด๋ฉด ์ข์ต๋๋ค. โ 2.2.1. Concurrency ๋์์ฑ์ ์๋ฏธํฉ๋๋ค. ํด๋ผ์ด์ธํธ์ ์์ ์์ฒญ์ ์ฌ๋ฌ ๋์ ๋ถ์ฐ๋ ์ปดํจํฐ์์ ๋์์ ์ํ ํ ์ ์์ด์ผ ํ๋ฉฐ, ๋์ ์คํ ์์์ ๋๋ ค์ ์ฒ๋ฆฌ๋์ ๋๋ฆด ์ ์๋ค๋ ๊ฐ์ ์ ์๋ฏธํฉ๋๋ค. โ 2.2.2. No Global Clock ์์คํ ์ ๊ฐ ๋ถ๋ถ์ด ๋น๋๊ธฐ์์ผ๋ก ๋์ํจ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ์ด๋ค ๋ถ๋ถ์ ์ํ ๋๋ฌธ์ ๋ค๋ฅธ๊ณณ์์ Lock ์ด ๊ฑธ๋ฆฌ๊ฑฐ๋ ๋ณ๋ชฉํ์์ด ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. โ 2.2.3.Independent Failure ์ฌ๋ฌ ์์คํ ์ค ํ๋๊ฐ ๋ค์ด๋๋๋ผ๋ ๋๋จธ์ง ์์คํ ์ด ์ ์์ ์ผ๋ก ์๋ํ์ฌ, ์์ ์ ์ํ ํ ์ ์์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ฝ๊ฒ ํ์ด์ ์ด์ผ๊ธฐํ๋ฉด, ์์คํ ํ๋๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ํ์ฌ, ์ ์ฒด ์์คํ ์ ์ํฅ์ด ๊ฐ์๋ ์๋๋ค๋ ์ด์ผ๊ธฐ์ ๋๋ค. ๐ 2.3. ๋ถ์ฐ ์์คํ ์ด๋ก โ 2.3.1 BASE ์ด๋ก ํ๋์ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๋ณด๋ค๋ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ด ๋ ์ค์ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ ์ด ๋ฐ๋ก BASE ์์น์ ๋๋ค. BASE๋ ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ ACID ์์น๊ณผ ๋๋น๋๋ ๊ฐ๋ ์ผ๋ก, ํนํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ค๊ณ ์ฒ ํ์ ๋๋ค. 1๏ธโฃ BASE์ ์์ BASE๋ ๋ค์์ ์ธ ๊ฐ์ง ํต์ฌ ์์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. โถ Basically Available (๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฉ์ฑ) ์์คํ ์ ์ฒด๊ฐ ์์ ํ ์ค๋จ๋๋ ์ผ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ผ๋ถ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์ฒด ์์คํ ์ ๊ณ์ ๋์ํ๋ฉฐ, ์ต์ํ์ ๊ธฐ๋ฅ์ ์ ์ง๋ฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ์ํํ๋ฉฐ, ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ๋ถ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค. โถ Soft State (์ ์ฐํ ์ํ) ๋ฐ์ดํฐ์ ์ํ๊ฐ ํญ์ ์ผ๊ด์ ์ด์ง ์์ ์ ์์์ ์๋ฏธํฉ๋๋ค. ํน์ ์์ ์์ ์กฐํํ ๋ฐ์ดํฐ์ ์ดํ ์์ ์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ์ด์ ๋ํ ์ผ๊ด์ฑ ์ ์ง ์ฑ ์์ ์์คํ ์ด ์๋ ์ฌ์ฉ์ ๋๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Hadoop์์๋ ๋ฐ์ดํฐ๋ฅผ Writeํ ์งํ ๋ณต์ ๊ฐ 0.0001์ด๋ง์ ๋์์ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์, ๋ณต์ ๊ฐ ์๋ฃ๋๊ธฐ ์ ์ ์์ ์์๋ ์ผ๋ถ ๋ ธ๋์ ์ต์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ ์ ์์ต๋๋ค. โถ Eventually Consistent (์ต์ข ์ ์ธ ์ผ๊ด์ฑ) ๋ชจ๋ ๋ ธ๋๊ฐ ์ฆ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง์ง๋ ์์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด ๊ฒฐ๊ตญ ์ผ๊ด๋ ์ํ๋ก ์๋ ดํ๊ฒ ๋ฉ๋๋ค. ์ฝ๊ฐ์ ์ง์ฐ์ ์์ ์ ์์ผ๋, ๋ฐ์ดํฐ๋ ๊ฒฐ๊ตญ ์ ์ฅ๋๊ณ ์กฐํ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค. ์์ Hadoop ์์๋ฅผ ์ด์ด๋ณด๋ฉด, Write์ ๋์์ ๋ณต์ ๊ฐ ์ด๋ฃจ์ด์ง์ง๋ ์์ง๋ง, ๋ด๋ถ ์ ์ฑ ์ ๋ฐ๋ผ ๋ณต์ ๊ฐ ์๋ฃ๋๋ฉฐ, ๊ฒฐ๊ตญ ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. 2๏ธโฃ BASE์ ํน์ง BASE๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ณด์ฅํ๋ ACID ์์น๊ณผ๋ ์ ๋ฐ๋์ ๋ฐฉํฅ์ ์งํฅํฉ๋๋ค. ACID๋ ํธ๋์ญ์ ์ ์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ์ ๊ฐ์กฐํ๋ฉฐ, ์ํ ์์คํ ๊ณผ ๊ฐ์ด ์ ํฉ์ฑ์ด ์ค์ํ ์ ๋ฌด์ ์ ํฉํฉ๋๋ค. ๋ฐ๋ฉด BASE๋ ์ฆ๊ฐ์ ์ธ ์ผ๊ด์ฑ(immediate consistency)์ ํฌ๊ธฐํ๊ณ , ๋์ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ, ํ์ฅ์ฑ์ ์ถ๊ตฌํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก BASE๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฐ์ ์ํ๋ ์์คํ , ์๋ฅผ ๋ค์ด SNS, ์ค์๊ฐ ๊ด๊ณ ์์คํ , ๋๊ท๋ชจ ๋ก๊ทธ ๋ถ์ ํ๋ซํผ ๋ฑ์ ์ ํฉํ ๋ฐฉ์์ ๋๋ค. 3๏ธโฃ BASE์ ์ฌ๋ก Facebook ๊ด๊ณ ํ๋ซํผ์ ๋ฆฌํฌํธ ์กฐํ ์ฌ๋ก๋ฅผ ํตํด BASE ์์น์ ์ดํดํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๊ด๊ณ ๋ฆฌํฌํธ๋ฅผ ์กฐํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๐ก ์์ธ ์ง์ญ ๋ ธ์ถ๋ ๊ด๊ณ ์ด 10,000 ๊ฑด ๊ทธ ์ค, 1,000 ๊ฑด์ด ํ๊ฒํ ๋์๊ณ , ์ด ์ค ๋จ์ฑ์ 100 ๋ช ๊ทธ๋ฌ๋ 10๋ถ ํ ๋ค์ ์กฐํํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์กฐ๊ธ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๐ก ์์ธ ์ง์ญ ๋ ธ์ถ๋ ๊ด๊ณ ์ด 10,000 ๊ฑด ๋์ผ ๊ทธ ์ค, 1,060 ๊ฑด์ด ํ๊ฒํ ๋์๊ณ , ์ด ์ค ๋จ์ฑ์ 102 ๋ช ์ผ๋ก ๋์ด๋จ ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง์ ์ผ๋ก ์๋ ดํ๊ณ ์๋ค๋ ์ฌ์ค์ ๋ณด์ฌ์ค๋๋ค. ์ฆ, ์ฒ์์๋ ์์ ํ ์ผ๊ด์ฑ์ด ์๋๋ผ๋ ์๊ฐ์ด ์ง๋๋ฉด ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์ ํํ ๋ฐ์๋๋ค๋ BASE ์์น์ Eventually Consistent๋ฅผ ๋ฐ์ํ ์์์ ๋๋ค. ๋ง์ผํฐ๋ ์ฒ์ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ธ์ถ : ํ๊ฒํ : ๋จ์ = 100 : 10 : 1์ด๋ผ๋ ์ฑ๊ณผ๋ฅผ ์ธก์ ํ๊ณ ์ ๋ต์ ์๋ฆฝํฉ๋๋ค. ์ดํ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋๋๋ผ๋, ์ฌ์ฉ์๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ๋ต์ ์ ์ฐํ๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. โ 2.3.2 CAP ์ด๋ก ๋ถ์ฐ ์์คํ ์ ์ค๊ณํ๋ค ๋ณด๋ฉด ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ ๊ฐ๋ ์ด ์์ต๋๋ค. ๋ฐ๋ก CAP ์ ๋ฆฌ(CAP Theorem)์ ๋๋ค. ์ด ์ด๋ก ์ ๋ถ์ฐ ์์คํ ์์ ๋์์ ์ถฉ์กฑ์ํค๊ธฐ ์ด๋ ค์ด ์ธ ๊ฐ์ง ์์ฑ์ ์ ์ํ๋ฉฐ, ์ค์ ์์คํ ์ค๊ณ ์ ๋ฌด์์ ์ ํํ๊ณ ์ด๋ค ์์ฑ์ ํฌ๊ธฐํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ์ค์ด ๋ฉ๋๋ค. ์ถ์ฒ : CAP Image ์ถ์ฒ 1๏ธโฃ CAP์ ์ธ ๊ฐ์ง ์์ CAP์ ์๋์ ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. โถ Consistency (์ผ๊ด์ฑ) ๋ชจ๋ ๋ ธ๋๊ฐ ํญ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๋๋ค. ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๋์ผํ ์์ฒญ์ ํ๋๋ผ๋ ๊ฐ์ ์๋ต์ ๋ฐ์์ผ ํ๋ฉฐ, ์ด๋ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ธ ์์ฑ์ ๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์ผ๊ด์ฑ์ ACID ์์น์์์ C(Consistency)์๋ ๋ค๋ฆ ๋๋ค. ACID์ ์ผ๊ด์ฑ์ ํธ๋์ญ์ ์ ๋ฌด๊ฒฐ์ฑ์ ์๋ฏธํ๋ ๋ฐ๋ฉด, CAP์ ์ผ๊ด์ฑ์ ๋ถ์ฐ๋ ์์คํ ๋ด ๋ชจ๋ ๋ ธ๋ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์๋ฏธํฉ๋๋ค. โถ Availability (๊ฐ์ฉ์ฑ) ์์คํ ์ ์ผ๋ถ ๊ตฌ์ฑ ์์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์ฒด ์๋น์ค๋ ์ค๋จ๋์ง ์๊ณ ์๋ต์ด ๊ฐ๋ฅํด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์ธ์ ์ด๋ค ์์ฒญ์ ํ๋๋ผ๋ ์์คํ ์ ๋ฐ๋์ ์๋ต์ ๋ฐํํด์ผ ํฉ๋๋ค. โถ Partition Tolerance (๋ถํ ๋ด์ฑ) ๋ ธ๋ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ๋จ์ ๋๋๋ผ๋ ์์คํ ์ด ๊ณ์ ์๋ํ ์ ์์ด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๋๋ค. ๋ถ์ฐ ์์คํ ์์๋ ๋คํธ์ํฌ ์ฅ์ ๊ฐ ๋ถ๊ฐํผํ๊ฒ ๋ฐ์ํ๋ฏ๋ก, ์ด๋ฅผ ๊ฒฌ๋ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๋ ๊ฒ์ด ํ์์ ๋๋ค. โ CAP ์ ๋ฆฌ์ ํต์ฌ: ์ธ ๊ฐ์ง ์ค ๋ ๊ฐ์ง๋ง ์ ํํ ์ ์์. ์ด๋ก ์ ์ผ๋ก ํ๋์ ์์คํ ์ด ์ธ ๊ฐ์ง ์์ฑ์ ๋ชจ๋ ์๋ฒฝํ ์ถฉ์กฑ์ํค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ ํจ. ํ์ค์ ์ผ๋ก๋ ๋๋ถ๋ถ Availability๋ฅผ ํ๋ณดํด์ผ ํ๋ฏ๋ก, CA, AP ์ค์์ ์ ํ. 2๏ธโฃ CA ์์คํ CA(์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ) ์์คํ ์ ๋คํธ์ํฌ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ์ ์ ํ์, ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ชจ๋ ๋ง์กฑ์ํค๋ ์์คํ ์ ๋๋ค. ํ์ง๋ง ์ด ์์คํ ์ Partition Tolerance, ์ฆ ๋คํธ์ํฌ ๋ถํ ์ํฉ์์๋ ์ ์์ ์ผ๋ก ๋์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ CA ์์คํ ์ ์ฃผ๋ก ๋จ์ผ ๋ ธ๋ ๋๋ ํํฐ์ ์ด ๋ฐ์ํ์ง ์๋ ํ๊ฒฝ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, CA๋ ๋ถ์ฐ์์คํ ์์ ์ ํํ ์๋ ์์ต๋๋ค. ( ์ ํต์ ์ธ RDBMS, ๋จ์ผ ๋ ธ๋์์์ MongoDB ๋ฑ ) 3๏ธโฃ AP ์์คํ AP(๊ฐ์ฉ์ฑ๊ณผ ๋ถํ ๋ด์ฑ) ์์คํ ์ ๋ง์ฝ, ๋ถ์ฐ ํ๊ฒฝ์์ ๋ ๋ ธ๋ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์ค๋จ๋์์ ๋, ๋ฐ์ดํฐ๊ฐ ์ผ๊ด๋๋๋ก ์๋ฒฝํ ๋ณด์ฅํ ์๋ ์์์ง๋ผ๋ ๋ชจ๋ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๊ณ ์์คํ ์ ๊ณ์ ๋์ํ ์ ์๊ฒ ํด์ผํ๋ ์์คํ ์ ๋๋ค. ๋ชจ๋ ๋ ธ๋๊ฐ ์์ฒญ์ ์๋ตํ๊ธฐ ๋๋ฌธ์ ์์คํ ์ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์์ ์์คํ ์ ๊ณ์ ๋์ํ๋ฏ๋ก Partition Tolerance๋ ํจ๊ป ๋ณด์ฅํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ ์ผ๊ด๋์ง ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ด์ฉ์ ์์ฒญ์ผ์ง๋ผ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์, ์๋ต์ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ํญ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ( Cassandra, HBase, Druid ๋ฑ ) 4๏ธโฃ CP ์์คํ CP ์์คํ ์ ๋คํธ์ํฌ์ ๋ฌธ์ ๊ฐ ์๊ฒจ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ์ด ๋จ์ ๋๋๋ผ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ ์์คํ ์ด ๊ณ์ ๋์ํ ์ ์๋๋ก ์ค๊ณ๋ ๊ตฌ์กฐ์ ๋๋ค. ์ด๋ฌํ ์์คํ ์ ๊ฐ์ฉ์ฑ์ ์ผ๋ถ ํฌ๊ธฐํ๋ ๋์ , ๋ฐ์ดํฐ๊ฐ ํญ์ ์ ํํ๊ฒ ์ ์ง๋๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, A ๋ ธ๋์์ ์ฐ๊ธฐ ์์ฒญ์ ๋ง์๋ฒ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ฐ์ฉ์ฑ์ ๋ฎ์์ง์ง๋ง, ์ผ๊ด์ฑ๊ณผ ๋ถํ ํ์ฉ์ฑ์ ๋ณด์ฅ๋ฉ๋๋ค. ๋คํธ์ํฌ๊ฐ ๋ณต๊ตฌ๋ ํ์๋ ๊ฐ ๋ ธ๋ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ๋ฐ๋์ ์ํ๋์ด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฒด ์์คํ ์ ์ผ๊ด์ฑ์ ํ๋ณตํ๊ฒ ๋ฉ๋๋ค. MongoDB๋ ๊ธฐ๋ณธ์ ์ผ๋ก Primary ๋ ธ๋์์ ๋ชจ๋ ์ฐ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ดํ Secondary ๋ ธ๋๋ก ๋ณต์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ๋จ, ๊ฐ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด Secondary ๋ ธ๋๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ํ์ฉํ๋ฉด, ๋ณต์ ์ง์ฐ์ผ๋ก ์ธํด ์ผ๊ด์ฑ์ด ์ฝํด์ง ์ ์์ต๋๋ค 5๏ธโฃ CAP ์ด๋ก ์ ํ๊ณ CAP ์ด๋ก ์ ๋ถ์ฐ ์์คํ ์์ Consistency(์ผ๊ด์ฑ), Availability(๊ฐ์ฉ์ฑ), Partition Tolerance(๋ถํ ํ์ฉ์ฑ) ์ค ๋ ๊ฐ์ง๋ง ๋ณด์ฅํ ์ ์๋ค๋ ์ด๋ก ์ ๋๋ค. ํ์ง๋ง ํ์ค์ ์ผ๋ก๋ ์๋ฒฝํ CP ๋๋ ์๋ฒฝํ AP ์์คํ ์ด ์กด์ฌํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ฒซ ์งธ๋ก, ์๋ฒฝํ CP ์์คํ ์ ์ด์์ ์ผ ๋ฟ์ ๋๋ค. ์๋ฒฝํ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ CP ์์คํ ์ ํ๋์ ํธ๋์ญ์ ์ด ๋ชจ๋ ๋ ธ๋์ ๋ณต์ ๋ ํ์์ผ ์๋ฃ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ง๋ง, ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ํฌ์ํด์ผ ํฉ๋๋ค. ๋ง์ฝ ์ผ๋ถ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด, ํธ๋์ญ์ ์ ๋ฌด์กฐ๊ฑด ์คํจํ๊ฒ ๋ฉ๋๋ค. ๋ํ ๋ ธ๋ ์๊ฐ ์ฆ๊ฐํ ์๋ก ์ง์ฐ ์๊ฐ๋ ๊ธธ์ด์ง๊ฒ ๋ฉ๋๋ค. ์ด์ฒ๋ผ ๊ฐํ ์ผ๊ด์ฑ์ ์ถ๊ตฌํ๋ค ๋ณด๋ฉด, ์คํ๋ ค ๋ถ์ฐ ์์คํ ์ ์ฌ์ฉํ ์ด์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ๋ ์งธ๋ก, ์๋ฒฝํ AP ์์คํ ์ญ์ ํ๊ณ๊ฐ ์์ต๋๋ค. ์๋ฒฝํ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ AP ์์คํ ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์ด๋ค ์ํฉ์์๋ ์๋ต์ ๋ณด์ฅํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ๋ ธ๋๊ฐ ๋คํธ์ํฌ ๋ถํ ๋ก ์ธํด ๊ณ ๋ฆฝ๋ ์ํฉ์ ์๊ฐํด๋ด ์๋ค. ๊ณ ๋ฆฝ๋ ๋ ธ๋๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์์ผ๋ฏ๋ก ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ด ๋ ธ๋๊ฐ ๊ณ์ํด์ ์๋ตํ๋ค๋ฉด, ์ผ์์ ์ผ๋ก๋ ์๋ฒฝํ ๊ฐ์ฉ์ฑ์ ๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ํ์ง๋ง ์ด๋ฐ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์๋ ์ผ๊ด์ฑ์ด ๊นจ์ง ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ณด๊ฒ ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ์์ฉ ์์คํ ์์๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์ฆ, ์ด ์์์ Trade Off ๊ด๊ณ๋ฅผ ๋ช ํํ ์ดํดํ๊ณ , ๊ท ํ์ ๋ง์ถ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค. ์๋ฒฝํ CP ๋๋ AP๋ ํ์ค์ ์ธ ์ค๊ณ๊ฐ ์๋๋๋ค. ๋คํธ์ํฌ ๋ถํ (Partition)์ ์ธ์ ๋ ์ง ๋ฐ์ํ ์ ์๋ค๋ ์ ์ ๋ฅผ ๊ฐ์ง๊ณ , CP์ AP ์ฌ์ด์์ ๊ท ํ์ ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ง์ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ค์ ๋ก AP ์ชฝ์ ๋น์ค์ ๋๊ณ ์ค๊ณ๋๊ณ ์์ผ๋ฉฐ, ์์คํ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ํธ๋ ์ด๋์คํ๊ฐ ํ์ํฉ๋๋ค. ๊ฐํ ์ผ๊ด์ฑ์ ์ถ๊ตฌํ ์๋ก Strong, ์ฝํ ์ผ๊ด์ฑ์ ์ถ๊ตฌํ ์๋ก Weakํ๋ค๊ณ ํํํฉ๋๋ค. ๋จ, ๋ง์ ๋ถ์ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ AP ์ชฝ์ ๋ ๋ง์ ๋น์ค์ ๋ก๋๋ค. ์ถ์ฒ : CP ์ AP โ 2.3.1 PACELC ์ด๋ก ์ถ์ฒ : PACELC ์ด๋ก CAP ์ด๋ก ์ ํ๊ณ์ ๋ฐ๋ผ ์ค์ ์ด์์ ๋ฐ์ํ ์ด๋ก ์ ๋๋ค. ๋ถ์ฐ๋ ํ๊ฒฝ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ(Partition) ๊ฒฝ์ฐ, ๊ฐ์ฉ์ฑ(Availability)๊ณผ ์ผ๊ด์ฑ(Consistency)์ ๊ณ ๋ คํด์ผํ๊ณ ์ ์ ์ํฉ์ ๊ฒฝ์ฐ(Else), ์ง์ฐ์๊ฐ(Latency)๊ณผ ์ผ๊ด์ฑ(Consistency)๋ฅผ ๊ณ ๋ คํด์ผํ๋ค๋ ์ด๋ก ์ ๋๋ค. ์ข ํ์ด์ ์ค๋ช ํ๋ฉด, ์ฅ์ ์ํฉ์์๋(Partition), ์ผ๋ถ ๋ ธ๋์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด๋๊ฒ ๋ฐ์ํ ์ ์๋ค๋ฉด, ์์ ๋ฐ์ ์์ฒด๋ฅผ ์คํจํ๊ฒ ๋ง๋ค์ด ์ผ๊ด์ฑ์ ๋ณด์ฅํด์ผ ํฉ๋๋ค(Consistency). ๋๋, ์ ๊ทผ ๊ฐ๋ฅํ ๋ ธ๋์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ์ฌ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ ์๋ ์์ต๋๋ค(Availability). ์ ์ ์ํฉ์์๋(Else), ๋ชจ๋ ๋ ธ๋์ ์ผ๊ด์ฑ ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๊ณ ์ง์ฐ ์๊ฐ์ด ๋์ด๋๋ ๊ฒ์ ๊ฐ์ํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค(Consistency). ๋ฐ๋๋ก, ๋น ๋ฅด๊ฒ ์๋ตํ๊ธฐ ์ํด ์ง์ฐ ์๊ฐ์ ์ค์ด๊ณ ์ผ๊ด์ฑ์ ์ผ๋ถ ํฌ๊ธฐํ์ฌ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ๋ณด์ฅํ ์๋ ์์ต๋๋ค(Latency). ์ด ์์์ ์กฐํฉ์ ํ๋ ๊ฒ์ ๋๋ค. ์ฅ์ ์ํฉ ์ ์ ์ํฉ ์ค๋ช P + A (์ฅ์ ์ํฉ + ๊ฐ์ฉ์ฑ) E + L (์ ์ ์ํฉ + ์ง์ฐ ์๊ฐ) ์ฅ์ ์ํฉ์์๋ ๊ฐ์ฉ ๋ ธ๋๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ ์ ์ํฉ์์๋ ์ง์ฐ ์๊ฐ์ ์ต์ ํํ๋ ๊ฒ์ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ๋ ์์คํ . P + A (์ฅ์ ์ํฉ + ๊ฐ์ฉ์ฑ) E + C (์ ์ ์ํฉ + ์ผ๊ด์ฑ) ์ฅ์ ์ํฉ์์๋ ๊ฐ์ฉ ๋ ธ๋๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ ์ ์ํฉ์์๋ ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํ๋๋ผ๋ ์ผ๊ด์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฅํ๋ ์์คํ . P + C (์ฅ์ ์ํฉ + ์ผ๊ด์ฑ) E + L (์ ์ ์ํฉ + ์ง์ฐ ์๊ฐ) ์ฅ์ ์ํฉ์์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ , ์ ์ ์ํฉ์์๋ ์ง์ฐ ์๊ฐ์ ์ต์ ํํ๋ ๊ฒ์ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ๋ ์์คํ . P + C (์ฅ์ ์ํฉ + ์ผ๊ด์ฑ) E + C (์ ์ ์ํฉ + ์ผ๊ด์ฑ) ์ฅ์ ์ํฉ์์๋, ์ ์ ์ํฉ์์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์์คํ . ํด๋น ํ๋ฅผ ์กฐ๊ธ ๋ ํ์ด์ ์ค๋ช ํด๋ณด๊ณ์ต๋๋ค. PA/EL ์ฅ์ ์ํฉ์์ ์กฐ๊ธ ๋๋ ค์ง ์ ์์ง๋ง, ์ข ๋ฉ๋ฆฌ์๋ ๊ฐ์ฉ ๋ ธ๋๋ง์ผ๋ก๋ ์ด๋ป๊ฒ๋ ์๋น์ค๋ฅผ ๊ณ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ผ๊ด์ฑ์ ๊นจ์ง ์ ์์ต๋๋ค. ์ ์์ํฉ์์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ์์ ๋น ๋ฅธ ์๋ต์ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค. ๋จ, ์์ง ๋ชจ๋ ๋ถ์ฐ ์์คํ ์ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ต์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง ์์ ์ ์์ต๋๋ค. PA/EC ์ฅ์ ์ํฉ์์ ์กฐ๊ธ ๋๋ ค์ง ์ ์์ง๋ง, ์ข ๋ฉ๋ฆฌ์๋ ๊ฐ์ฉ ๋ ธ๋๋ง์ผ๋ก๋ ์ด๋ป๊ฒ๋ ์๋น์ค๋ฅผ ๊ณ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ผ๊ด์ฑ์ ๊นจ์ง ์ ์์ต๋๋ค. ์ ์์ํฉ์์๋ ๋ฐ์ดํฐ ๋๊ธฐํ๋ก ์กฐ๊ธ ๋๋ฆด ์ ์์ง๋ง, ์ผ๊ด์ฑ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ์ ์์ต๋๋ค. PC/EL ์ฅ์ ์ํฉ์์๋ ๋จ์ ๊ฐ์ฉ ๋ ธ๋ ์์์ ์ผ๊ด์ฑ์ ์ต๋ํ ์ ์งํ๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋จ, ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด ํธ๋์ญ์ ์ ๊ฑฐ์ ํ ์๋ ์์ผ๋ฉฐ, ์ฅ์ ์๋ฒ๊ฐ ๋ณต๊ตฌ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์์ต๋๋ค. ์ ์์ํฉ์์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ์์ ๋น ๋ฅธ ์๋ต์ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค. ๋จ, ์์ง ๋ชจ๋ ๋ถ์ฐ ์์คํ ์ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ต์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง ์์ ์ ์์ต๋๋ค. PC/EA ์ฅ์ ์ํฉ์์๋ ๋จ์ ๊ฐ์ฉ ๋ ธ๋ ์์์ ์ผ๊ด์ฑ์ ์ต๋ํ ์ ์งํ๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋จ, ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด ํธ๋์ญ์ ์ ๊ฑฐ์ ํ ์๋ ์์ผ๋ฉฐ, ์ฅ์ ์๋ฒ๊ฐ ๋ณต๊ตฌ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ์๋ ์์ต๋๋ค. ์ ์์ํฉ์์๋ ๋ฐ์ดํฐ ๋๊ธฐํ๋ก ์กฐ๊ธ ๋๋ฆด ์ ์์ง๋ง, ์ผ๊ด์ฑ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ์ ์์ต๋๋ค. ์์๋ฅผ ๋ค๋ฉด, MongoDB๋ PA/EC ์์คํ ์ ๋๋ค. ๋ถ์ฐ ํ๊ฒฝ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฐ๊ธฐ๋ฅผ ์ค๋จํ๊ณ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ์ ์ ์ํฉ์์๋ Secondary ๋ฉค๋ฒ์ Primary ๋ฉค๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๊ธฐ์, ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฐ๊ธฐ๊ฐ ์ค๋จ๋๋ ๊ฒ์ ์กฐ๊ธ ๋ ์ค๋ช ํ์๋ฉด mongoDB์ automatic failover ๋๋ฌธ. โelectionTimeoutMillisโ ์ด๋ผ๋ ์ค์ ๊ฐ๋งํผ timeout์ ์ ์ฉํด, ์ด timeout ์๊ฐ ๋ด์ Primary ๋ ธ๋๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ์๊ณผ ์ํตํ์ง ์์ผ๋ฉด ํด๋ฌ์คํฐ๋ ๊ฐ์ง๊ณ ์๋ Secondary ๋ ธ๋ ์ค ํ๋๋ฅผ Primary ๋ ธ๋๋ก ๋ง๋ ๋ค. Secondary ๋ ธ๋ ์ค ํ๋๋ฅผ Primary ๋ ธ๋๋ก ๋ง๋๋ election ๊ณผ์ ์ค์๋ ์ฐ๊ธฐ ์์ ์ด ์ค๋จ๋๋ค. ๋ ๋ค๋ฅธ ์์๋ก๋ Cassandra๋ DynamoDB๋ PA/EL ์์คํ ์ด๋ผ๋๊ฒ ์์ต๋๋ค. ์ฅ์ ์ํฉ์์๋(P) ์ ์์ธ ๋ ธ๋์๋ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๊ณ (A), ์ฅ์ ๋ ธ๋๊ฐ ๋ณต๊ตฌ๋๋ค๋ฉด ๊ทธ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํฉ๋๋ค. ๋ํ ์ ์ ์ํฉ์์๋(E) ๋น ๋ฅธ ์๋ต์ ์ํด์ ๋ชจ๋ ๋ ธ๋ ์ ์ฒด์ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ์ง๋ ์์ต๋๋ค(L). ๊ฒฐ๊ตญ์ ์๊ตฌ์ฌํญ์ด๋, ์ํฉ์ ๋ฐ๋ผ Trade-Off ๋ฅผ ๋ช ํํ ์ดํดํ์ฌ ๊ธฐ์ ์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๐ 2.4. ๋ถ์ฐ ์์คํ ๊ตฌ์ถ ์ ๊ณ ๋ คํด์ผ ํ ๋ถ๋ถ โ 2.4.1. Heterogeneity (์ด์ง์ฑ) ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํจ์ ์์ด์ ์ต๋ํ ์ด์ง์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ์๋ก ๋ค๋ฅธ ์์คํ ์ ์ค์น๋ฅผ ํ ์ ์์ด์ผํ๊ณ , ์๋ก ๋ค๋ฅธ ์์คํ ์ฌ์ด์ ์ ๋ณด์ ์์์ ๊ณต์ ํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๋ ๋คํธ์ํฌ,OS,ํ๋์จ์ด,ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฑ์ด ์์ต๋๋ค. ์ข์ ๋ฐฉ๋ฒ์ผ๋ก๋, ํ๋์จ์ด๋ OS ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๊ฐ๋ฐ์ ์ํ ์ธ์ด์ธ Java ๋ Scala, Go ์ธ์ด๋ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ํ์์์๋ ์ํ๋ ์ถ์ํ๋ฅผ ์ด๋ฃฐ ์์๋ Middleware ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ต๋๋ค. (CORBA ๋ RMI ๋ฑ) ๐ก ์์ โ๏ธ Apache Hadoop Hadoop์ ๋ฆฌ๋ ์ค, Windows, macOS ๋ฑ ๋ค์ํ OS์์ ๋์ํ ์ ์์ผ๋ฉฐ, ๋ค์ํ ํ๋์จ์ด ํ๊ฒฝ์์๋ ์คํ ๊ฐ๋ฅํ๋ค. ๋ํ Java ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์ด ์์ด ํ๋ซํผ ๋ ๋ฆฝ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋ค์ํ ํด๋ฌ์คํฐ ํ๊ฒฝ์ ์ฝ๊ฒ ์ด์ ๊ฐ๋ฅํ๋ค. โ 2.4.2. Openess ์์คํ ์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ์ฅ์ฑ(extended, ๋ง๋ถ์), ์ฌ๊ตฌํ(reimplemented)ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์๋ฏธํฉ๋๋ค. ๐ก ์์ โ๏ธ ๋ง์ดํฌ๋ก์ํํธ์ฌ์์ plug and play ๊ฐ๋ โ Interface๋ง ์ ํด์ ๊ณตํ๋ฅผ ํ๊ณ ๋๋ฉด ๊ฑฐ๊ธฐ์ ํด๋นํ๋ ์ํํธ์จ์ด ํ์ฌ๋ ํ๋์จ์ด ํ์ฌ๋ค์ด ์ด๋ฐ Interface์ ๊ทผ๊ฑฐ๋ฅผ ํด์ ๋ญ๊ฐ๋ฅผ ๊ฐ๋ฐํ๋ฉด Windows์ด์์ฒด์ ์์ ๊ทธ๋๋ก ๋์๊ฐ๋ค๋ ๊ฐ๋ โ 2.4.3. Security ๊ถํ์ด ์๋ค๋ฉด ๊ณต๊ฐ์กฐ์ฐจ ๋ถ๊ฐ, ํ๊ฐ๋์ง ์์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ถ๊ฐ, ๊ถํ์ด ์๋ค๋ฉด ์์คํ ์ ๊ทผ ๊ฐ๋ฅ ๋ถ์ฐ ์์คํ ์ ์์ ๊ฐ์ ๋ณด์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํด์ผ ํฉ๋๋ค. ๐ก ์์ โ๏ธ Kerberos + Hadoop Hadoop ํด๋ฌ์คํฐ์ Kerberos ์ธ์ฆ์ ์ ์ฉํ๋ฉด, ๊ฐ ์ฌ์ฉ์์ ์๋น์ค๋ ์ ํด์ง ๊ถํ์ ๊ฐ์ง ํ ํฐ์ ํตํด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. โ 2.4.4. Scalability ๋ถ์ฐ ์์คํ ์ ์ฌ์ฉ์ ์๋ ์์คํ ์์์ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ ํ ์์ด ํ์ฅ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ๋ณดํต ์ํ ํ์ฅ(horizontal scaling) ๋ฐฉ์์ ์ ํธํฉ๋๋ค. ์๋ฒ๋ค์ ์ฆ๊ฐ ์ํค๋๋ผ๋ ๋ ์ด์ performance๊ฐ ๋์ด๋์ง ์๋๋ค๋ฉด, ๋ ์ด์์ ํ์ฅ์ฑ์ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ์ฆ, ํ์ฅ์ฑ ์ข์ ์์คํ ์ ์ค๊ณํ์๋ ์๋ฏธ์ ๋๋ค. โ 2.4.5. Failure Handling ๋ถ์ฐ์์คํ ๋ ์ด์จ๋ ์์คํ ์ด๊ธฐ ๋๋ฌธ์ ์ฅ์ ๋ ์คํจ๋ฅผ ํผํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ์ฅ์ /์คํจ์ ๋ํ ๋์์ (์๋ํ๋ ๋ฐฉ์์ผ๋ก) ํ ์ ์์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ณ ์ฅ ๊ฐ์ง โถ ๊ณ ์ฅ ์ํ โถ ๊ณ ์ฅ ํ์ฉ โถ ๊ณ ์ฅ ๋ณต๊ตฌ โถ ์ค๋ณต์ฑ ์ด๋ ๊ฒ ๋ค์ฏ ๋จ๊ณ๋ก ์งํ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ์ฒดํฌ์ฌ์ ํตํด ๋ฐ์ดํฐ๊ฐ ์์๋๋์ง ์์๋ก ํ์ธํ๊ณ , ๊ณ ์ฅ์ด ๋ฐ์ํ๋ค๋ฉด ํด๋น ์์ ์ ์ฌ์ ์ก ํ๊ฑฐ๋, ๋ณต์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ์ฅ์ ์ํํ ์ ์์ต๋๋ค.(RAID) ์ดํ, ๋ค๋ฅธ ๋ ธ๋๋ฅผ ํตํด ์ ์ฒด ์์คํ ์ ์ ์งํ๋ฉด์ ๊ณ ์ฅ์ ํ์ฉํ๊ณ , Rollback ์ด๋, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ํตํด ๊ณ ์ฅํ ๊ฒฐํ์ ๋ณต๊ตฌํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ค์ํ ๊ฒฝ๋ก์ ๋ณต์ ๋ฅผ ํตํด ๊ณ ์ฅ ๋ฐ์ ์ ๋์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ๐ก ์์ โ๏ธ Spark์ Stage ์ฌ์๋ ๋ฉ์ปค๋์ฆ Spark ์์ ์ํ ์ค ์ผ๋ถ Executor๊ฐ ์คํจํ๋๋ผ๋, ํด๋น Task๋ง ์ฌ์๋ํ์ฌ ์ ์ฒด Job์ ์ค๋จ์ํค์ง ์๋๋ค. โ 2.4.6. Concurrency ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ํ๋์ ์์์ ๊ณต์ ํ๋ ์ํฉ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์ ๊ทผํด๋ ์์์ด ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ฉฐ, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ํจ์จ์ฑ์ ๋์ด๊ณ , shared resource๋ ์์ ์ ์ํ๋ฅผ ๋ช ํํ ํํํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ํ ๋ฆฌ์์ค๋ ์ผ๊ด์ฑ(consistency) ์๋ ๋ฐฉ์์ผ๋ก ๋๊ธฐํ(synchronization) ๋์ด์ผ ํฉ๋๋ค. ๐ก ์์ โ๏ธ ZooKeeper ZooKeeper๋ ์ฌ๋ฌ ๋ถ์ฐ ์์คํ ์์ ๋๊ธฐํ๋ ์ค์ ๊ด๋ฆฌ, ๋ฆฌ๋ ์ ์ถ, ๋ฝ(lock) ๋ฑ์ ์ ๊ณตํ์ฌ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. โ 2.4.7. Transparency ์ฌ์ฉ์๊ฐ ๋ถ์ฐ ์์คํ ์ ๋ด๋ถ ๊ตฌ์กฐ๋ ๋์ ๋ฐฉ์์ ์ธ์ํ์ง ๋ชปํ๋๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํฌ๋ช ์ฑ์ด๋ผ๊ณ ํ๋๋ฐ, ๋ถ์ฐ ์์คํ ์ด๋ก ์๋ ๋ค์ํ ์ข ๋ฅ์ ํฌ๋ช ์ฑ์ด ์กด์ฌํฉ๋๋ค. โ๏ธ ์ ๊ทผ ํฌ๋ช ์ฑ: ๋ก์ปฌ/์๊ฒฉ ์์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ๊ทผํฉ๋๋ค. โ๏ธ ์์น ํฌ๋ช ์ฑ: ์์์ ๋ฌผ๋ฆฌ์ ์์น(IP, ์์น ๋ฑ)์ ๋ฌด๊ดํ๊ฒ ์ ๊ทผํฉ๋๋ค. โ๏ธ ๋์์ฑ ํฌ๋ช ์ฑ: ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋ฌธ์ ์์ด ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. โ๏ธ ๋ณต์ ํฌ๋ช ์ฑ: ์์์ ๋ณต์ ์ ๋ฌด์ ์๊ด์์ด ๋์ผํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. โ๏ธ ์ฅ์ ํฌ๋ช ์ฑ: ์ฅ์ ๋ฐ์ ์ ์ฌ์ฉ์/์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฅผ ์ธ์งํ์ง ์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค. โ๏ธ ์ด๋ ํฌ๋ช ์ฑ: ์์์ด๋ ํด๋ผ์ด์ธํธ์ ์์น ์ด๋์ด ์์คํ ๋์์ ์ํฅ์ด ์์ต๋๋ค. โ๏ธ ์ฑ๋ฅ ํฌ๋ช ์ฑ: ๋ถํ์ ๋ฐ๋ผ ์์คํ ์ฌ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค. โ๏ธ ํ์ฅ ํฌ๋ช ์ฑ: ์์คํ ๊ท๋ชจ๊ฐ ํ์ฅ๋์ด๋ ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ ๋ณ๊ฒฝ ์์ด ์ด์์ด ๊ฐ๋ฅํฉ๋๋ค. ๐ก ์์ โ๏ธ Cloud Storage (ex: Amazon S3) ์ฌ์ฉ์๋ ๊ฐ์ฒด๊ฐ ์ด๋ ๋ฆฌ์ ์ ์ ์ฅ๋์ด ์๋์ง ๋ชฐ๋ผ๋ ๋๊ณ , ํ์ ์ ์ธ์ ๋ ์ง ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ ์ ์์ด ์ฑ๋ฅ/ํ์ฅ/์์น ํฌ๋ช ์ฑ์ ๋ชจ๋ ์ ๊ณตํ๋ค. ๐ 2.5. ๋ถ์ฐ ์์คํ USE CASE ๋ช ๊ฐ์ง โ 2.5.1. ๋ถ์ฐ ์ ์ฅ์ ์ถ์ฒ : ํ๋ก ์ํคํ ์ฒ ๋์ฉ๋์ ๋ถ์ฐ์์คํ ์ด ๊ฐ์ฅ ํ์ํ ๊ณณ์ด ์ ์ฅ์์ ๋๋ค. ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋๋์ด์ ์ ์ฅํ๋ฉด์๋ ์ ์ค๋๋ฉด ์๋๊ณ , ์ธ์ ๋ ์ง ์กฐํ๊ฐ ๊ฐ๋ฅํด์ผ ํ์ต๋๋ค. ๋ํ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ์์๋ณผ Hadoop ์ด ์์ต๋๋ค. โ 2.5.2. Load Balancer ์ถ์ฒ : ๋ก๋ ๋ฐธ๋ฐ์ ๊ณผ๊ฑฐ์ ๋ก๋๋ฐธ๋ฐ์๋ ํ๋ ๋๋ ๋ ๊ฐ์ ๊ณ ์ฑ๋ฅ ํ๋์จ์ด ์ฅ๋น๋ ์ค์์น๋ก ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ฒ๋ฆฌํ์ต๋๋ค. ํ์ง๋ง ํ๋์ ๋ก๋๋ฐธ๋ฐ์๋ ์ธ์คํด์ค๊ฐ ์๋ฐฑ์์ ์์ฒ ๋๊น์ง ์ฐ๊ฒฐ๋๋ฏ๋ก ํ๋์ ๊ณ ์คํ ํ๋์จ์ด๋ก ๋ชจ๋ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ํ, ์ค์ ์ด๋ ๊ท์น์ ๋ณ๊ฒฝ์ด ์ฆ๊ณ ๊ทธ ๋ณต์ก๋๊ฐ ๋์์ก์ต๋๋ค. ๋ฐ๋ผ์ AWS, Azure์ ๊ฐ์ ํด๋ผ์ฐ๋ ์๋น์ค์์ ์ ํํ๋ ๋ก๋๋ฐธ๋ฐ์๋ ๋ชจ๋ ์ํํธ์จ์ด ๋ก๋๋ฐธ๋ฐ์์ ๋๋ค. ์ธ๋ถ์ ๋ ธ์ถ๋๋ IP ์ฃผ์๋ DNS ์ฃผ์๋ ํ๋์ด์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ HA(High Availability)๋ฅผ ์ํด ์ฌ๋ฌ ์๋ฒ์ ์ค์์น๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ํ, ์ค์๊ฐ ์ค์ ๋ฐ์์ ์ํ ๋๊ธฐํ ์์คํ ๋ ๊ตฌ์ถ๋์ด ์์ต๋๋ค. โ 2.5.3. ๋ถ์ฐ ๋ฉ์์ง ํ ์ถ์ฒ : ๋ถ์ฐ ๋ฉ์์ง ํ - ์นดํ์นด Queue๋ผ๊ณ ํ๋ฉด FIFO(First In First Out)๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก, ์์๊ฐ ๋ณด์ฅ๋์ด์ผ ํฉ๋๋ค. Queue๋ ํ๋๋ง ์กด์ฌํ ์๋ฐ์ ์์ต๋๋ค. ํ์ง๋ง ํ๋์ Queue๋ก๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ ํ๊ณ๊ฐ ์์ผ๋ฏ๋ก, ํ๋์ ์ฃผ์ ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ Queue๋ฅผ ๋์ด ์ฒ๋ฆฌ๋์ ๋๋ฆด ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ก์ต๋๋ค. ์ด ๊ตฌ์กฐ๋ฅผ ๋ํํ๋ ์๊ฐ Kafka์ ๋๋ค. Kafka์์๋ ํ๋์ Topic(๋ ผ๋ฆฌ์ Queue)์ด ์ฌ๋ฌ ๊ฐ์ Partition(๋ฌผ๋ฆฌ์ Queue)์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ Partition๋ณ๋ก๋ ์์๋ฅผ ๋ณด์ฅํ ์ ์์ง๋ง, ์ ์ฒด Topic์ ๋ํด์๋ ์์๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ง์ฝ ์ ์ฒด Topic์ ์์๋ฅผ ๋ณด์ฅํ๋ ค ํ๋ค๋ฉด, ์ฒ๋ฆฌ๋ ์ํด๋ฅผ ๊ฐ์ํด์ผ ํฉ๋๋ค. โ ๐ 3. ํ๋ก์ ๋ฑ์ฅ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ดํด๋ History ๋ฅผ ํ์ ํ๋๊ฒ ์ค์ํ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ์์คํ ์ ์ญ์ฌ๋ถํฐ ๋ถ์ฐ ์์คํ ๊น์ง ์์๋ณด์์ต๋๋ค. ๋ถ์ฐ ์์คํ ์ ๊ฐ๋ ์ด ์ดํด๋์๋ค๋ฉด, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ถ์ฒ : Apache-Hadoop ๐ 3.1. ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ ์จ๋ผ์ธ ์๋น์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ์ ์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ, ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃจ์ด์ผ ํ ๋ฐ์ดํฐ์ ์๊ณผ ์ข ๋ฅ๋ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ์ต๋๋ค. ๊ธฐ์กด์๋ ์ฃผ๋ก ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค๊ธฐ ๋๋ฌธ์ RDBMS์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์์ต๋๋ค. ํ์ง๋ง ์น ๋ก๊ทธ, ์ด๋ฏธ์ง, ์์ ํ์ผ๊ณผ ๊ฐ์ ๋น์ ํ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด์, ๊ธฐ์กด RDBMS๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๊ธฐ์๋ ์ฌ๋ฌ ํ๊ณ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค. ์ฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ ํฌ๊ธฐ๊ฐ ๋ฐฉ๋ํ์ฌ, RDBMS์ ์ ์ฅํ๋ ค๋ฉด ๊ณ ์ฑ๋ฅ, ๊ณ ๋น์ฉ์ ์ฅ๋น๊ฐ ํ์ํ์ต๋๋ค. ๋ํ ๋น์ ํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, RDBMS๊ฐ ์ ๊ณตํ๋ ๋ณต์กํ ๊ธฐ๋ฅ๋ค(ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณต์กํ ์ฟผ๋ฆฌ ๋ฑ)์ ๊ตณ์ด ์ฌ์ฉํ ํ์๋ ์์์ต๋๋ค. ๊ฒฐ๊ตญ, ์์ฃผ ์ฌ์ฉํ์ง ์๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด RDBMS๋ฅผ ๋ฌด์์ ํ์ฅํ๋ ๊ฒ์ ๋น์ฉ ๋๋น ํจ์จ์ด ๋งค์ฐ ๋ฎ์ ์ ํ์ด ๋์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ํ๋ก(Hadoop)์ ๋๋ค. ํ๋ก์ ๊ฐ๋น์ผ ์ ์ฉ ์๋ฒ๊ฐ ์๋, ๋ฒ์ฉ x86 ๋ฆฌ๋ ์ค ์๋ฒ(Commodity Server)์์๋ ์ค์นํ๊ณ ์ด์ฉํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ด ๋์ด๋๋๋ผ๋ ๋จ์ํ ์๋ฒ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก ์ฝ๊ฒ ํ์ฅํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ํด ๋ณ๋์ ์ฌ์ค์น๋ ๋ณต์กํ ์ฌ๊ตฌ์ฑ์ด ํ์ํ์ง ์์ ์ ์ด ํฐ ์ฅ์ ์ ๋๋ค. ํ๋ก์ ๋ฐ์ดํฐ์ ๋ณต์ ๋ณธ์ ์ฌ๋ฌ ์๋ฒ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ์๋ฒ๋ ๋์คํฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ์ํํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ค์ ๋ก, 2008๋ , ๋ด์ํ์์ฆ(New York Times)๋ ์ฝ 130๋ ๋ถ๋์ ํด๋นํ๋ ์ ๋ฌธ ๊ธฐ์ฌ 1,100๋ง ํ์ด์ง๋ฅผ ๋์งํธํํ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค. ์ด ์์ ์๋ AWS์ EC2, S3, ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํ์ฉํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ๋๋ผ์ ์ต๋๋ค. ์ด ๋ฐฉ๋ํ ์์ ์ ๋จ ํ๋ฃจ ๋ง์ ์๋ฃํ์ผ๋ฉฐ, ์์๋ ๋น์ฉ์ ์ฝ 200๋ง ์์ ๋ถ๊ณผํ์ต๋๋ค. ๋น์ ๊ธฐ์กด ์๋ฒ์ ์ผ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ์ ๋ก ์์ ์ ์ํํ์ ๊ฒฝ์ฐ, ๋ฌด๋ ค 14๋ ์ด ๊ฑธ๋ ธ์ ๊ฒ์ด๋ผ ์์๋์์ต๋๋ค. ์ถ์ฒ : ๋ด์ํ์์ฆ ํ๋ก ์ฌ๋ก ์ด๋ฏธ์ง ๐ 3.2. ํ๋ก์ด๋ ํ๋ก์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ํ๋ฉด, ํ๋์ ์ฑ๋ฅ ์ข์ ์ปดํจํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ์ ๋นํ ์ฑ๋ฅ์ ์ปดํจํฐ ์ฌ๋ฌ ๋๋ฅผ ํด๋ฌ์คํฐํํ๊ณ ํฐ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ํด๋ฌ์คํฐ์์ ๋ณ๋ ฌ๋ก ๋์์ ์ฒ๋ฆฌํ์ฌ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ์ํ ์คํ์์ค ํ๋ ์์ํฌ ๋ผ๊ณ ์ ์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ ๊ท๋ชจ๊ฐ ๊ธฐ๊ฐ๋ฐ์ดํธ์์ ํํ๋ฐ์ดํธ์ ์ด๋ฅด๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅ ๋ฐ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํ๋์ ๋ํ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌํ๋ ๋์ Hadoop์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปดํจํฐ๋ฅผ ํจ๊ป ํด๋ฌ์คํฐ๋งํ์ฌ ๋๋์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ถ์ํ ์ ์์ต๋๋ค. ๋ํ ์ฌ๋ฌ๊ฐ์ง ์คํ ์์ง, ํ๋ก๊ทธ๋๋ฐ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ง ๋ฑ, ํ๋ก ์ํ๊ณ ์ ๋ฐ์ ํฌํจํ๋ ์๋ฏธ๋ก ํ์ฅ & ๋ฐ์ ๋์ด์์ต๋๋ค. ์ถ์ฒ : ํ๋ก ์ํ๊ณ ์ด๋ฏธ์ง ๋ค์ ํฌ์คํ ์์ ์ข ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ์ง๋ง, ํ๋ก์ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ๊ณ ๋ถ๋ฆฌํ์ฌ ์ ์ฅํ๋ ๊ฐ๋ ์ ๋๋ค. ์ชผ๊ฐ์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ์ด๋ ๋ ธ๋์ ์์นํ์๋์ง๋ฅผ ์ ์ ์๋ ๋ฉํ ๋ฐ์ดํฐ ๋ํ ์์ผ๋ฉฐ, ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ฌ ๋ค๋ฅธ ๋ ธ๋์ ์ ์ฅํจ์ผ๋ก์จ, Replication ๋ ๋ณด์ฅํด์ค๋๋ค. ์ด๋ฌํ ๋ด์ฉ์ ํ๋๋ก, ํ๋ก์ ์ฃผ์ ํน์ง๋ค์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. โ ํ์ฅ์ฑ โ ํ๋ก์ ํํ๋ฐ์ดํธ(PB) ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ขฐ์ฑ ์๊ฒ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ์๋ฒ ๋ ธ๋๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์์คํ ์ ์ํ์ ์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. โ ๊ฒฝ์ ์ฑ โ ๊ณ ๊ฐ์ ์ ์ฉ ์๋ฒ ๋์ ๋ฒ์ฉ ๋ฆฌ๋ ์ค ์๋ฒ(Commodity Server)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ฐ์ฐ์ ๋ถ์ฐ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๋ฒ์ฉ ์๋ฒ๋ฅผ ์์ฒ ๋๊น์ง ํด๋ฌ์คํฐ๋งํ์ฌ ์ด์ํ ์ ์์ด ์ด๊ธฐ ํฌ์ ๋น์ฉ์ด ๋ฎ๊ณ ๊ฒฝ์ ์ ์ ๋๋ค. โ ํจ์จ์ฑ โ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์๋ฒ์์ ์ง์ ์ฐ์ฐ์ ์ํ(Data Locality)ํจ์ผ๋ก์จ, ๋ถํ์ํ ๋คํธ์ํฌ ์ ์ก์ ์ค์ด๊ณ ๋น ๋ฅธ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋์ฉ๋ ๋ฐ์ดํฐ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. โ ์ ๋ขฐ์ฑ โ ํ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ฌ๋ฌ ๋ณต์ ๋ณธ์ผ๋ก ์ ์ฅํ๋ฉฐ, ์๋ฒ๋ ๋์คํฌ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์์ ์ ์๋์ผ๋ก ์ฌ๋ฐฐ์นํ์ฌ ๋ณต๊ตฌํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ด๋ ์์คํ ์ ์ฒด์ ๋์ ์ ๋ขฐ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ํ ์ด๋ฌํ ํน์ง์ ์ ์งํ๊ธฐ ์ํ์ฌ ํ๋ก์ ๋ค์๊ณผ ๊ฐ์ ๋ค ๊ฐ์ง ์ฃผ์ ๋ชจ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค. โ HDFS โ ํ์ค ๋๋ ์ ์ฌ์ ํ๋์จ์ด์์ ์คํ๋๋ ๋ถ์ฐ ํ์ผ ์์คํ ์ ๋๋ค. HDFS ๋ ๋์ ๋ด๊ฒฐํจ์ฑ๊ณผ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. โ YARN โ ํด๋ฌ์คํฐ ๋ ธ๋ ๋ฐ ๋ฆฌ์์ค ์ฌ์ฉ์ ๊ด๋ฆฌํ๊ณ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ ๋ฐ Task ๋ฅผ ๊ด๋ฆฌํ๊ณ Scheduling ์ ํฉ๋๋ค. ( Version 2๋ถํฐ ์ถ๊ฐ ) โ MapReduce โ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ดํฐ์ ๋ํ ๋ณ๋ ฌ ๊ณ์ฐ์ ์ํํ๋ ๋ฐ ๋์์ด ๋๋ ํ๋ ์์ํฌ์ ๋๋ค. Map Task ๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํค ๊ฐ ํ์ด๋ก ๊ณ์ฐ ํ ์ ์๋ ๋ฐ์ดํฐ ์ธํธ๋ก ๋ณํํฉ๋๋ค. Map Task ์ ์ถ๋ ฅ์ Reduce Task ๋ฅผ ํตํ์ฌ ์ถ๋ ฅ์ ์ง๊ณํ๊ณ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค. โ Hadoop Common โ ๋ชจ๋ ๋ชจ๋์์ ์ฌ์ฉ ํ ์ ์๋ ๊ณตํต Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํด๋น ๋ชจ๋๋ค์ ๋ํ์ฌ์๋, ๋ค์ ํฌ์คํ ์์ ๋ณด๋ค ์์ธํ๊ฒ ์์ ๋ณผ ์์ ์ ๋๋ค. ๐ 3.3. ํ๋ก ์ํคํ ์ฒ์ Version ๋ณ ํน์ง โ 3.3.1. Hadoop v1.0 ์ถ์ฒ : ํ๋ก V1 ์ํคํ ์ฒ ํ๋ก(Hadoop) v1์ 2011๋ ์ ์ ์์ผ๋ก ๋ฐํ๋ ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ ๋๋ค. ํ๋ก v1์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ถ์ฐ ์ ์ฅ๊ณผ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ผ๋ ๋ ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋จผ์ , ๋ถ์ฐ ์ ์ฅ์ ํ๋ก์ NameNode์ DataNode๊ฐ ๋ด๋นํฉ๋๋ค. NameNode๋ ํ๋ก ํ์ผ ์์คํ (HDFS) ๋ด์์ ํ์ผ๋ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ํ์ผ์ด ์ด๋ค ๋ธ๋ก์ผ๋ก ๋๋์ด ์ ์ฅ๋์ด ์๋์ง, ๊ฐ ๋ธ๋ก์ด ์ด๋ DataNode์ ์์นํ๋์ง ๋ฑ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ์ ์งํฉ๋๋ค. ๋ํ, ์ ์ฒด ํด๋ฌ์คํฐ์ ์กด์ฌํ๋ DataNode๋ค์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฒํ๊ณ , ์ด์์ด ์๊ธด ๋ ธ๋๋ฅผ ๊ฐ์งํ์ฌ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ๋ ์ํํฉ๋๋ค. ๋ฐ๋ฉด, DataNode๋ ์ค์ ๋ก ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก ๋จ์๋ก ๋๋์ด ์ ์ฅํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ ํ ๊ณณ์๋ง ์ ์ฅ๋์ง ์๊ณ , ์ฌ๋ฌ ๋ ธ๋์ ๋ณต์ ๋์ด ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฌํ ๋ธ๋ก ๋ณต์ ๋๋ถ์ ํน์ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ ์ ์ค์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ JobTracker์ TaskTracker๊ฐ ๋ด๋นํฉ๋๋ค. JobTracker๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ์์ (job)๋ค์ ๊ด๋ฆฌํ๋ ์ค์ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ ์ ์ถํ๋ฉด JobTracker๋ ์ด๋ฅผ ์ ์ ํ ๋ถํ ํ๊ณ , ํด๋ฌ์คํฐ ๋ด ์์์ ๊ณ ๋ คํ์ฌ ์์ ์ ๊ฐ TaskTracker์๊ฒ ํ ๋นํฉ๋๋ค. ๋ํ, ๊ฐ ์์ ์ ์งํ ์ํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ , ์์ ์คํจ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ฌ์๋๋ฅผ ์กฐ์จํ๋ ๋ฑ ์์ ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ํ๋ก v1์์๋ ์ต๋ ์ฝ 4,000๋์ ์ด๋ฅด๋ ๋ ธ๋๋ฅผ ํ๋์ ํด๋ฌ์คํฐ์ ๋ฑ๋กํ์ฌ ๊ด๋ฆฌํ ์ ์์์ต๋๋ค. TaskTracker๋ JobTracker๋ก๋ถํฐ ํ ๋น๋ฐ์ ์์ ์ ์ค์ ๋ก ์ํํ๋ ์ญํ ์ ํฉ๋๋ค. ๊ฐ TaskTracker๋ ์์ ์๊ฒ ๋ฐฐ์ ๋ ์์ ์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ JobTracker์ ๋ณด๊ณ ํฉ๋๋ค. ๋ง์ฝ ์์ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฅผ ์ฆ์ JobTracker์ ์๋ฆฌ๊ณ , ํ์ ์ ์์ ์ ์ฌ์ํํฉ๋๋ค. ์ด์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ํตํด ํ๋ก v1์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์ฅํ๊ณ , ๋์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฐ์ ๋ง๋ จํ์์ต๋๋ค. ์ดํ ํ๋ก์ ์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ ์์ผ ๋์ฑ ๊ฐ๋ ฅํ ๋ถ์ฐ ์ฒ๋ฆฌ ์ํ๊ณ๋ฅผ ๊ตฌ์ถํ๊ฒ ๋ฉ๋๋ค. โ 3.3.2. Hadoop v2.0 ์ถ์ฒ : ํ๋ก V2 ์ํคํ ์ฒ ํ๋ก v1์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ์์ง๋ง, ๊ตฌ์กฐ์ ์ธ ํ๊ณ๋ก ์ธํด ๋ช ๊ฐ์ง ๋๋ ทํ ๋จ์ ๊ณผ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ JobTracker์ ๋ณ๋ชฉํ์์ด์์ต๋๋ค. ํ๋ก v1์์๋ JobTracker๊ฐ ํด๋ฌ์คํฐ์ ๋ชจ๋ ์์ ๊ด๋ฆฌ(Resource Management)์ ์์ ์ค์ผ์ค๋ง(Job Scheduling)์ ๋์์ ์ฒ๋ฆฌํ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ ๋ฑ๋ก๋ ๋ ธ๋ ์๊ฐ ์ฆ๊ฐํ ์๋ก JobTracker์ ๊ณผ๋ถํ๊ฐ ๋ฐ์ํ์๊ณ , ๊ฒฐ๊ตญ ์ ๋ง์ ๋ ธ๋๋ค์ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ์ ํ๊ณ๊ฐ ์ฐพ์์์ต๋๋ค. ๋ํ, JobTracker๊ฐ ๋จ์ผ ์ฅ์ ์ง์ (Single Point of Failure)์ด ๋์๊ธฐ ๋๋ฌธ์, JobTracker์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋ฌ์คํฐ ์ ์ฒด์ ์์ ์ด ์ค๋จ๋๋ ์ฌ๊ฐํ ์ํ์ด ์กด์ฌํ์์ต๋๋ค. ์ด ์ธ์๋ ํ๋ก v1์ MapReduce ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์๋ง ์ข ์๋์ด ์์ด ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ด ์ด๋ ค์ ์ต๋๋ค. ์๋ก์ด ์ํฌ๋ก๋๋ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ง์ ์ ์ฐํ๊ฒ ์์ฉํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋ถ์กฑํ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, V2 ๋ถํฐ ๋์ ๋ ๊ฒ์ด YARN ์ ๋๋ค. ( YARN ์ ๋ํ์ฌ์๋, ์ถํ ๋ ์์ธํ๊ฒ ๋ค๋ฃฐ ์์ ์ ๋๋ค. ) ํ๋ก v2๋ ๊ธฐ์กด ํ๋ก v1์ JobTracker ๋ณ๋ชฉํ์์ ์ ๊ฑฐํ๊ณ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํค๊ธฐ ์ํด YARN(Yet Another Resource Negotiator) ์ํคํ ์ฒ๋ฅผ ๋์ ํ์์ต๋๋ค. ( ๋น์ทํ ์ด์ ๋ก MapReduce ๋ YARN ์์ ์ฌ์ฉํ๋๋ ์๋๋๋ก 1.0 ๊ณผ 2.0 ๊ธฐ์ ์ด ๋ฐ๋๊ฒ ๋ฉ๋๋ค. ) YARN ์ํคํ ์ฒ๋ JobTracker์ ์ญํ ์ ์ธ๋ถํํ์ฌ, ์์ ๊ด๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์์ต๋๋ค. โถ ๐ResourceManager: ํด๋ฌ์คํฐ ์ ์ฒด์ ์์์ ํตํฉ์ ์ผ๋ก ๊ด๋ฆฌ. ์์ ์ ์ง์ ์ํํ์ง ์๊ณ , ์ด๋ค ์์ ์ ์ผ๋ง๋งํผ์ ์์์ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ํ. โถ ๐NodeManager: ๊ฐ ๋ ธ๋์์ ์์์ ์ฌ์ฉ ํํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ค์ ์ปจํ ์ด๋(Container)๋ฅผ ๊ด๋ฆฌ. โถ ๐ApplicationMaster: ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ (์์ )๋ง๋ค ๋ณ๋๋ก ์์ฑ๋์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌ. ResourceManager์ ํต์ ํ์ฌ ํ์ํ ์์์ ์์ฒญํ๊ณ , ์์ ์คํ์ ์กฐ์จ. โถ ๐Container: ์ค์ ์์ ์ด ์ํ๋๋ ๋จ์. ResourceManager๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ์ ์์ฑ๋๋ฉฐ, ์์ ์ด ์๋ฃ๋๋ฉด ์ปจํ ์ด๋๋ ์ข ๋ฃ๋์ด ์์์ด ๋ฐํ ๋จ. ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ํ๋ก v2๋ ์์ ๊ด๋ฆฌ์ ์์ ๊ด๋ฆฌ๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์์คํ ๋ถํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ์ฐ์ํฌ ์ ์๊ฒ ๋์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ฌ์คํฐ์ ๋ฑ๋กํ ์ ์๋ ๋ ธ๋ ์๊ฐ ๋ํญ ์ฆ๊ฐํ์ฌ, ์ต๋ ์ฝ 10,000๋ ์ด์์ ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋์ ํ์ฅ์ฑ์ ํ๋ณดํ ์ ์์์ต๋๋ค. ๋ํ YARN ์ํคํ ์ฒ์์๋ MapReduce์ ํ์ ๋์ง ์๊ณ , ๋ค์ํ ์ข ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปจํ ์ด๋๋ฅผ ํตํด ์คํ๋ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด Spark, HBase, Storm ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ ์ปดํฌ๋ํธ๋ฅผ YARN ํด๋ฌ์คํฐ ์์์ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค. ํนํ, ์ปจํ ์ด๋๋ ์์ ์ด ์์ฒญ๋ ๋๋ง ์์ฑ๋๊ณ , ์์ ์ด ๋๋๋ฉด ์ฆ์ ์ข ๋ฃ๋๊ธฐ ๋๋ฌธ์ ํด๋ฌ์คํฐ์ ์์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ก์จ ํ๋ก์ ๋จ์ํ MapReduce ๊ธฐ๋ฐ ์์คํ ์ ๋์ด, ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ง์ ํตํฉํ๋ ๋ฒ์ฉ ๋ฐ์ดํฐ ํ๋ซํผ์ผ๋ก ๋ฐ์ ํ ์ ์๊ฒ ๋์์ต๋๋ค. โ 3.3.3. Hadoop v3.0 ์ถ์ฒ : ํ๋ก์ด ์ธ ๋ง๋ฆฌ๋๊น, ํ๋ก V3 ์ด๋ฏธ์งโฆ?ใ ใ ใ ํ๋ก V1 ์์ V2 ๋ก์ ์งํ๋, ๋๋์ ์์ ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ YARN ์ ๋์ ์ด ํต์ฌ์ด์๋ค๋ฉด, V3 ๋ก์ ์งํ๋ ์ฑ๋ฅ ๊ฐ์ ๊ณผ, ์ฌ๋ฌ๊ฐ์ง ํธ์์ฑ ๊ทธ๋ฆฌ๊ณ ํ ์ํ๊ณ์ ์๋ง๋ ๊ณ ๋ํ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฑ์ฅํ๋ Erasure Encoding ์ด๋, YARN ํ์๋ผ์ธ ์๋น์ค ๋ฑ์ ๋ํ์ฌ์๋ ์ญ์ ๋ค์ ํฌ์คํ ์์ ํจ๊ป ์ ๋๋ก ์ ๋ฆฌํ ์์ ์ ๋๋ค. ์ง๊ธ์ ๊ทธ์ V3์ ์ถ๊ฐ๋ ๋ด์ฉ์ ๋ํ ๊ฐ์๋ง ๋ณด๊ฒ ์ต๋๋ค. โถ โ Java Version Upgrade Hadoop 3์์ ๋ชจ๋ Hadoop JAR์ Java 8์ ๋ฐํ์ ๋ฒ์ ์ ๋์์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ํ Java 7 ์ดํ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ Hadoop 3์ผ๋ก ์์ ์ ์์ํ ๋ Java 8๋ก ์ ๊ทธ๋ ์ด๋ํด์ผ ํฉ๋๋ค. โถ โก HDFS Erasure Encoding ์ถํ ๋ค์ ์์๋ณด๊ฒ ์ง๋ง, HDFS์ ๊ธฐ๋ณธ ๋ณต์ ๊ฐ์๋ 3๊ฐ์ ๋๋ค. ํ๋๋ ์๋ณธ ๋ฐ์ดํฐ ๋ธ๋ก์ด๊ณ , ๋๋จธ์ง ๋ ๊ฐ๋ ๊ฐ๊ฐ 100%์ ์คํ ๋ฆฌ์ง ์ค๋ฒํค๋๊ฐ ํ์ํ ๋ณต์ ๋ณธ์ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด 200%์ ์คํ ๋ฆฌ์ง ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฉฐ, ๋คํธ์ํฌ ๋์ญํญ๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ ์๋ชจํฉ๋๋ค. (์ฆ, 1TB ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ์ 3TB ์ฉ๋์ด ํ์ํ๊ฒ๋๋ค.) ๊ทธ๋ฌ๋ I/O ํ๋์ด ์ ์ Cold Data ๋ค ๋ํ, ์ ์์ ์ธ ์์ ์ค ๊ฑฐ์ ์ก์ธ์ค๋์ง ์์์๋ ๋ถ๊ตฌํ๊ณ ์ฌ์ ํ ์๋ณธ ๋ฐ์ดํฐ์ ๋์ผํ ์์ค์ ๋ฆฌ์์ค๋ฅผ ์๋นํฉ๋๋ค. ์ด๋ ์ด์ ์ฝ๋ฉ์ ์ด๋ฌํ ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์๋์์ต๋๋ค. ์ด๋ ์ด์ ์ฝ๋ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ณต์ ๋ณธ ๋์ ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ์กด ๋ณต์ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ์ ์ ์คํ ๋ฆฌ์ง ์ค๋ฒํค๋๋ก ๋์ผํ ์์ค์ ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํฉ๋๋ค. HDFS์ EC(Erasure Coding)๋ฅผ ํตํฉํจ์ผ๋ก์จ ์คํ ๋ฆฌ์ง ํจ์จ์ฑ์ ๋ํญ ํฅ์์ํค๋ฉด์๋ ๋ด๊ฒฐํจ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 6๊ฐ์ ๋ธ๋ก์ ๊ฐ์ง 3x ๋ณต์ ํ์ผ์ 18๊ฐ์ ๋ธ๋ก ๊ณต๊ฐ์ ์ฌ์ฉํ์ง๋ง, EC(6 ๋ฐ์ดํฐ, 3 ํจ๋ฆฌํฐ) ๋ฐฉ์์ ์ ์ฉํ๋ฉด 9๊ฐ์ ๋ธ๋ก(6 ๋ฐ์ดํฐ ๋ธ๋ก + 3 ํจ๋ฆฌํฐ ๋ธ๋ก)๋ง ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ 50%์ ์คํ ๋ฆฌ์ง ์ค๋ฒํค๋๋ง ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ๋ค๋ง ์ด๋ ์ด์ ์ฝ๋ฉ์ ๋ฐ์ดํฐ ์ฌ๊ตฌ์ฑ์ ์ํด ์๊ฒฉ ํ๋ ์์ ์ด ์ถ๊ฐ๋ก ํ์ํ๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์์ฃผ ์ก์ธ์คํ์ง ์๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ญ์ ์ฝ๋ฉ์ ์ ์ฉํ๊ธฐ ์ ์ ์ฌ์ฉ์๋ ์คํ ๋ฆฌ์ง, ๋คํธ์ํฌ, CPU ์ค๋ฒํค๋ ๋ฑ ๋ชจ๋ ์์๋ฅผ ์ถฉ๋ถํ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด๋ ์ด์ ์ฝ๋ฉ์ ํจ๊ณผ์ ์ผ๋ก ์ง์ํ๊ธฐ ์ํด Hadoop์ HDFS ์ํคํ ์ฒ๋ฅผ ์ผ๋ถ ๋ณ๊ฒฝํ์์ต๋๋ค. ๋จผ์ , ๋ธ๋ก ๊ทธ๋ฃน ๋จ์๋ก ๋์ํ ์ ์๊ฒ๋, NameNode ๊ฐ ํ์ฅ ๋์์ต๋๋ค. HDFS์ ์ด๋ ์ด์ ์ฝ๋ฉ(EC)์ ์ ์ฉํ๋ฉด ํ๋์ ํ์ผ์ด ์ฌ๋ฌ ์กฐ๊ฐ(=์ฌ๋ฌ ๋ธ๋ก)์ผ๋ก ๋๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์กฐ๊ฐ๋ค์ โ๊ทธ๋ฃนโ์ผ๋ก ๋ฌถ์ ๋๋ค. ์ด ๋ฌถ์์ โ๋ธ๋ก ๊ทธ๋ฃน(Block Group)โ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์๋ HDFS์์๋ ํ์ผ์ ๊ด๋ฆฌํ ๋ ๋ธ๋ก ํ๋ํ๋๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๊ด๋ฆฌํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ EC๋ฅผ ๋์ ํ๋ฉด์๋ ํ๋์ ๋ธ๋ก ๊ทธ๋ฃน ๋จ์๋ก ๊ด๋ฆฌํ๋ ค๋ ๊ฒ์ ๋๋ค. (์ฆ, ๋ธ๋ก ํ๋ํ๋๊ฐ ์๋๋ผ ๋ธ๋ก์ ๋ฌถ์ โ๊ทธ๋ฃนโ์ ๊ด๋ฆฌ) ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ฌธ์ ๊ฐ ํ๋ ์๊น๋๋ค. ๋ธ๋ก์ด ๋ง์์ง๋๊น, NameNode๊ฐ ์ด ๋ธ๋ก ํ๋ํ๋๋ฅผ ๊ธฐ์ต(๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ)ํด์ผ ํด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ์ปค์ง ์ ์์ต๋๋ค. ๊ทธ๋์ โ๊ณ์ธต์ ๋ธ๋ก ๋ช ๋ช ๋ฐฉ์โ ์ด๋ผ๋ ์๋ก์ด ๊ท์น์ ๋์ ํฉ๋๋ค. ์ด ๊ท์น์ ๋ธ๋ก ๊ทธ๋ฃน์ ID๋ฅผ ์๊ณ ์์ผ๋ฉด, ๊ทธ ์์ ํฌํจ๋ ๋ด๋ถ ๋ธ๋ก ID๋ค์ ์ ์ถํ ์ ์๊ฒ ๋ง๋ค์ด ๋์ ๊ฒ์ ๋๋ค. ๋๋ถ์ ๋ชจ๋ ๋ด๋ถ ๋ธ๋ก์ ํ๋ํ๋ ๊ธฐ์ตํ ํ์ ์์ด, ๋ธ๋ก ๊ทธ๋ฃน ํ๋๋ง ๊ธฐ์ตํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํด์ NameNode์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ ๋๋ค. ๋ค์์, ํด๋ผ์ด์ธํธ๊ฐ ํ์ฅ๋์์ต๋๋ค. HDFS ํด๋ผ์ด์ธํธ(ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ์ฃผ์ฒด)๋ EC(์ด๋ ์ด์ ์ฝ๋ฉ)๋ฅผ ์ง์ํ๋๋ก ๊ฐ์ ๋์์ต๋๋ค. ์ด์ ํ์ผ์ ์ฝ๊ณ ์ธ ๋, ํด๋ผ์ด์ธํธ๋ โ๋ธ๋ก ๊ทธ๋ฃนโ ๋จ์๋ก ์ฌ๋ฌ ๋ธ๋ก์ ๋์์(๋ณ๋ ฌ๋ก) ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค. (์์ ์๋ ๋ธ๋ก ํ๋ํ๋ ์์๋๋ก ์ฒ๋ฆฌํ์) ์ด์ ํ์ผ์ ์ธ ๋, HDFS๋ DFSStripedOutputStream์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด ์คํธ๋ฆผ์ ๋ธ๋ก ๊ทธ๋ฃน ์์ ๊ฐ ๋ด๋ถ ๋ธ๋ก์ ์ ์ฅํ DataNode์ ๊ฐ๊ฐ ์คํธ๋ฆฌ๋จธ๋ฅผ ๋ง๋ค์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๋๋ค. ์๋ฅผ ๋ค์ด, 6๊ฐ ๋ฐ์ดํฐ ๋ธ๋ก, 3๊ฐ ํจ๋ฆฌํฐ ๋ธ๋ก์ด๋ผ๋ฉด ์ด 9๊ฐ์ ์คํธ๋ฆฌ๋จธ๊ฐ ๊ด๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ ์ ์กฐ์จํ๋ ์ฝ๋๋ค์ดํฐ๊ฐ ์์ด์ ๋ธ๋ก ๊ทธ๋ฃน์ด ๋ค ์ฐผ์ ๋ ๊ทธ๋ฃน์ ์ข ๋ฃํ๊ณ , ์๋ก์ด ๋ธ๋ก ๊ทธ๋ฃน์ ํ ๋นํ๋ ๋ฑ์ ์ผ์ ๊ด๋ฆฌํฉ๋๋ค. ํ์ผ์ ์ฝ์ ๋๋ DFSStripedInputStream์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด, ์ด๋ค ๋ด๋ถ ๋ธ๋ก์ ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ผ ์๋์ง ๊ณ์ฐํ๊ณ , ์ฌ๋ฌ DataNode์ ๋์์ ์์ฒญ์ ๋ ๋ฆฝ๋๋ค(๋ณ๋ ฌ ์ฝ๊ธฐ). ๋ง์ฝ ์ผ๋ถ ๋ธ๋ก์ ์ฅ์ ๊ฐ ์๊ฒผ๋ค๋ฉด ํจ๋ฆฌํฐ ๋ธ๋ก์ ํ์ฉํด์ ๋์ฝ๋ฉ(๋ณต๊ตฌ) ๊ณผ์ ์ ์ถ๊ฐ๋ก ์คํํฉ๋๋ค. ์ ๋ฆฌํ์๋ฉด, ํ์ผ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ๋ก๊ฐ ๋ธ๋ก ๊ทธ๋ฃน ๊ธฐ๋ฐ์ผ๋ก ๋ณ๋ ฌํ๋์ด ๋ ๋นจ๋ผ์ก์ผ๋ฉฐ, ์ฐ๊ธฐ๋ ๊ฐ ๋ด๋ถ ๋ธ๋ก๋ง๋ค ์คํธ๋ฆฌ๋จธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด DataNode์ ๋ณด๋ด๊ณ , ์ฝ๊ธฐ๋ ํ์ํ ๋ธ๋ก์ ๊ณ์ฐํด์ ๋ณ๋ ฌ๋ก ๊ฐ์ ธ์ค๊ณ , ์ฅ์ ๊ฐ ์์ผ๋ฉด ๋ณต๊ตฌ๋ ์ง์ํ๋ค๊ณ ํ ์ ์๊ฒ ์ต๋๋ค. ๋ค์์, DataNode ๊ฐ ํ์ฅ๋์์ต๋๋ค. DataNode๋ HDFS์์ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅํ๋ ๋ ธ๋์ ๋๋ค. ์ด๋ ์ด์ ์ฝ๋ฉ์ ์ฌ์ฉํ๋ฉด, ๋ฐ์ดํฐ ๋ธ๋ก๊ณผ ํจ๋ฆฌํฐ ๋ธ๋ก์ด ํจ๊ป ์ ์ฅ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, EC ๋ธ๋ก ์ค ํ๋๊ฐ ์คํจํ๋ฉด, ์ด ๋ธ๋ก์ ๋ณต๊ตฌํ๊ธฐ ์ํด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ถ๊ฐ ์์ (ECWorker)์ ์ํํฉ๋๋ค. NameNode๋ ์คํจํ EC ๋ธ๋ก์ ๊ฐ์งํ๊ณ , ์ด๋ฅผ ๋ณต๊ตฌํ DataNode๋ฅผ ์ ํํฉ๋๋ค. ์ดํ, ๋ณต๊ตฌ ์์ ์ด ์งํ๋ฉ๋๋ค. ์ด ์์ ์ ์ธ ๊ฐ์ง ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ฒซ ๋ฒ์งธ๋ ํ์ํ ๋ฐ์ดํฐ์ ํจ๋ฆฌํฐ ๋ธ๋ก๋ง์ ์ฝ์ด์์ ๋ณต๊ตฌ ์์ ์ ์ํ ๊ธฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ฉฐ, ๋ ๋ฒ์งธ๋ ์ฝ์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํฉ๋๋ค. ์ด ๋์ฝ๋ฉ ๊ณผ์ ์์ ๋๋ฝ๋ ๋ฐ์ดํฐ์ ํจ๋ฆฌํฐ ๋ธ๋ก์ด ํจ๊ป ๋ณต์๋ฉ๋๋ค. ๋ง์ง๋ง ์ธ ๋ฒ์งธ๋ก ๋์ฝ๋ฉ์ด ๋๋ ํ, ๋ณต๊ตฌ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ด ๋์ DataNode๋ก ์ ์ก๋์ด ๋ค์ ์ ์ฅ๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ErasureCoding ์ ์ฑ ์ ํ๋ฆฝํ์์ต๋๋ค. ErasureCodingPolicy ํด๋์ค์ ์บก์ํ๋ฅผ ํจ์ผ๋ก์จ, HDFS ํด๋ฌ์คํฐ์์ ๋ณต์ (Replication)์ ์ด๋ ์ด์ ์ฝ๋ฉ(EC)์ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ A๋ ๋ณต์ ๋ฐฉ์์ผ๋ก ๋ด๊ฒฐํจ์ฑ์ ์ง์ํ๊ณ , ํ์ผ B๋ ์ด๋ ์ด์ ์ฝ๋ฉ ๋ฐฉ์์ผ๋ก ๋ด๊ฒฐํจ์ฑ์ ์ง์ํ ์ ์์ต๋๋ค. Hadoop github ErasureCodingPolicy โถ โข Shell Script ๊ฐ์ ๊ธฐ์กด์๋ Hadoop์ ๊ฐ ์คํฌ๋ฆฝํธ ํ์ผ์์ ๋ณ๋๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, hdfs-daemon.sh, yarn-daemon.sh์ ๊ฐ์ ์คํฌ๋ฆฝํธ์์ ๊ฐ๊ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์์ต๋๋ค. ๋ง์ฝ ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ๋ฌ ๊ณณ์ ํฉ์ด์ ธ ์์ผ๋ฉด ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ชจ๋ Hadoop ์ ธ ์คํฌ๋ฆฝํธ๊ฐ hadoop-env.sh๋ฅผ ์คํํ๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋์ ํ์ผ์์ ๋ชจ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ํ, Hadoop์์ ๋ฐ๋ชฌ์ ์์ํ๊ณ ์ค์งํ๋ ๋ฐฉ์์ด ๊ฐ์ ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์กด์๋ hdfs-daemon.sh์ ๊ฐ์ ๊ฐ๋ณ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ชฌ์ ์์ํ๊ฑฐ๋ ์ค์งํด์ผ ํ์ต๋๋ค. ( ./sbin/hadoop-daemon.sh start namenode ) ์ด ๋ช ๋ น์ด๋ค์์ -daemon ์ต์ ์ ์ฌ์ฉํ์ฌ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐฉ์์ผ๋ก ๋ฐ๋ชฌ์ ์์ํ๊ฑฐ๋ ์ค์งํ ์ ์๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ( hdfs โdaemon start namenode ) ๊ทธ ์ธ์๋ ssh, ${HADOOP_CONF_DIR}, ์๋ฌ๋ฉ์์ง ๋ฑ์ด ๊ฐ์ ๋์์ต๋๋ค. โถ โฃ Shaded Client Jars Hadoop 2 ๋ฒ์ ์์๋ hadoop-client๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Hadoop ์ ํ๋ฆฌ์ผ์ด์ ์ด Hadoop์ ์ข ์์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๊ฒฝ๋ก์ ์ถ๊ฐํ๋๋ก ํ์ต๋๋ค. ์ด๋, ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ ๋, ๊ทธ ์ฐธ์กฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Hadoop์ด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจ๋๋ฉด์, ๋ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. Hadoop 3์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด hadoop-client-api์ hadoop-client-runtime์ด๋ผ๋ ์๋ก์ด ์ํฐํฉํธ๋ฅผ ๋์ ํ์ต๋๋ค. ๐ก hadoop-client-api ์ด ์ํฐํฉํธ๋ ์ปดํ์ผ ๋ฒ์๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํ์ผํ ๋๋ง ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์: Hadoop ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๋์ ํ์ํ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํฌํจํ์ง๋ง, ์ค์ ์คํ ์์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๐ก hadoop-client-runtime ์ด ์ํฐํฉํธ๋ ๋ฐํ์ ๋ฒ์๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ ์ค์ ๋ก ํ์ํ Hadoop์ ์ข ์์ฑ์ ํฌํจํฉ๋๋ค. ์ด ์ํฐํฉํธ๋ Hadoop์ ๋ชจ๋ ์ข ์์ฑ์ ๋จ์ผ JAR ํ์ผ๋ก ๋ฌถ์ด์ ์ ๊ณตํฉ๋๋ค. ์ด๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๊ฒฝ๋ก๋ก ๋์ถ๋๋ Hadoop์ ์ข ์์ฑ์ ์์ ํ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์์๋ฅผ ํ๋ ๋ค์ด๋ณด๋ฉด HBase๊ฐ ์์ต๋๋ค. HBase๋ Hadoop๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ์์คํ ์ธ๋ฐ, Hadoop์ ๊ตฌํ ์ข ์์ฑ ์์ด Hadoop ํด๋ฌ์คํฐ์ ํต์ ์ ํ ์ ์์ต๋๋ค. ์ด์ ์๋ HBase๊ฐ Hadoop ํด๋ฌ์คํฐ์ ํต์ ํ๋ ค๋ฉด Hadoop์ ์ข ์์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐํด์ผ ํ๊ณ , ๋ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์์ต๋๋ค. Hadoop 3์์๋ HBase๊ฐ Hadoop์ ์ข ์์ฑ์ ํฌํจํ์ง ์๊ณ , ์์ ์ฒ๋ฆฌ๋ Hadoop ํด๋ผ์ด์ธํธ API๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ผ๋ก Hadoop ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์์ต๋๋ค. โถ โค Opportunistic Containers ์ ์ง์ Opportunistic Containers ๋ YARN์์ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ๋๋ผ๋ ์คํ์ ์๋ํ๋ ์ปจํ ์ด๋๊ฐ ๋์ ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ๋๊ธฐ ์ํ๋ก ๋จ์ ์๋ค๊ฐ, ๋ฆฌ์์ค๊ฐ ํ ๋น๋๋ฉด ์คํ๋ฉ๋๋ค. ์ด ์ปจํ ์ด๋๋ Guaranteed Containers์ ๋น๊ตํ์ฌ ์ฐ์ ์์๊ฐ ๋ฎ์ต๋๋ค. ์ฆ, ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ๋ฉด Guaranteed Containers๊ฐ ๋จผ์ ์คํ๋๊ณ , ๊ทธ ํ์ Opportunistic Containers๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ฌํ ์ปจํ ์ด๋์ ๋์ ์ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋ฌ์คํฐ ์ฌ์ฉ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค. ( ๋ํ, ๋ถ์ฐ ์ค์ผ์ค๋ง ์์ ์์๋ ์ง์ํฉ๋๋ค. ) โถ โฅ MapReduce ์ต์ ํ Hadoop 3์์๋ MapReduce ์์ ์ ์ฑ๋ฅ ํฅ์์ ์ํด ๋งต ์ถ๋ ฅ ์์ง๊ธฐ(map output collector)์ ๋ํ ๋ค์ดํฐ๋ธ(Java ์ธ๋ถ, ์ฃผ๋ก C/C++ ๊ธฐ๋ฐ) ๊ตฌํ์ ์ถ๊ฐํ์์ต๋๋ค. ์ด ์ต์ ํ๋ ์ ํ(shuffle) ์์ ์ด ๋ง์ ๊ฒฝ์ฐ, ์์ ์๋๋ฅผ 30% ์ด์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, Hadoop 3๋ NativeMapOutputCollector๋ผ๋ ๋ค์ดํฐ๋ธ ์ปดํฌ๋ํธ๋ฅผ MapTask์ ์ถ๊ฐํ์์ต๋๋ค. ์ด๋ ๋งคํผ๊ฐ ๋ฐฉ์ถํ๋ (key, value) ์์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ ๋ ฌ(sort), ์คํ(spill), IFile ์ง๋ ฌํ ๊ณผ์ ์ ๋ชจ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ํํฉ๋๋ค. ์ด๋ฌํ ๋ค์ดํฐ๋ธ ์ต์ ํ๋ JNI(Java Native Interface)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์ด, ์๋ฐ๋ง์ผ๋ก ์ฒ๋ฆฌํ ๋๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋๋ก ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. Hadoop github NativeMapOutputCollector ์์์ ์ดํด๊ฐ ์๊ฐ ์ ์๋ ์ฉ์ด๋ฅผ ์กฐ๊ธ ๋ ์ ๋ฆฌํ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ์์ผ๋ก Map Reduce ๊ฐ๋ ์ ๊ณต๋ถํ๋๋ฐ ์์ด์ ์ค์ํฉ๋๋ค. Spill(์คํ)์ ๋งต ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ด๊ณผํ ๋, ๋ฒํผ์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์์ ํ์ผ๋ก ๊ธฐ๋กํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. MapReduce ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ผ์ ์์ค ์ด์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ด๋ฉด ์๋์ผ๋ก spill ์์ ์ ์ํํฉ๋๋ค. ์คํ์ด ์์ฃผ ๋ฐ์ํ๋ฉด ๋์คํฌ I/O ๋น์ฉ์ด ์ฆ๊ฐํ์ฌ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. Shuffle(์ ํ)์ ๋งต ๋จ๊ณ์์ ์์ฑ๋ (key, value) ์๋ค์ ๋ฆฌ๋์ค ์์ ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋์ํค๊ณ , ์ด๋ฅผ ํค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ์ ํ ๊ณผ์ ์ MapReduce ์ ์ฒด ์์ ์ค ๊ฐ์ฅ ๋น์ฉ์ด ๋ง์ด ๋๋ ๋จ๊ณ ์ค ํ๋์ ๋๋ค. ๋คํธ์ํฌ ์ ์ก๊ณผ ๋์คํฌ ์ฐ๊ธฐยท์ฝ๊ธฐ, ์ ๋ ฌ ๊ณผ์ ์ด ๋ณต์กํ๊ฒ ์ฝํ ์๊ธฐ ๋๋ฌธ์, ์ด ๋ถ๋ถ์ ์ต์ ํ๊ฐ ์ ์ฒด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. โถ โฆ 2๊ฐ ์ด์์ NameNode ์ง์ Hadoop V2์์๋ HDFS NameNode HA ์ํคํ ์ฒ๊ฐ ๋จ์ผ ํ์ฑ NameNode์, ๋จ์ผ ๋๊ธฐ NameNode๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ์ํคํ ์ฒ๋ ์ธ ๊ฐ์ JournalNode๋ก ์ด๋ฃจ์ด์ง ์ฟผ๋ผ(quorum)์ ํธ์ง ๋ก๊ทธ(edit log)๋ฅผ ๋ณต์ ํ์ฌ, ํ๋์ NameNode์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์๋น์ค๋ฅผ ์ง์ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ดํ ๋น์ฆ๋์ค ํฌ๋ฆฌํฐ์ปฌ ํ๊ฒฝ์์๋ ํ๋ ์ด์์ ์ฅ์ ๋ฅผ ๊ฒฌ๋ ์ ์๋ ๋ ๋์ ์์ค์ ๋ด๊ฒฐํจ์ฑ(fault tolerance)์ด ์๊ตฌ๋์์ต๋๋ค. ์ด์ ๋ฐ๋ผ Hadoop V3์์๋ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋๊ธฐ(standby) NameNode๋ฅผ ์คํํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ํ์ฅํ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 3๊ฐ์ NameNode(1๊ฐ์ ํ์ฑ(active), 2๊ฐ์ ๋๊ธฐ(standby))์ 5๊ฐ์ JournalNode๋ก ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ์์๋ ์ต๋ 2๊ฐ์ NameNode ์ฅ์ ๋ฅผ ํ์ฉํ ์ ์์ด, ์์คํ ์ ์์ ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. 2๊ฐ ์ด์์ NameNode ๋ฅผ ์ง์ํ ์ ์๊ฒ ํด์ฃผ๋ JournalNode ์ ๋ํด์ ๊ฐ๋จํ ๊ฐ์๋ฅผ ์ ๋ฆฌํ๋ฉด, HDFS ๊ณ ๊ฐ์ฉ์ฑ ์ํคํ ์ฒ์์ NameNode๋ค์ ํธ์ง ๋ก๊ทธ(edit log)๋ฅผ ์ ์ฅํ๊ณ ๋๊ธฐํํ๋ ์ญํ ์ ํฉ๋๋ค. ํ์ฑ NameNode๊ฐ ํ์ผ ์์คํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ํด๋น ๋ณ๊ฒฝ์ฌํญ์ JournalNode์ ๋ณต์ ํ์ฌ ๊ธฐ๋กํฉ๋๋ค. ๋๊ธฐ NameNode๋ ์ด JournalNode๋ก๋ถํฐ ํธ์ง ๋ก๊ทธ๋ฅผ ์ฝ์ด ๋ค์ฌ ํ์ฑ NameNode์ ํญ์ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. JournalNode๋ ๋ณ๋์ ์ ์ฅ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์์ ์ ์ธ ์ฅ์ ๋ณต๊ตฌ๋ฅผ ์ํด ํ์ ๊ฐ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ฟผ๋ผ(Quorum)์ ๋ถ์ฐ ์์คํ ์์ ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด ํ์ํ ์ต์ํ์ ๋์ ์๋ฅผ ์๋ฏธํฉ๋๋ค. HDFS์์๋ JournalNode ์งํฉ์์ ๊ณผ๋ฐ์ ์ด์์ ์๋ต์ ๋ฐ์์ผ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์์ ์ผ๋ก ๊ธฐ๋ก๋์๋ค๊ณ ์ธ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด 5๊ฐ์ JournalNode๋ฅผ ๊ตฌ์ฑํ ๊ฒฝ์ฐ, 3๊ฐ ์ด์์ ๋ ธ๋๊ฐ ์๋ตํด์ผ ์ฟผ๋ผ์ด ์ฑ๋ฆฝํฉ๋๋ค. ( ๋ง์น ์ฃผํคํผ์ ๊ฐ์ต๋๋ค. ) ์ด๋ฌํ ๋ฐฉ์์ ์ผ๋ถ ๋ ธ๋๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผ์ผ๋ ์์คํ ์ ์ฒด๊ฐ ์์ ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. โถ โง ๊ธฐ๋ณธ ํฌํธ๋ฒํธ ๋ณ๊ฒฝ Hadoop V2์์๋ ์ฌ๋ฌ Hadoop ์๋น์ค์ ๊ธฐ๋ณธ ํฌํธ๊ฐ Linux์ ์์ ํฌํธ ๋ฒ์(32768โ61000) ๋ด์ ์กด์ฌํ์ต๋๋ค. ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด ํน์ ํฌํธ ๋ฒํธ๋ฅผ ๋ช ์ํ์ง ์๋ ๊ฒฝ์ฐ, ์ด ์์ ํฌํธ ๋ฒ์ ๋ด ํฌํธ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ก ์ธํด ์๋น์ค๊ฐ ์์ํ ๋ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ํฌํธ ์ถฉ๋์ด ๋ฐ์ํ์ฌ ํฌํธ์ ๋ฐ์ธ๋ฉํ ์ ์๋ ๋ฌธ์ ๊ฐ ์ข ์ข ๋ฐ์ํ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, Hadoop 3์์๋ ์ฌ๋ฌ ํต์ฌ ์๋น์ค(NameNode, Secondary NameNode, DataNode ๋ฑ)์ ๊ธฐ๋ณธ ํฌํธ๊ฐ ์์ ํฌํธ ๋ฒ์ ๋ฐ๊นฅ์ผ๋ก ์ด๋๋์์ต๋๋ค. ์ด๋ก์จ ์๋น์ค ๊ฐ ํฌํธ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ณ ์์คํ ์์ ์ฑ์ด ํฅ์๋์์ต๋๋ค. ๋ํ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ฃผ์ ํฌํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Daemon App Hadoop 2.x Port Hadoop 3 Port NameNode Hadoop HDFS NameNode 8020 9820 ย Hadoop HDFS NameNode HTTP UI 50070 9870 ย Hadoop HDFS NameNode HTTPS UI 50470 9871 Secondary NN Secondary NameNode HTTP 50091 9869 ย Secondary NameNode HTTP UI 50090 9868 DataNode Hadoop HDFS DataNode IPC 50020 9867 ย Hadoop HDFS DataNode 50010 9866 ย Hadoop HDFS DataNode HTTP UI 50075 9864 ย Hadoop HDFS DataNode HTTPS UI 50475 9865 โถ โจ ํ์ผ ์์คํ ์ปค๋ฅํฐ ์ง์ Hadoop์ Microsoft Azure Data Lake ๋ฐ Aliyun Object Storage System๊ณผ์ ํตํฉ์ ์ง์ํฉ๋๋ค. ์ด์ ์ด ๋ ์์คํ ์ Hadoop ํธํ ํ์ผ ์์คํ (Hadoop Compatible File System, HCFS)์ ๋์ฒด ์ ์ฅ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จผ์ Microsoft Azure Data Lake ํตํฉ์ด ์ถ๊ฐ๋์๊ณ , ์ดํ์ Aliyun Object Storage System ํตํฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. โถ โฉ DataNode ๋ด๋ถ ๋ฐธ๋ฐ์ ๊ธฐ์กด HDFS ๊ตฌ์กฐ์์ DataNode ๋ ํ๋์ DataNode ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋์คํฌ๋ฅผ ๊ด๋ฆฌํ์์ต๋๋ค. ( ํ๋์ ์๋ฒ์ HDD, SDD ๋ฑ ์ฌ๋ฌ ๋์คํฌ๋ฅผ ๋ฌ ์ ์์ ) ๊ทธ๋ฌ๋, ํ์ผ์ ์ ์ฅํ ๋ Hadoop ์ ๋ชจ๋ ๋์คํฌ์ ๊ท ๋ฑํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์์ผ ์ ์ฅํฉ๋๋ค. ๊ทธ๋์ ๋์คํฌ๋ง๋ค ๋ฐ์ดํฐ๊ฐ ๋น์ทํ ๋น์จ๋ก ์ฑ์์ง๋๋ค. ์ด๋ฌ๋ฉด, ์ ๋์คํฌ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๋์คํฌ๋ฅผ ๊ต์ฒดํ๋ฉด DataNode ๋ด์ ๋์คํฌ ๊ฐ ๋ฐ์ดํฐ ๋ถํฌ ๋ถ๊ท ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ธฐ์กด์ HDFS Balancer ๋ ๋ ธ๋ ๊ฐ ๋ฐ์ดํฐ ๊ท ํ๋ง ์กฐ์ ํ ์ ์์์ง, ํ๋์ DataNode ์์์์ ๋์คํฌ๋ค ์ฌ์ด ๊ท ํ์ ์กฐ์ ํ ์ ์์์ต๋๋ค. ํ์ง๋ง ํ๋ก V3์์๋ DataNode ๋ด๋ถ ๋์คํฌ ๊ฐ ๋ฐ์ดํฐ ๋ถํฌ ๋ถ๊ท ํ๋ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์๋ก์ด ๊ธฐ๋ฅ์ธ HDFS ๋์คํฌ ๋ฐธ๋ฐ์(Disk Balancer)๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ, ์ด ๋์คํฌ ๋ฐธ๋ฐ์๋ CLI(Command Line Interface) ๋ช ๋ น์ด๋ก ์คํํ ์ ์์ต๋๋ค. ๋จผ์ DataNode ์์ ๋์คํฌ๋ค ์ฌ์ด์ ๋ฐ์ดํฐ๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถํฌ๋๋๋ก ์ด๋์ํต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์กด ๋์คํฌ๊ฐ 90% ์ฐจ ์๊ณ ์ ๋์คํฌ๊ฐ 5% ์ฐจ ์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ ๋ ๋ค ๋น์ทํ๊ฒ 50%, 50%๋ก ๋ง์ถ๋ ์์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด I/O ์ฑ๋ฅ์ด ํฅ์๋๊ณ , ๋์คํฌ ๊ณผ๋ถํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. hdfs diskbalancer -plan <DataNode๋ช > -out <ํ๋ํ์ผ> hdfs diskbalancer -execute <ํ๋ํ์ผ> โถ โช ๋ฐ๋ชฌ ๋ฐ ์์ Heap ๊ด๋ฆฌ ์ฌ์์ Hadoop 3์์๋ ๋ฐ๋ชฌ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ MapReduce ์์ ์ ๊ด๋ จ๋ ์ค์ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ๋ณ๊ฒฝ์ด ์ ์ฉ๋์์ต๋๋ค. ๋จผ์ ๋ฐ๋ชฌ Heap ํฌ๊ธฐ ์ค์ ๋ฐฉ์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ธฐ์กด์๋ HADOOP_HEAPSIZE ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ผ๋, ์ด์ ๋ ์ด ๋ฐฉ์์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. HADOOP_HEAPSIZE_MAX๋ JVM์ ์ต๋ ํ ํฌ๊ธฐ(Xmx)๋ฅผ ์ง์ ํฉ๋๋ค. HADOOP_HEAPSIZE_MIN๋ JVM์ ์ด๊ธฐ ํ ํฌ๊ธฐ(Xms)๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ๋ณ์๋ค์ ๋จ์(MB, GB ๋ฑ)๋ฅผ ์ง์ํ๋ฉฐ, ์ซ์๋ง ์ ๋ ฅํ ๊ฒฝ์ฐ ๋ฉ๊ฐ๋ฐ์ดํธ(MB)๋ก ๊ฐ์ฃผํฉ๋๋ค. ๋ํ, Hadoop์ ์ด์ ํธ์คํธ ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ์ ์ ํ ํ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ , MapReduce ์์ Heap ํฌ๊ธฐ ๊ด๋ฆฌ๋ ๊ธฐ์กด์ ๋นํด ๋จ์ํ ๋์์ต๋๋ค. ์ด์ ์์ ๊ตฌ์ฑ(mapreduce.map.memory.mb, mapreduce.reduce.memory.mb)๊ณผ Java ์ต์ (-Xmx)์ ๋์์ ์ค์ ํ ํ์๊ฐ ์์ต๋๋ค. ํ๋์ ์ค์ ๋ง์ผ๋ก๋ Heap ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. ํญ๋ชฉ Hadoop 2.x ๋ฐฉ์ Hadoop 3.x ์ดํ ๋ณ๊ฒฝ์ ๋ฐ๋ชฌ ํ ํฌ๊ธฐ ์ค์ ๋ฐฉ์ HADOOP_HEAPSIZE ์ฌ์ฉ HADOOP_HEAPSIZE_MAX, HADOOP_HEAPSIZE_MIN ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ๋จ์ ์ง์ ์ซ์๋ง ์ ๋ ฅ (MB๋ก ๊ฐ์ฃผ) MB, GB ๋ฑ์ ๋จ์ ๋ช ์ ๊ฐ๋ฅ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ๋ ์์ (์๋ ์ค์ ํ์) ํธ์คํธ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋ ์กฐ์ ๊ฐ๋ฅ ์์ ํ ์ค์ ๋ฐฉ์ ๊ตฌ์ฑ๊ฐ๊ณผ Java ์ต์ ๋ชจ๋ ๋ช ์ ํ์ ํ๋๋ง ์ง์ ํด๋ ์๋ ์ ์ฉ๋จ ๊ธฐ์กด ์ค์ ํธํ์ฑ ๊ธฐ์กด ๋ฐฉ์ ์ ์ง ๊ธฐ์กด ๊ตฌ์ฑ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๊ทธ๋๋ก ์๋ํจ โถ โซ YARN TimeLine Service V2 YARN Timeline Service๋ YARN ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ์ํ, ์ด๋ฒคํธ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ ์ฅํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค. ๋จ์ํ ์คํ ์ํ๋ฟ ์๋๋ผ, ๊ฐ ํ์คํฌ(Task)์ ์์ธ ์คํ ๋ด์ญ, ์ค๋ฅ ๋ฐ์ ๊ธฐ๋ก, ์์ ์ฌ์ฉ ํต๊ณ ๋ฑ ์ ๋ฐํ ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ ์ฅ์์ ๊ธฐ๋กํจ์ผ๋ก์จ, ์ด์์๋ ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ถ์ํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋๋ก ๋์ต๋๋ค. YARN ํ๊ฒฝ์์ ์์ญ~์์ฒ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์คํ๋๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฐฑ ๊ฐ์ ์ปจํ ์ด๋์ ํ์คํฌ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฐ ์ํฉ์์ ๋จ์ํ ResourceManager์ UI๋ง์ผ๋ก๋ ์คํ ๋ด์ญ์ ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ค MapReduce ์์ ์ด ์คํจํ๋์ง, Spark ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ ์ปจํ ์ด๋๊ฐ ์์ ๋ถ์กฑ์ผ๋ก ์ข ๋ฃ๋์๋์ง, ๋๋ ํ์คํฌ ์ํ ์๊ฐ์ด ํ๊ท ๋ณด๋ค ๋น์ ์์ ์ผ๋ก ๊ธธ์ด์ง ๊ฒฝ์ฐ๊ฐ ์ด๋์ธ์ง ๋ฑ์ ํ์ ํด์ผ ํ ๋, Timeline Service๋ ํ์์ ์ ๋๋ค. YARN Timeline Service๋ ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์ค๊ณ๋ ์ปดํฌ๋ํธ๋ก, ์ฒ์์๋ v1 ๋ฒ์ ์ผ๋ก ๋จ์ํ ๋จ์ผ ์๋ฒ ๊ตฌ์กฐ์์ ์์๋์์ต๋๋ค. Timeline Service v1์ ๋ชจ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ JSON ํํ๋ก ์์งํ ๋ค, HDFS์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค. ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ค์ ์ด ๋น๊ต์ ์ฌ์ ๊ธฐ ๋๋ฌธ์ ์๊ท๋ชจ ๋๋ ํ ์คํธ ํ๊ฒฝ์์๋ ์ ํฉํ์ง๋ง, ๋๊ท๋ชจ ํด๋ฌ์คํฐ์์๋ ์ฌ๋ฌ ํ๊ณ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค. ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ํ์ฅ์ฑ ๋ถ์กฑ๊ณผ ๋ณ๋ชฉํ์์ด์์ต๋๋ค. ์ฝ๊ธฐ์ ์ฐ๊ธฐ ์์ฒญ์ด ๋ชจ๋ ํ๋์ ์๋ฒ ์ธ์คํด์ค๋ก ์ง์ค๋๋ค ๋ณด๋, ์์ ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ์ด๋ฒคํธ ์ ์ค, ์๋ต ์ง์ฐ, ์์คํ ๊ณผ๋ถํ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ต๋๋ค. ๋ํ UI๋ REST API๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ์กฐํํ ๋๋ ์ฑ๋ฅ ์ ํ๊ฐ ์ฆ์์ต๋๋ค. ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด Hadoop 3.0๋ถํฐ Timeline Service v2 (TSv2)๊ฐ ๋์ ๋์์ต๋๋ค. TimeLine Service V2 (์ดํ TSv2) ๋ ํ์ฅ์ฑ๊ณผ ์ ๋ขฐ์ฑ ํฅ์, ํ๋ฆ๊ณผ ์ง๊ณ๋ฅผ ํตํ ์ฌ์ฉ์ฑ ๊ฐ์ ์ด๋ผ๋ ๋ ๊ฐ์ง ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์ ๊ทธ๋ ์ด๋ ๋์์ต๋๋ค. v.2๋ ๋ถ์ฐ ์์ฑ๊ธฐ(distributed writer) ์ํคํ ์ฒ๋ฅผ ์ฑํํ์ฌ ๋ฐ์ดํฐ ์์ง๊ณผ ์ ๊ณต ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ง์ ๊ฐ YARN ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ํ๋์ ์์ง๊ธฐ(installer collector)๋ฅผ ๋์ด ๋ถ์ฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ ์ ๊ณต์ REST API๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ณ๋์ ํ๋ ๊ธฐ ์ธ์คํด์ค๊ฐ ์ ๋ดํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์ํ์ ํ์ฅ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ๋ฅผ ๋ถ์ฐ์์ผ ์ฑ๋ฅ ์ ํ ์์ด ์์ ์ ์ธ ์ด์์ ์ง์ํฉ๋๋ค. ๋ฐฑ์ ์ ์ฅ์๋ก๋ Apache HBase๋ฅผ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. Apache HBase๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์ ๋ํด ์ฐ์ํ ์๋ต ์๊ฐ์ ์ ์งํ๋ฉด์๋ ๋๊ท๋ชจ๋ก ์ ํ์ฅ๋๊ธฐ ๋๋ฌธ์ ํ์๋ผ์ธ ์๋น์ค v.2์ ์ ์ฅ์๋ก ์ ํฉํฉ๋๋ค. ๋ค์, v2 ์ฌ์ฉ์ฑ ํฅ์์ ๋ํด ์ด์ผ๊ธฐํ์๋ฉด, ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ ๊ฐ๋ณ YARN ์ ํ๋ฆฌ์ผ์ด์ ๋ณด๋ค๋, ์ฌ๋ฌ YARN ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋์ ๋ ผ๋ฆฌ์ ๋จ์, ์ฆ โํ๋ฆ(flow)โ ์์ค์ ์ ๋ณด์ ๋ ๋ง์ ๊ด์ฌ์ ๊ฐ์ง๋๋ค. ์ค์ ๋ก ํ๋์ ์์ ์ ์๋ฃํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ YARN ์ ํ๋ฆฌ์ผ์ด์ ์ด ์งํฉ์ ์ผ๋ก ์คํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด์ ๋ฐ๋ผ, ํ์๋ผ์ธ ์๋น์ค v.2๋ ์ด๋ฌํ ํ๋ฆ ๊ฐ๋ ์ ๋ช ์์ ์ผ๋ก ์ง์ํฉ๋๋ค. ์ฌ์ฉ์๋ ํ๋ฆ ๋จ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฒด ์์ ์ ์งํ ์ํฉ์ด๋ ์ฑ๋ฅ์ ๋ ํจ๊ณผ์ ์ผ๋ก ํ์ ํ ์ ์์ต๋๋ค. ๋ํ, ํ์๋ผ์ธ ์๋น์ค v.2๋ ํ๋ฆ ์์ค์์ ๋ฉํธ๋ฆญ(metric) ์ง๊ณ๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ณ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์๊ฐ ์๋, ์ ์ฒด ํ๋ฆ ๋จ์๋ก ๋ฆฌ์์ค ์ฌ์ฉ๋, ์ฒ๋ฆฌ ์๊ฐ ๋ฑ์ ๋ฉํธ๋ฆญ์ ํตํฉ์ ์ผ๋ก ํ์ธํ ์ ์์ด, ์ฌ์ฉ์ ์ ์ฅ์์ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ์ ์ฉํ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค. ์ถ์ฒ : Yarn TimeLine V2 YARN ํ์๋ผ์ธ ์๋น์ค v.2๋ ๋ถ์ฐ ์ํคํ ์ฒ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์ด ๋ฐ์ดํฐ ์์ง๊ณผ ์ ์ฅ, ์กฐํ์ ํจ์จ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ทน๋ํํฉ๋๋ค. ์ด ์๋น์ค๋ ์ฌ๋ฌ ๊ฐ์ ์์ง๊ธฐ(์์ฑ๊ธฐ)๋ฅผ ํ์ฉํ์ฌ ๋ฐฑ์๋ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ฌํ ์์ง๊ธฐ๋ค์ ๋ถ์ฐ๋์ด ์์ผ๋ฉฐ, ๊ฐ ์์ง๊ธฐ๋ ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ์ ํจ๊ป ๋์ผํ ๋ ธ๋์ ๋ฐฐ์น๋ฉ๋๋ค. ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ฆฌ์์ค ๊ด๋ฆฌ์(ResourceManager)์ ํ์๋ผ์ธ ์์ง๊ธฐ๋ฅผ ์ ์ธํ๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ๋ฐฐ์น๋ ํ์๋ผ์ธ ์์ง๊ธฐ๋ก ์ ์ก๋ฉ๋๋ค. ์ง์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ๋ฐฐ์น๋ ํ์๋ผ์ธ ์์ง๊ธฐ๋ก ์ง์ ๊ธฐ๋กํฉ๋๋ค. ๋ํ, ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ฅผ ์คํ ์ค์ธ ๋ค๋ฅธ ๋ ธ๋์ ๋ ธ๋ ๊ด๋ฆฌ์(NodeManager)๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์คํฐ๊ฐ ์์นํ ๋ ธ๋์ ํ์๋ผ์ธ ์์ง๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ฌ ๊ธฐ๋กํฉ๋๋ค. ๋ฆฌ์์ค ๊ด๋ฆฌ์๋ ์์ฒด์ ์ธ ํ์๋ผ์ธ ์์ง๊ธฐ๋ฅผ ๋ฐ๋ก ์ ์งํ๋ฉฐ, ์์คํ ์ ์ฒด์ ๋ํ ๊ณผ๋ํ ๋ฐ์ดํฐ ๊ธฐ๋ก์ ๋ฐฉ์งํ๊ธฐ ์ํด YARN์ ์ผ๋ฐ์ ์ธ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ๋ง ๊ธฐ๋กํฉ๋๋ค. ํํธ, ํ์๋ผ์ธ ๋ฆฌ๋๋ ์์ง๊ธฐ์๋ ๋ถ๋ฆฌ๋ ๋ ๋ฆฝ๋ ๋ฐ๋ชฌ ํ๋ก์ธ์ค๋ก ๋์ํฉ๋๋ค. ์ด ๋ฆฌ๋๋ REST API๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ฟผ๋ฆฌ์ ์๋ตํ๋ ์ญํ ์ ํ๋ฉฐ, ์ฝ๊ธฐ ์์ฒญ ์ฒ๋ฆฌ์ ์ ๋ ํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ์์ ํ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์์คํ ์ ํ์ฅ์ฑ์ ๋์ฑ ๋์ ๋๋ค. ํด๋น ๋ด์ฉ์ ๋ํ ์์ธํ ์ด์ผ๊ธฐ๋ ์ถํ์ YARN ํํธ์์ ์์ธํ ํฌ์คํ ํ๊ฒ ์ต๋๋ค. โ โ๏ธ ๊ฒฐ๋ก ์ด๋ฒ ํฌ์คํ ์์๋ Hadoop ์ด ์ ๋ฑ์ฅํ๊ฒ ๋์๋์ง, ๊ทธ ์ด์ ์์คํ ์ ์ด๋ป๊ฒ ๋ฐ์ ํด ์๊ณ ์ด๋ค ๋ฌธ์ ๊ฐ ์์๋์ง๋ฅผ ์์๋ณด์์ต๋๋ค. ๋จ์ํ Hadoop ์ ๋ํด ๋ฐ๋ก ๊ณต๋ถํ๋ ๊ฒ๋ณด๋ค, ๋ถ์ฐ ์์คํ ๊ทธ ์์ฒด์ ๋ํ์ฌ ๋จผ์ ๊ณต๋ถํ๊ณ Hadoop ์ ๊ณต๋ถํ๋ค๋ฉด, Hadoop ๋ฑ์ฅ์ ํ์คํ ๋ฆฌ๋ฅผ ์ ์ ์๊ณ , ๊ทธ๋ก ์ธํด ๋ ์ ์ดํดํ ์ ์๊ฒ ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ณต๋ถํ ๋ด์ฉ์ ํ ๋๋ก ๊ธ์ ํฌ์คํ ํ์๊ธฐ ๋๋ฌธ์, ๊ณ์ ๊น๊ฒ ๋ ๊ณต๋ถํ๊ณ ๊ธ์ ๋จ๊ธธ ๊ฒ์ด๋ฉฐ, ํด๋น ๊ธ๋ ๊ณ์ ๋ค์ ์ฝ๊ณ ๋ณต์ต ํ ์์ ์ ๋๋ค. ๋ค์ ํฌ์คํ ์์๋ถํฐ๋ HDFS, Yarn, MapReduce ๋ฑ ๋ณธ๊ฒฉ์ ์ผ๋ก Hadoop ์ ๋ํด ์ ๋ฆฌํ ์์ ์ ๋๋ค. ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ค์ ํฌ์คํ ์์ ๋ต๊ฒ ์ต๋๋ค. :D โ ๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ ๐ 1. ํจ์คํธ ์บ ํผ์ค - ํ ๋ฒ์ ๋๋ด๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ์ด๊ฒฉ์ฐจ ํจํค์ง Online. ๐ 2. ๋ถ์ฐ์ฒ๋ฆฌ์์ ํด๊ฒฐํด์ผ ํ challenges ๐ 3. NoSQL ์ด๋? ๐ 4. CAP ์ด๋ก ์ ๋ํ ์นด์ฐ๋๋ผ์ ๋ชฝ๊ณ DB ๐ 5. ๋ชฝ๊ณ DB ๋ณต์ ๐ 6. ํ๋ก์ด๋? ๐ 7. Hadoop์ด๋ ๋ฌด์์ ๋๊น? ๐ 8. ํ๋ก 3.0์์ ๋ฌด์์ด ๋ฌ๋ผ์ก์๊น? ( Erasure Coding ์ ์ดํดํ๊ธฐ ์ข์ ๊ธ ) ๐ 9. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ
๐ ๊ฐ์ธ ๊ณต๋ถ
ยท 2025-02-15
<
>
Touch background to close