์ ๋ฒ ํฌ์คํ
์์๋, ํ๋ก์ด ์ด๋ป๊ฒ ๋ฑ์ฅํ๋์ง๋ฅผ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ดค์ต๋๋ค.
์ด๋ฒ์๋ ๊ทธ๋ฌํ ํ๋ก์ ํต์ฌ ์์๋ค์ ๋ํ์ฌ ๊ณต๋ถํ๊ณ ํฌ์คํ
ํ๊ฒ ์ต๋๋ค.
๐ ๋ถ์ฐ ์์คํ ์ ์ดํด์ ํ๋ก์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๐ 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%๋ฅผ ๋ณต์์ ์ํด ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ์ฐจ์ด๋ฅผ ๊ทน๋ช
ํ๊ฒ ๋ณผ ์ ์๋ ํ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ํ ์์ ์ค๋ช
ํ Striped Block ๊ตฌ์กฐ ๋๋ถ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ฏ๋ก,
ํ์ผ์ ์ฝ๋ ์ฑ๋ฅ์ด ๊ธฐ์กด๋ณด๋ค ๋ ๊ฐ์ ๋๋ ๊ฒฐ๊ณผ๋ ํจ๊ป ์ป์ ์ ์์ต๋๋ค.
ํด๋น ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์คํธํ ์ฑ๋ฅ ์งํ ์ฐธ๊ณ ์๋ฃ์ ๋๋ค.
โ Erasure Coding ์ ๋จ์
๋ฌผ๋ก ๋จ์ ๋ ์กด์ฌํฉ๋๋ค.
RAID์์์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋จ์ ๋ณต์ ๋ฐฉ์์ ๋นํด Erasure Coding ์ ๋ ๋ง์ ๊ณ์ฐ์ด ํ์ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ํจ๋ฆฌํฐ๋ฅผ ๊ณ์ฐํ๋ ์ธ์ฝ๋ฉ(encoding) ์์
์ด ํ์ํ๊ณ ,
์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ๋๋ ๋์ฝ๋ฉ(decoding) ์์
์ด ํ์ํ๊ธฐ ๋๋ฌธ์,
ํนํ ์ฐ๊ธฐ ์ฑ๋ฅ(write performance) ๋ฉด์์๋ ๊ธฐ์กด๋ณด๋ค ๋๋ ค์ง ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด ๋จ์ ๋ ์์ ํ ํด๊ฒฐ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค.
Intel์์ ์ ๊ณตํ๋ ISA-L encoder ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ์,
ํจ๋ฆฌํฐ ๊ณ์ฐ ์๋๊ฐ ๊ฐ์ ๋์ด ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ ์ ๋ ์ค์ผ ์ ์์์ต๋๋ค.
์ค์ ๋ก ์ธก์ ํด๋ณด๋ฉด, ์ฐ๊ธฐ ์ฑ๋ฅ์ ์ฝ 30% ์ ๋๋ง ๊ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
ํด๋น ์ฑ๋ฅ ์งํ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ 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 ์ ํด๋ฒ๋ฆฌ๋ฉด, ์ด๋ฏธ ์ฒ๋ฆฌ ์ค์ด๋ ์์ฒญ์ ๊ฐ์ ๋ก ์ข ๋ฃํ๋ฉด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์์์ด ์๊ธฐ๊ฑฐ๋, ์ข ๋ฃ ๋์ค ์ค๋ฅ ๋ฐ์ ์ ์ฌ์๋ ์คํจ, ๊ทธ๋ฆฌ๊ณ ์ฌํ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ์ ์ฒด๊ฐ ์ ์๊ฐ ๋์ ๋ฉ์ถ๋ ์ํฉ๊น์ง ๋ฐ์ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋๋ ์์ฒญ์ด ์ฌ์ฉ์์ ์๋ชป๋ 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 ์ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๐ ๊ณต๋ถ ์ฐธ๊ณ ์๋ฃ
๐ 2. HDFS NameNode RPC QoS ์ต์ ํ
๐ 3. Hadoop์ด๋ ๋ฌด์์ ๋๊น?
๐ 4. ํ๋ก 3.0์์ ๋ฌด์์ด ๋ฌ๋ผ์ก์๊น? ( Erasure Coding ์ ์ดํดํ๊ธฐ ์ข์ ๊ธ )
๐ 5. OREILLY ํ๋ก ์๋ฒฝ ๊ฐ์ด๋ 4ํ
๐ 7. NameNode High Availability with Quorum Journal Manager