
๐ Hadoop
-
์์ฉ HW๋ก ๊ตฌ์ถ๋ ์ปดํจํฐ ํด๋ฌ์คํฐ์์ ๋งค์ฐ ๊ฑฐ๋ํ ๋ฐ์ดํฐ์
์ ๋ถ์ฐ ์คํ ๋ฆฌ์ง์ ๋ถ์ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์คํ์์ค SW ํ๋ซํผ์ด๋ค.
-
An open source software platform for distributed storage and distributed processing of very large data sets on computer clusters built from commodity hardware
- HDFS : ๋ถ์ฐ ํ์ผ ์์คํ
- MapReduce: ๋ถ์ฐ ์ปดํจํ
์์คํ
-
๋ค์์ ๋
ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ ์์คํ
(Cluster)
- ๋ง์น ํ๋์ ๊ฑฐ๋ํ ์ปดํจํฐ์ฒ๋ผ ๋์
- ์ฌ์ค์ ๋ค์์ ์ปดํจํฐ๋ค์ด ๋ณต์กํ SW๋ก ํต์ ๋๋ค.
-
Hadoop 1.0
- HDFS์์ MapReduce๋ผ๋ ๋ถ์ฐ ์ปดํจํ
์์คํ
์ด ๋๋ ๊ตฌ์กฐ์ด๋ค.
-> MapReduce์์์ ๋ค์ํ ์ปดํจํ
์ธ์ด๋ค์ด ๋ง๋ค์ด์ง๋ค.
-
Hadoop 2.0
- ์ํคํ
์ฒ๊ฐ ํฌ๊ฒ ๋ณ๊ฒฝ๋์๋ค.
- YARN์ด๋ ์ด๋ฆ์ ๋ถ์ฐ์ฒ๋ฆฌ ์์คํ
์์์ ๋์ํ๋ APP์ด ๋์๋ค.
- Spark์ YARN์์์ APP LAYER๋ก ์คํ๋์๋ค.

๐ HDFS - ๋ถ์ฐ ํ์ผ ์์คํ
-
๋ฐ์ดํฐ๋ฅผ ๋ธ๋ก๋จ์๋ก ๋๋์ด ์ ์ฅํ๋ค.
-> ๋ธ๋ก์ ํฌ๊ธฐ๋ 128MB(Default)
-
๋ธ๋ก ๋ณต์ ๋ฐฉ์(Replication)
- ๊ฐ ๋ธ๋ก์ 3 ๊ตฐ๋ฐ์ ์ค๋ณต ์ ์ฅ๋๋ค.
- Fault tolerance๋ฅผ ๋ณด์ฅํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ด ๋ธ๋ก๋ค์ ์ ์ฅ๋๋ค.
-
Hadoop 2.0 NameNode ์ด์คํ์ง์
- Active & Standby
-> ๋ ์ฌ์ด์ share edit log๊ฐ ์กด์ฌํ๋ค.
- Secondary NameNode๋ ์ฌ์ ํ ์กด์ฌํ๋ค.
๐ MapReduce - ๋ถ์ฐ ์ปดํจํ
๐ YARN
1. ๋ถ์ฐ ์ปดํจํ
์์คํ
: Hadoop 2.0(YARN 1.0)
2. YARN์ ๋์
-
์คํํ๋ ค๋ ์ฝ๋์ ํ๊ฒฝ ์ ๋ณด๋ฅผ RM(Resource Manager)์๊ฒ ๋๊ธด๋ค.
- ์คํ์ ํ์ํ ํ์ผ๋ค์ Application ID์ ํด๋นํ๋ HDFS ํด๋์ ๋ฏธ๋ฆฌ ๋ณต์ฌ๋๋ค.
-
RM์ NM(Node Manager)์ผ๋ก๋ถํฐ Container๋ฅผ ๋ฐ์ AM(Application Master)์ ์คํํ๋ค.
- AM์ ํ๋ก๊ทธ๋จ ๋ง๋ค ํ๋์ฉ ํ ๋น๋๋ ํ๋ก๊ทธ๋จ ๋ง์คํฐ์ ํด๋นํ๋ค.
-
AM์ ์
๋ ฅ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ ๋ฆฌ์์ค๋ฅผ RM์๊ฒ ์๊ตฌํ๋ค.
- RM์ Data Locality๋ฅผ ๊ณ ๋ คํด์ ๋ฆฌ์์ค(Container)๋ฅผ ํ ๋นํ๋ค.
-
AM์ ํ ๋น๋ฐ์ ๋ฆฌ์์ค๋ฅผ NM์ ํตํด Container๋ก Launchํ๊ณ ๊ทธ ์์์ ์ฝ๋๋ฅผ ์คํํ๋ค.
- ์ด ๋ ์คํ์ ํ์ํ ํ์ผ๋ค์ด HDFS์์ Container๊ฐ ์๋ ์๋ฒ๋ก ๋จผ์ ๋ณต์ฌํ๋ค.
-
๊ฐ Task๋ ์ํฉ์ ์ฃผ๊ธฐ์ ์ผ๋ก AM์๊ฒ ๋ณด๊ณ ํ๋ค. (Heartbeat)
- Task๊ฐ ์คํจํ๊ฑฐ๋ ๋ณด๊ณ ๊ฐ ์ค๋ ์๊ฐ ์์ผ๋ฉด Task๋ฅผ ๋ค๋ฅธ Container๋ก ์ฌ์คํํ๋ค.
3. Hadoop 1.0 vs. Hadoop 2.0
- ํ๋ก 2.0์์ ์๊ฐ๋ ํด๋ฌ์คํฐ ์์ ๊ด๋ฆฌ์๋ฅผ YARN์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.

4. Hadoop 3.0์ ํน์ง
-
YARN 2.0์ ์ฌ์ฉ
- YARN ํ๋ก๊ทธ๋จ๋ค์ ๋
ผ๋ฆฌ์ ์ธ ๊ทธ๋ฃน(ํ๋ก์ฐ๋ผ๊ณ ๋ถ๋ฅธ๋ค)์ผ๋ก ๋๋ ์ ์์๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์์ง ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ ์๋น ํ๋ก์ธ์ค๋ฅผ ๋๋ ์ ๊ด๋ฆฌ๊ฐ๋ฅํ๋ค.
- ํ์๋ผ์ธ ์๋ฒ์์ HBase๋ฅผ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํ๋ค.(Hadoop 2.1)
-
ํ์ผ ์์คํ
-
NameNode์ ๊ฒฝ์ฐ ๋ค์์ ์คํ ๋ฐ์ด NameNode๋ฅผ ์ง์ํ๋ค.
-
HDFS, S3, Azure Storage ์ด์์ธ๋ฐ Azure Data Lake Storage๋ฑ์ ์ง์ํ๋ค.
๐ MapReduce Programing
1. MapReduce Programing์ ํน์ง
-
๋ฐ์ดํฐ ์
์ Key, Value์ ์งํฉ์ด๋ฉฐ ๋ณ๊ฒฝ ๋ถ๊ฐํ๋ค. (Immutable)
-
๋ฐ์ดํฐ์กฐ์์ map๊ณผ reduce ๋ ๊ฐ์ ์คํผ๋ ์ด์
์ผ๋ก๋ง ๊ฐ๋ฅํ๋ค.
- ์ด ๋ ์คํผ๋ ์ด์
์ ํญ์ ํ๋์ ์์ผ๋ก ์ฐ์์ผ๋ก ์คํ๋๋ค.
- ์ด ๋ ์คํผ๋ ์ด์
์ ์ฝ๋๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ฑ์์ฃผ์ด์ผ ํ๋ค.
-
MapReduce System์ด Map์ ๊ฒฐ๊ณผ๋ฅผ Reduce๋จ์ผ๋ก ๋ชจ์์ค๋ค.
- ์ด ๋จ๊ณ๋ฅผ ๋ณดํต ์
ํ๋ง์ด๋ผ๊ณ ํ๋ฉฐ ๋คํธ์ํฌ๋จ์ ํตํ ๋ฐ์ดํฐ ์ด๋์ด ์๊ธด๋ค.

2. Map๊ณผ Reduce
- Map: (k, v) -> [(k', v')*]
- ์
๋ ฅ์ ์์คํ
์ ์ํด ์ฃผ์ด์ง๋ฉฐ ์
๋ ฅ์ผ๋ก ์ง์ ๋ HDFS ํ์ผ์์ ๋์ด์จ๋ค.
- ํค, ๋ฐธ๋ฅ ํ์ด๋ฅผ ์๋ก์ด ํค, ๋ฐธ๋ฅ ํ์ด ๋ฆฌ์คํธ๋ก ๋ณํ(Transformation)
- ์ธ๋ ฅ: ์
๋ ฅ๊ณผ ๋์ผํ ํค, ๋ฐธ๋ฅ ํ์ด๋ฅผ ๊ทธ๋๋ก ์ถ๋ ฅํด๋ ๋๊ณ ์ถ๋ ฅ์ด ์์ด๋ ๋๋ค.
- Reduce: (k', [v1', v2', v3', v4', ...]) -> (k'', v'')
- ์
๋ ฅ์ ์์คํ
์ ์ํด ์ฃผ์ด์ง๋ค.
-> ๋งต์ ์ถ๋ ฅ ์ค ๊ฐ์ ํค๋ฅผ ๊ฐ๋ ํค/๋ฐธ๋ฅ ํ์ด๋ฅผ ์์คํ
์ด ๋ฌถ์ด์ ์
๋ ฅ์ผ๋ก ๋ฃ์ด์ค๋ค.
- ํค์ ๋ฐธ๋ฅ ๋ฆฌ์คํธ๋ฅผ ์๋ก์ด ํค/๋ฐธ๋ฅ ํ์ด๋ก ๋ณํํ๋ค.
- SQL์ Group by์ ํก์ฌํ๋ค.
- ์ถ๋ ฅ์ด HDFS์ ์ ์ฅ๋๋ค.
3. MapReduce Program ๋์ ์์
- Word Count

4. MapReduce Programing ์์
-
Word Count Mapper
-
Map: (k, v) -> [(k', v')*]
- Transformation
- ํฌ, ๋ฐธ๋ฅ ํ์ด๋ฅผ ์๋ก์ด ํค, ๋ฐธ๋ฅ ํ์ด ๋ฆฌ์คํธ๋ก ๋ณํ
-
Input: (100, "the brave yellow lion")
-
Output: [("the", 1), ("brave", 1), ("yellow", 1), ("lion", 1)]
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
5. MapReduce Programing ์์
-
Word Count Reducer
-
Reduce: (k', [v1', v2', v3', v4', ...]) -> (k'', v'')
- SQL์ Group by์ ๋์ผํ๋ค
- ํค, ๋ฐธ๋ฅ ๋ฆฌ์คํธ๋ฅผ ์๋ก์ด ํค, ๋ฐธ๋ฅ ํ์ด๋ก ๋ณํํ๋ค.
-
Input: ("lion": [1, 1, 1])
-
Output: ("lion": 3)
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
6. MapReduce: Shuffling and Sorting
-
Shuffling
- Mapper์ ์ถ๋ ฅ์ Reducer๋ก ๋ณด๋ด์ฃผ๋ ํ๋ก์ธ์ค๋ฅผ๋งํ๋ค.
- ์ ์ก๋๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ๋คํธ์ํฌ ๋ณ๋ชฉ์ ์ด๋ํ๊ณ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค.
-
Sorting
- ๋ชจ๋ Mapper์ ์ถ๋ ฅ์ Reducer๊ฐ ๋ฐ์ผ๋ฉด ์ด๋ฅผ ํค๋ณ๋ก ์ํ
ํ๋ค.

7. MapReduce: Data Skew
- ๋ณ๋ ฌ์ฒ๋ฆฌ์ ํฐ ์๋ฏธ๊ฐ ์๋ค.
- ๊ฐ์ฅ ๋๋ฆฐ Task๊ฐ ์ ์ฒด ์ฒ๋ฆฌ ์๋๋ฅผ ๊ฒฐ์ ํ๋ค.
- ํนํ Reducer๋ก ์ค๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ ํฐ ์ฐจ์ด๊ฐ ์์ ์ ์๋ค.
- Group By๋ Join๋ฑ์ด ์ด์ ํด๋นํ๋ค.
- ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ Reducer์ ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์๋ฌ๋ฑ์ด ๋ ์ ์๋ค.
- ๋ฐ์ดํฐ ์์ง๋์ด๊ฐ ๊ณ ์ํ๋ ์ด์ ์ค์ ํ๋
- ๋น
๋ฐ์ดํฐ ์์คํ
์๋ ์ด ๋ฌธ์ ๊ฐ ๋ชจ๋ ์กด์ฌํ๋ค.
8. MapReduce ํ๋ก๊ทธ๋๋ฐ์ ๋ฌธ์ ์
-
๋ฎ์ ์์ฐ์ฑ
- ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด ๊ฐ์ง ์ตํต์ฑ ๋ถ์กฑ (2๊ฐ์ง ์คํผ๋ ์ด์
๋ง ์ง์ํ๋ค.)
- ํ๋/์ต์ ํ๊ฐ ์ฝ์ง ์๋ค.
- ์) ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๊ท ๋ฑํ์ง ์์ ๊ฒฝ์ฐ
-
๋ฐฐ์น์์
์ค์ฌ
- ๊ธฐ๋ณธ์ ์ผ๋ก Low Latency๊ฐ ์๋๋ผ Throughput์ ์ด์ ์ด ๋ง์ถฐ์ง๋ค.
9. MapReduce ๋์๋ค์ ๋ฑ์ฅ
- ๋ ๋ฒ์ฉ์ ์ธ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ๋ค์ ๋ฑ์ฅ
- SQL์ ์ปด๋ฐฑ: Hive, Presto๋ฑ์ด ๋ฑ์ฅ
- Hive
- MapReduce์์์ ๊ตฌํ๋๋ค.
- Throughput์ ์ด์ ์ ๋๋ค.
- ๋์ฉ๋ ETL์ ์ ํฉํ๋ค.
- Presto
- Low Latency์์ ์ด์ ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- Adhoc ์ฟผ๋ฆฌ์ ์ ํฉํ๋ค.
- AWS Athena๊ฐ Presto ๊ธฐ๋ฐ์ด๋ค.