HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๊ณ ์„ฑ๋Šฅ์€ ๋น…๋ฐ์ดํ„ฐ ์ž‘์—… ์‹œ ์ค‘์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Sberbank์˜ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ถ€์„œ์—์„œ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ Hadoop ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํด๋ผ์šฐ๋“œ๋กœ ํŽŒํ•‘ํ•˜์—ฌ ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ์ •๋ณด ํ๋ฆ„์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์œผ๋ฉฐ ์ด์ œ ์ฝ๊ธฐ ์ž‘์—… ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋•๋ถ„์— RegionServer HBase ๋ฐ HDFS ํด๋ผ์ด์–ธํŠธ๋ฅผ ํŒจ์น˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ์„  ์‚ฌํ•ญ์˜ ๋ณธ์งˆ์„ ๋‹ค๋ฃจ๊ธฐ ์ „์— ์›์น™์ ์œผ๋กœ HDD๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”ผํ•  ์ˆ˜ ์—†๋Š” ์ œํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

HDD์™€ ๋น ๋ฅธ ๋žœ๋ค ์•ก์„ธ์Šค ์ฝ๊ธฐ๊ฐ€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ด์œ 
์•„์‹œ๋‹ค์‹œํ”ผ HBase ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ˆ˜์‹ญ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋ธ”๋ก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ฝ 64KB์ž…๋‹ˆ๋‹ค. ์ด์ œ 100๋ฐ”์ดํŠธ๋งŒ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ณ  HBase์— ํŠน์ • ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์š”์ฒญํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. HFiles์˜ ๋ธ”๋ก ํฌ๊ธฐ๊ฐ€ 64KB์ด๋ฏ€๋กœ ์š”์ฒญ์€ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค 640๋ฐฐ(๋‹จ XNUMX๋ถ„!) ๋” ์ปค์ง‘๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์€ HDFS์™€ ํ•ด๋‹น ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฏ€๋กœ ShortCircuit์บ์‹œ (ํŒŒ์ผ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ) ์ด๋กœ ์ธํ•ด ๋””์Šคํฌ์—์„œ ์ด๋ฏธ 1MB๋ฅผ ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dfs.client.read.shortcircuit.buffer.size ๋งŽ์€ ๊ฒฝ์šฐ ์ด ๊ฐ’์„ ์˜ˆ๋ฅผ ๋“ค์–ด 126KB๋กœ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ํ•˜์ง€๋งŒ ์ถ”๊ฐ€์ ์œผ๋กœ FileChannel.read์™€ ๊ฐ™์€ ํ•จ์ˆ˜ ๋“ฑ Java API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์šด์˜ ์ฒด์ œ์— ์ง€์ •๋œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋„๋ก ์š”์ฒญํ•˜๋ฉด โ€œjust in ifโ€๋ฅผ 2๋ฐฐ ๋” ์ฝ์Šต๋‹ˆ๋‹ค. , ์ฆ‰. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” 256KB์ž…๋‹ˆ๋‹ค. ์ด๋Š” Java์— ์ด ๋™์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด FADV_RANDOM ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ 100๋ฐ”์ดํŠธ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ 2600๋ฐฐ ๋” ๋งŽ์€ ๋‚ด์šฉ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ๋ถ„๋ช…ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก ํฌ๊ธฐ๋ฅผ 2ํ‚ฌ๋กœ๋ฐ”์ดํŠธ๋กœ ์ค„์ด๊ณ , ์–ธ๊ธ‰๋œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ํฐ ๊นจ๋‹ฌ์Œ ๊ฐ€์†ํ™”๋ฅผ ์–ป์œผ์„ธ์š”. ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋ธ”๋ก ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ์ค„์ž„์œผ๋กœ์จ ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฝ๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋„ XNUMX๋ฐฐ๋กœ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FADV_RANDOM ํ”Œ๋ž˜๊ทธ ์„ค์ •์œผ๋กœ ์ผ๋ถ€ ์ด๋“์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋†’์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ๊ณผ 128KB์˜ ๋ธ”๋ก ํฌ๊ธฐ์—์„œ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์ตœ๋Œ€ ์ˆ˜์‹ญ ํผ์„ผํŠธ์ž…๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

ํ…Œ์ŠคํŠธ๋Š” ๊ฐ๊ฐ ํฌ๊ธฐ๊ฐ€ 100GB์ด๊ณ  1๊ฐœ์˜ HDD์— ์žˆ๋Š” 10๊ฐœ์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์›์น™์ ์œผ๋กœ ์ด ์†๋„์—์„œ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๊ณ„์‚ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
10MB/์ดˆ์˜ ์†๋„๋กœ 280๊ฐœ์˜ ๋””์Šคํฌ๋ฅผ ์ฝ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 3๋งŒ x 100๋ฐ”์ดํŠธ. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ฝ์€ ๊ฒƒ๋ณด๋‹ค 2600๋ฐฐ ์ ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 3๋ฐฑ๋งŒ์„ 2600์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ดˆ๋‹น 1100๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ.

์šฐ์šธํ•˜์ง€ ์•Š๋‚˜์š”? ๊ทธ๊ฒŒ ์ž์—ฐ์ด์•ผ ๋žœ๋ค ์•ก์„ธ์Šค ๋ธ”๋ก ํฌ๊ธฐ์— ๊ด€๊ณ„์—†์ด HDD์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž„์˜ ์•ก์„ธ์Šค์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๋” ๋งŽ์€ ๊ฒƒ์„ ์งœ๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ ํ›จ์”ฌ ๋” ๋น ๋ฅธ ์†๋„๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ด ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๊ทธ๋ฆผ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ ๋ช‡ ๋ถ„ ๋™์•ˆ ์†๋„๊ฐ€ ์‹ค์ œ๋กœ ์ดˆ๋‹น ์•ฝ 60๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์–‘์˜ ์ฝ๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋Š” ์šด์˜ ์ฒด์ œ(Linux)์˜ ๋ฒ„ํ”„/์บ์‹œ์— ๋“ค์–ด๊ฐ€๊ณ  ์†๋„๋Š” ์ดˆ๋‹น XNUMX์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋” ๋‚˜์•„๊ฐ€ OS ์บ์‹œ์— ์žˆ๊ฑฐ๋‚˜ ์œ ์‚ฌํ•œ ์•ก์„ธ์Šค ์†๋„์˜ SSD/NVMe ์Šคํ† ๋ฆฌ์ง€ ์žฅ์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์•ก์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” 4๊ฐœ์˜ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ ๋ฒค์น˜์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋ฉฐ ๊ฐ ์„œ๋ฒ„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”๊ธˆ์ด ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค.

CPU: Xeon E5-2680 v4 @ 2.40GHz 64 ์Šค๋ ˆ๋“œ.
๋ฉ”๋ชจ๋ฆฌ: 730GB.
์ž๋ฐ” ๋ฒ„์ „: 1.8.0_111

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ์ฝ์–ด์•ผ ํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์–‘์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค HBase ์บ์‹œ์— ์™„์ „ํžˆ ๋ฐฐ์น˜๋œ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด ์šด์˜ ์ฒด์ œ์˜ ๋ฒ„ํ”„/์บ์‹œ์—์„œ๋„ ์ฝํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HBase๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ BlockCache๋ผ๋Š” ๊ตฌ์กฐ์— ๋ฉ”๋ชจ๋ฆฌ์˜ 40%๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ์ด๊ฒƒ์€ ConcurrentHashMap์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ‚ค๋Š” ํŒŒ์ผ ์ด๋ฆ„ + ๋ธ”๋ก์˜ ์˜คํ”„์…‹์ด๊ณ  ๊ฐ’์€ ์ด ์˜คํ”„์…‹์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ตฌ์กฐ์—์„œ๋งŒ ์ฝ์„ ๋•Œ ์šฐ๋ฆฌ๋Š” ์†๋„๊ฐ€ ์—„์ฒญ๋‚˜๋„ค์š”, ์ดˆ๋‹น ๋ฐฑ๋งŒ ๊ฐœ์˜ ์š”์ฒญ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ์œ ์šฉํ•œ ๊ฒƒ๋“ค์ด ๋งŽ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”๊ตฌ ์‚ฌํ•ญ์—๋งŒ ์ˆ˜๋ฐฑ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ RS ํ•˜๋‚˜์˜ BlockCache ๋ณผ๋ฅจ์€ ์•ฝ 12GB์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋‘ ๊ฐœ์˜ RS๋ฅผ ์ฐฉ๋ฅ™์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์˜ BlockCache์— 96GB๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 4๊ฐœ์˜ ํ…Œ์ด๋ธ”, ๊ฐ๊ฐ 130๊ฐœ์˜ ์˜์—ญ์ด ์žˆ๊ณ  ํŒŒ์ผ ํฌ๊ธฐ๋Š” 800MB์ด๊ณ  FAST_DIFF๋กœ ์••์ถ•๋ฉ๋‹ˆ๋‹ค. ์ด 410GB(๋ณต์ œ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ)

๋”ฐ๋ผ์„œ BlockCache๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ ์–‘์˜ ์•ฝ 23%์— ๋ถˆ๊ณผํ•˜๋ฉฐ ์ด๋Š” BigData๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์‹ค์ œ ์กฐ๊ฑด์— ํ›จ์”ฌ ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์žฌ๋ฏธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์บ์‹œ ์ ์ค‘ ํšŸ์ˆ˜๊ฐ€ ์ ์„์ˆ˜๋ก ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๋†“์น˜๋ฉด ๋งŽ์€ ์ผ์„ ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ ํ˜ธ์ถœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ํ”ผํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ธก๋ฉด, ์ฆ‰ ์บ์‹œ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒํ™ฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํ•˜๋‚˜์˜ ๊ฐœ์ฒด์—๋งŒ ๋งž๋Š” ์บ์‹œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์บ์‹œ๋ณด๋‹ค 1๋ฐฐ ๋” ํฐ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์œผ๋กœ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

1. ๋ธ”๋ก 1์„ ์บ์‹œ์— ๋ฐฐ์น˜
2. ์บ์‹œ์—์„œ ๋ธ”๋ก 1์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
3. ๋ธ”๋ก 2์„ ์บ์‹œ์— ๋ฐฐ์น˜
4. ์บ์‹œ์—์„œ ๋ธ”๋ก 2์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
5. ๋ธ”๋ก 3์„ ์บ์‹œ์— ๋ฐฐ์น˜

5๊ฐ€์ง€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ •์ƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๋Š” HBase๊ฐ€ ์™„์ „ํžˆ ์“ธ๋ชจ์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. OS ์บ์‹œ์—์„œ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ด๋ฅผ BlockCache์— ์ €์žฅํ•œ ํ›„ ๋ฐ์ดํ„ฐ์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ๋„์ฐฉํ•˜๋ฉด ๊ฑฐ์˜ ์ฆ‰์‹œ ํ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋ฌผ ์‹œ์ž‘ ๋ถ€๋ถ„์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋ฌธ์ œ์˜ ๋ณธ์งˆ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. Garbage Collector๊ฐ€ ๊ทœ๋ชจ๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  ๋ถ„์œ„๊ธฐ๊ฐ€ ๋œจ๊ฑฐ์›Œ์ง€๊ณ  ๋ฉ€๊ณ  ๋œจ๊ฑฐ์šด ์Šค์›จ๋ด์— ์žˆ๋Š” ์ž‘์€ Greta๊ฐ€ ํ™”๋ฅผ ๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ IT ์‚ฌ๋žŒ๋“ค์€ ์•„์ด๋“ค์ด ์Šฌํผํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์บ์‹œ๊ฐ€ ์˜ค๋ฒ„ํ”Œ๋กœ๋˜์ง€ ์•Š๋„๋ก ๋ชจ๋“  ๋ธ”๋ก์„ ์บ์‹œ์— ๋„ฃ์ง€ ์•Š๊ณ  ํŠน์ • ๋น„์œจ๋งŒ ์บ์‹œ์— ๋„ฃ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? BlockCache์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
    if (cacheDataBlockPercent != 100 && buf.getBlockType().isData()) {
      if (cacheKey.getOffset() % 100 >= cacheDataBlockPercent) {
        return;
      }
    }
...

์—ฌ๊ธฐ์„œ ์š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. offset์€ ํŒŒ์ผ์—์„œ ๋ธ”๋ก์˜ ์œ„์น˜์ด๋ฉฐ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋Š” 00์—์„œ 99๊นŒ์ง€ ๋ฌด์ž‘์œ„๋กœ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ๋ฒ”์œ„์— ์†ํ•˜๋Š” ์ˆซ์ž๋งŒ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์บ์‹œDataBlockPercent = 20์„ ์„ค์ •ํ•˜๊ณ  ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๊ฒฐ๊ณผ๋Š” ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ž˜ํ”„์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ€์†์ด ๋ฐœ์ƒํ•œ ์ด์œ ๊ฐ€ ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ์ฆ‰์‹œ ํ™”์„ฑ์˜ ๊ฐœ ๋ฐฐ์ˆ˜๊ตฌ์— ๋ฒ„๋ฆฌ๋Š” Sisyphean ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๋งŽ์€ GC ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๋™์‹œ์— CPU ์‚ฌ์šฉ๋ฅ ์€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์ƒ์‚ฐ์„ฑ๋ณด๋‹ค๋Š” ํ›จ์”ฌ ๋‚ฎ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

BlockCache์— ์ €์žฅ๋œ ๋ธ”๋ก์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ๋„ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„(์•ฝ 95%)์€ ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” Bloom ํ•„ํ„ฐ๋‚˜ LEAF_INDEX์™€ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ด๋ฉฐ ั‚.ะด.. ์ด ๋ฐ์ดํ„ฐ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „์— HBase๊ฐ€ ๋ฉ”ํƒ€๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ์ถ”๊ฐ€ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ์ง€, ๊ทธ๋ ‡๋‹ค๋ฉด ๊ด€์‹ฌ ์žˆ๋Š” ๋ธ”๋ก์ด ์ •ํ™•ํžˆ ์–ด๋””์— ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ฝ”๋“œ์—๋Š” ํ™•์ธ ์กฐ๊ฑด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. buf.getBlockType().isData() ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”ํƒ€ ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ๊ทธ๊ฒƒ์„ ์บ์‹œ์— ๋‚จ๊ฒจ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋ถ€ํ•˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  ํ•œ ๋ฒˆ์— ๊ธฐ๋Šฅ์„ ์•ฝ๊ฐ„ ๊ฐ•ํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ปท์˜คํ”„ ๋น„์œจ์„ 20์œผ๋กœ ์„ค์ •ํ–ˆ๊ณ  BlockCache๋Š” ์•ฝ๊ฐ„ ๋œ ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด๋ฅผ 23%๋กœ ์„ค์ •ํ•˜๊ณ  100๋ถ„๋งˆ๋‹ค 5๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์–ด๋Š ์ง€์ ์—์„œ ํฌํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์—ฌ๊ธฐ์„œ๋Š” ์›๋ณธ ๋ฒ„์ „์ด ์ดˆ๋‹น ์•ฝ 100๋งŒ ์š”์ฒญ์œผ๋กœ ๊ฑฐ์˜ ์ฆ‰์‹œ ์ƒํ•œ์„ ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจ์น˜๋Š” ์ตœ๋Œ€ 300์˜ ๊ฐ€์†์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— ์ถ”๊ฐ€ ๊ฐ€์†์€ ๋” ์ด์ƒ "๋ฌด๋ฃŒ"๊ฐ€ ์•„๋‹ˆ๋ฉฐ CPU ์‚ฌ์šฉ๋ฅ ๋„ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์บ์‹œํ•ด์•ผ ํ•˜๋Š” ๋ธ”๋ก์˜ ๋น„์œจ์„ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†๊ณ  ๋กœ๋“œ ํ”„๋กœํ•„์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ๊ธฐ ์ž‘์—… ํ™œ๋™์— ๋”ฐ๋ผ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

hbase.lru.cache.heavy.eviction.count.limit โ€” ์ตœ์ ํ™”(์˜ˆ: ๋ธ”๋ก ๊ฑด๋„ˆ๋›ฐ๊ธฐ) ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช‡ ๋ฒˆ์ด๋‚˜ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Š” MAX_INT = 2147483647๊ณผ ๋™์ผํ•˜๋ฉฐ ์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์ด ์ด ๊ฐ’์œผ๋กœ ์ž‘๋™์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ‡ด๊ฑฐ ํ”„๋กœ์„ธ์Šค๋Š” 5~10์ดˆ(๋ถ€ํ•˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)๋งˆ๋‹ค ์‹œ์ž‘๋˜๋ฉฐ 2147483647 * 10/60/60/24/365 = 680๋…„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ถœ์‹œ ์งํ›„ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ํŽ˜์ด๋กœ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฐ€ ๋‹จ๊ธฐ ์ฝ๊ธฐ(์˜ˆ: ๋‚ฎ ๋™์•ˆ)์™€ ์žฅ๊ธฐ ์ฝ๊ธฐ(๋ฐค)๊ฐ€ ์ง€์†์ ์œผ๋กœ ์‚ฐ์žฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์žฅ๊ธฐ ์ฝ๊ธฐ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ๊ธฐ๋Šฅ์ด ์ผœ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ๊ธฐ ํŒ๋…๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 1๋ถ„ ๋™์•ˆ ์ง€์†๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก์„ ๋ฒ„๋ฆด ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์บ์‹œ๊ฐ€ ์˜ค๋ž˜๋  ์‹œ๊ฐ„์ด ์—†์œผ๋ฏ€๋กœ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด 10๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•™๊ธฐ ํ™œ๋™ ๋…์„œ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 100์ดˆ ์•ˆ์—. ๋”ฐ๋ผ์„œ ๋‹จ๊ธฐ ์ฝ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋ธ”๋ก์ด ์บ์‹œ์— ๋“ค์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(ํ‘œ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์ œ๊ฑฐ๋˜๋Š” ๋ธ”๋ก์€ ์ œ์™ธ). ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ธฐ๊ฐ„ ์ฝ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ด ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ํ›จ์”ฌ ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

hbase.lru.cache.heavy.eviction.mb.size.limit โ€” 10์ดˆ ์•ˆ์— ์บ์‹œ์— ์ €์žฅ(๋ฌผ๋ก  ์ œ๊ฑฐ)ํ•  ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ์ด ๊ฐ’์— ๋„๋‹ฌํ•˜๊ณ  ์ด๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์š”์ ์€ ์ด๊ฒƒ์ด๋‹ค: ์บ์‹œ์— ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋ฅผ ๋„ฃ์œผ๋ฉด ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฉฐ ์œ„์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ๋น„์šฉ์ด ๋งค์šฐ ๋งŽ์ด ๋“ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„ˆ๋ฌด ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ธ”๋ก ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋ชจ๋“œ๊ฐ€ ์กฐ๊ธฐ์— ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ๋„ˆ๋ฌด ์ž‘๊ฒŒ ์„ค์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„(๋ฌผ๋ฆฌ์  ์ฝ”์–ด ์•ฝ 20~40๊ฐœ)์˜ ๊ฒฝ์šฐ ์•ฝ 300~400MB๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ค‘์‚ฐ์ธต(~10๊ฐœ ์ฝ”์–ด)์˜ ๊ฒฝ์šฐ 200-300MB. ์•ฝํ•œ ์‹œ์Šคํ…œ(2~5๊ฐœ ์ฝ”์–ด)์˜ ๊ฒฝ์šฐ 50~100MB๊ฐ€ ์ •์ƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์—์„œ๋Š” ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ).

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. hbase.lru.cache.heavy.eviction.mb.size.limit = 500์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์ผ์ข…์˜ ๋กœ๋“œ(์ฝ๊ธฐ)๊ฐ€ ์žˆ์œผ๋ฉฐ ์•ฝ 10์ดˆ๋งˆ๋‹ค ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‡ด๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฒ„ํ—ค๋“œ = ํ•ด์ œ๋œ ๋ฐ”์ดํŠธ ํ•ฉ๊ณ„(MB) * 100 / ์ œํ•œ(MB) - 100;

์‹ค์ œ๋กœ 2000MB๊ฐ€ ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2000 * 100 / 500 - 100 = 300%

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆ˜์‹ญ ํผ์„ผํŠธ ์ดํ•˜๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฏ€๋กœ ์ด ๊ธฐ๋Šฅ์€ ์บ์‹œ๋œ ๋ธ”๋ก์˜ ๋น„์œจ์„ ์ค„์—ฌ ์ž๋™ ์กฐ์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋กœ๋“œ๊ฐ€ ๋–จ์–ด์ง€๋ฉด 200MB๋งŒ ์ œ๊ฑฐ๋˜๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์Œ์ˆ˜(์†Œ์œ„ ์˜ค๋ฒ„์ŠˆํŒ…)๊ฐ€ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

200 * 100 / 500 - 100 = -60%

๋ฐ˜๋Œ€๋กœ ์ด ๊ธฐ๋Šฅ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์–‘์ˆ˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์บ์‹œ๋œ ๋ธ”๋ก์˜ ๋น„์œจ์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. 0%์— ๋„๋‹ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•ฝ 30~100%์ผ ๋•Œ ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ๊ธฐ ๊ธ‰์ฆ ์ค‘์— ์ตœ์ ํ™” ๋ชจ๋“œ์—์„œ ์กฐ๊ธฐ ์ข…๋ฃŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

hbase.lru.cache.heavy.eviction.overhead.coefficient โ€” ๊ฒฐ๊ณผ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์–ป๊ณ  ์‹ถ์€์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ๊ธธ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ด ๋น„์œจ์„ ๋†’์ด๊ณ  ๊ณ ์„ฑ๋Šฅ์„ ๋” ๋น ๋ฅด๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ณ„์ˆ˜๋ฅผ 0.01๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฒ„ํ—ค๋“œ(์œ„ ์ฐธ์กฐ)์— ์ด ์ˆซ์ž๋ฅผ ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋กœ ๊ณฑํ•˜๊ณ  ์บ์‹œ๋œ ๋ธ”๋ก์˜ ๋น„์œจ์ด ๊ฐ์†Œํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„ํ—ค๋“œ = 300%, ๊ณ„์ˆ˜ = 0.01์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์บ์‹œ๋œ ๋ธ”๋ก์˜ ๋น„์œจ์ด 3% ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

์Œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ(์˜ค๋ฒ„์ŠˆํŒ…) ๊ฐ’์— ๋Œ€ํ•ด์„œ๋„ ์œ ์‚ฌํ•œ "๋ฐฐ์••" ๋…ผ๋ฆฌ๊ฐ€ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋ฐ ์ œ๊ฑฐ ๋ณผ๋ฅจ์˜ ๋‹จ๊ธฐ ๋ณ€๋™์€ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ ํ™” ๋ชจ๋“œ์—์„œ ์กฐ๊ธฐ ์ข…๋ฃŒ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BackPressure์—๋Š” ๋ฐ˜์ „๋œ ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ฒ„์ŠˆํŒ…์ด ๊ฐ•ํ• ์ˆ˜๋ก ๋” ๋งŽ์€ ๋ธ”๋ก์ด ์บ์‹œ๋ฉ๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๊ตฌํ˜„ ์ฝ”๋“œ

        LruBlockCache cache = this.cache.get();
        if (cache == null) {
          break;
        }
        freedSumMb += cache.evict()/1024/1024;
        /*
        * Sometimes we are reading more data than can fit into BlockCache
        * and it is the cause a high rate of evictions.
        * This in turn leads to heavy Garbage Collector works.
        * So a lot of blocks put into BlockCache but never read,
        * but spending a lot of CPU resources.
        * Here we will analyze how many bytes were freed and decide
        * decide whether the time has come to reduce amount of caching blocks.
        * It help avoid put too many blocks into BlockCache
        * when evict() works very active and save CPU for other jobs.
        * More delails: https://issues.apache.org/jira/browse/HBASE-23887
        */

        // First of all we have to control how much time
        // has passed since previuos evict() was launched
        // This is should be almost the same time (+/- 10s)
        // because we get comparable volumes of freed bytes each time.
        // 10s because this is default period to run evict() (see above this.wait)
        long stopTime = System.currentTimeMillis();
        if ((stopTime - startTime) > 1000 * 10 - 1) {
          // Here we have to calc what situation we have got.
          // We have the limit "hbase.lru.cache.heavy.eviction.bytes.size.limit"
          // and can calculte overhead on it.
          // We will use this information to decide,
          // how to change percent of caching blocks.
          freedDataOverheadPercent =
            (int) (freedSumMb * 100 / cache.heavyEvictionMbSizeLimit) - 100;
          if (freedSumMb > cache.heavyEvictionMbSizeLimit) {
            // Now we are in the situation when we are above the limit
            // But maybe we are going to ignore it because it will end quite soon
            heavyEvictionCount++;
            if (heavyEvictionCount > cache.heavyEvictionCountLimit) {
              // It is going for a long time and we have to reduce of caching
              // blocks now. So we calculate here how many blocks we want to skip.
              // It depends on:
             // 1. Overhead - if overhead is big we could more aggressive
              // reducing amount of caching blocks.
              // 2. How fast we want to get the result. If we know that our
              // heavy reading for a long time, we don't want to wait and can
              // increase the coefficient and get good performance quite soon.
              // But if we don't sure we can do it slowly and it could prevent
              // premature exit from this mode. So, when the coefficient is
              // higher we can get better performance when heavy reading is stable.
              // But when reading is changing we can adjust to it and set
              // the coefficient to lower value.
              int change =
                (int) (freedDataOverheadPercent * cache.heavyEvictionOverheadCoefficient);
              // But practice shows that 15% of reducing is quite enough.
              // We are not greedy (it could lead to premature exit).
              change = Math.min(15, change);
              change = Math.max(0, change); // I think it will never happen but check for sure
              // So this is the key point, here we are reducing % of caching blocks
              cache.cacheDataBlockPercent -= change;
              // If we go down too deep we have to stop here, 1% any way should be.
              cache.cacheDataBlockPercent = Math.max(1, cache.cacheDataBlockPercent);
            }
          } else {
            // Well, we have got overshooting.
            // Mayby it is just short-term fluctuation and we can stay in this mode.
            // It help avoid permature exit during short-term fluctuation.
            // If overshooting less than 90%, we will try to increase the percent of
            // caching blocks and hope it is enough.
            if (freedSumMb >= cache.heavyEvictionMbSizeLimit * 0.1) {
              // Simple logic: more overshooting - more caching blocks (backpressure)
              int change = (int) (-freedDataOverheadPercent * 0.1 + 1);
              cache.cacheDataBlockPercent += change;
              // But it can't be more then 100%, so check it.
              cache.cacheDataBlockPercent = Math.min(100, cache.cacheDataBlockPercent);
            } else {
              // Looks like heavy reading is over.
              // Just exit form this mode.
              heavyEvictionCount = 0;
              cache.cacheDataBlockPercent = 100;
            }
          }
          LOG.info("BlockCache evicted (MB): {}, overhead (%): {}, " +
            "heavy eviction counter: {}, " +
            "current caching DataBlock (%): {}",
            freedSumMb, freedDataOverheadPercent,
            heavyEvictionCount, cache.cacheDataBlockPercent);

          freedSumMb = 0;
          startTime = stopTime;
       }

์ด์ œ ์‹ค์ œ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์Šค์บ”์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(์Šค๋ ˆ๋“œ 25๊ฐœ, ๋ฐฐ์น˜ = 100).
  2. 5๋ถ„ ํ›„ ๋‹ค์ค‘ ๊ฐ€์ ธ์˜ค๊ธฐ(25๊ฐœ ์Šค๋ ˆ๋“œ, ๋ฐฐ์น˜ = 100)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. 5๋ถ„ ํ›„ ๋ฉ€ํ‹ฐ๊ฒŸ ๊บผ์ง (๋‹ค์‹œ ์Šค์บ”๋งŒ ๋‚จ์Œ)

์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์˜ ์‹คํ–‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € hbase.lru.cache.heavy.eviction.count.limit = 10000(์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•จ)์„ ์„ค์ •ํ•œ ๋‹ค์Œ ์ œํ•œ = 0(ํ™œ์„ฑํ™”)์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋กœ๊ทธ์—์„œ๋Š” ์ด ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์ผœ์ ธ ์žˆ๊ณ  ์˜ค๋ฒ„์ŠˆํŒ…์„ 14-71%๋กœ ์žฌ์„ค์ •ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋กœ๋“œ๊ฐ€ ๊ฐ์†Œํ•˜์—ฌ BackPressure๊ฐ€ ์ผœ์ง€๊ณ  HBase๊ฐ€ ๋” ๋งŽ์€ ๋ธ”๋ก์„ ๋‹ค์‹œ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ์˜์—ญ์„œ๋ฒ„
์ œ๊ฑฐ๋จ(MB): 0, ๋น„์œจ 0.0, ์˜ค๋ฒ„ํ—ค๋“œ(%): -100, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 0, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 100
์ œ๊ฑฐ๋จ(MB): 0, ๋น„์œจ 0.0, ์˜ค๋ฒ„ํ—ค๋“œ(%): -100, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 0, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 100
์ œ๊ฑฐ๋จ(MB): 2170, ๋น„์œจ 1.09, ์˜ค๋ฒ„ํ—ค๋“œ(%): 985, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 1, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 91 < ์‹œ์ž‘
์ œ๊ฑฐ๋จ(MB): 3763, ๋น„์œจ 1.08, ์˜ค๋ฒ„ํ—ค๋“œ(%): 1781, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 2, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 76
์ œ๊ฑฐ๋จ(MB): 3306, ๋น„์œจ 1.07, ์˜ค๋ฒ„ํ—ค๋“œ(%): 1553, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 3, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 61
์ œ๊ฑฐ๋จ(MB): 2508, ๋น„์œจ 1.06, ์˜ค๋ฒ„ํ—ค๋“œ(%): 1154, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 4, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 50
์ œ๊ฑฐ๋จ(MB): 1824, ๋น„์œจ 1.04, ์˜ค๋ฒ„ํ—ค๋“œ(%): 812, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 5, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 42
์ œ๊ฑฐ๋จ(MB): 1482, ๋น„์œจ 1.03, ์˜ค๋ฒ„ํ—ค๋“œ(%): 641, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 6, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 36
์ œ๊ฑฐ๋จ(MB): 1140, ๋น„์œจ 1.01, ์˜ค๋ฒ„ํ—ค๋“œ(%): 470, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 7, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 32
์ œ๊ฑฐ๋จ(MB): 913, ๋น„์œจ 1.0, ์˜ค๋ฒ„ํ—ค๋“œ(%): 356, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 8, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 29
์ œ๊ฑฐ๋จ(MB): 912, ๋น„์œจ 0.89, ์˜ค๋ฒ„ํ—ค๋“œ(%): 356, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 9, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 26
์ œ๊ฑฐ๋จ(MB): 684, ๋น„์œจ 0.76, ์˜ค๋ฒ„ํ—ค๋“œ(%): 242, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 10, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 24
์ œ๊ฑฐ๋จ(MB): 684, ๋น„์œจ 0.61, ์˜ค๋ฒ„ํ—ค๋“œ(%): 242, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 11, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.51, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 12, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 21
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.42, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 13, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 20
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 14, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 15, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.32, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 16, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.31, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 17, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.3, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 18, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.29, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 19, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.27, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 20, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.25, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 21, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.24, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 22, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.22, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 23, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.21, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 24, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.2, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 25, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.17, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 26, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.17, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 27, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18 < ์ถ”๊ฐ€๋œ ๊ฐ€์ ธ์˜ค๊ธฐ(๊ทธ๋Ÿฌ๋‚˜ ํ…Œ์ด๋ธ”์€ ๋™์ผํ•จ)
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.15, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 28, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.13, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 29, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.11, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 30, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.09, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 31, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.08, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 32, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.07, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 33, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.06, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 34, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.05, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 35, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.05, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 36, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.04, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 37, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 109, ๋น„์œจ 0.04, ์˜ค๋ฒ„ํ—ค๋“œ(%): -46, ๋ฌด๊ฑฐ์šด ์ œ๊ฑฐ ์นด์šดํ„ฐ: 37, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22 < ๋ฐฐ์••
์ œ๊ฑฐ๋จ(MB): 798, ๋น„์œจ 0.24, ์˜ค๋ฒ„ํ—ค๋“œ(%): 299, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 38, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 20
์ œ๊ฑฐ๋จ(MB): 798, ๋น„์œจ 0.29, ์˜ค๋ฒ„ํ—ค๋“œ(%): 299, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 39, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 570, ๋น„์œจ 0.27, ์˜ค๋ฒ„ํ—ค๋“œ(%): 185, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 40, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 17
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.22, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 41, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.16, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 42, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.11, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 43, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.09, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 44, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.07, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 45, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.05, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 46, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 222, ๋น„์œจ 0.04, ์˜ค๋ฒ„ํ—ค๋“œ(%): 11, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 47, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 16
์ œ๊ฑฐ๋จ(MB): 104, ๋น„์œจ 0.03, ์˜ค๋ฒ„ํ—ค๋“œ(%): -48, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 47, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 21 < ์ธํ„ฐ๋ŸฝํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
์ œ๊ฑฐ๋จ(MB): 684, ๋น„์œจ 0.2, ์˜ค๋ฒ„ํ—ค๋“œ(%): 242, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 48, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 19
์ œ๊ฑฐ๋จ(MB): 570, ๋น„์œจ 0.23, ์˜ค๋ฒ„ํ—ค๋“œ(%): 185, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 49, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.22, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 50, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.21, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 51, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.2, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 52, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.18, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 53, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.16, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 54, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 228, ๋น„์œจ 0.14, ์˜ค๋ฒ„ํ—ค๋“œ(%): 14, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 55, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 18
์ œ๊ฑฐ๋จ(MB): 112, ๋น„์œจ 0.14, ์˜ค๋ฒ„ํ—ค๋“œ(%): -44, ๋ฌด๊ฑฐ์šด ์ œ๊ฑฐ ์นด์šดํ„ฐ: 55, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 23 < ๋ฐฐ์••
์ œ๊ฑฐ๋จ(MB): 456, ๋น„์œจ 0.26, ์˜ค๋ฒ„ํ—ค๋“œ(%): 128, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 56, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.31, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 57, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 58, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 59, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 60, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 61, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 62, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 63, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.32, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 64, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 65, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 66, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.32, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 67, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 68, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.32, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 69, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.32, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 70, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 71, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 72, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 73, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 74, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 75, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 342, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): 71, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 76, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 22
์ œ๊ฑฐ๋จ(MB): 21, ๋น„์œจ 0.33, ์˜ค๋ฒ„ํ—ค๋“œ(%): -90, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 76, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 32
์ œ๊ฑฐ๋จ(MB): 0, ๋น„์œจ 0.0, ์˜ค๋ฒ„ํ—ค๋“œ(%): -100, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 0, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 100
์ œ๊ฑฐ๋จ(MB): 0, ๋น„์œจ 0.0, ์˜ค๋ฒ„ํ—ค๋“œ(%): -100, ๊ณผ๋„ํ•œ ์ œ๊ฑฐ ์นด์šดํ„ฐ: 0, ํ˜„์žฌ ์บ์‹ฑ DataBlock(%): 100

๋‘ ์บ์‹œ ์„น์…˜, ์ฆ‰ ๋‹จ์ผ(์ด์ „์— ์š”์ฒญํ•œ ์ ์ด ์—†๋Š” ๋ธ”๋ก)๊ณผ ๋‹ค์ค‘(์ตœ์†Œ ํ•œ ๋ฒˆ "์š”์ฒญ๋œ" ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๊ธฐ์— ์ €์žฅ๋จ) ์‚ฌ์ด์˜ ๊ด€๊ณ„ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์Šค์บ”์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž‘๋™์„ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋น„๊ต๋ฅผ ์œ„ํ•ด ์ฒ˜์Œ์—๋Š” ์บ์‹œ๊ฐ€ ์™„์ „ํžˆ ๊บผ์ง„ ํ›„ ์บ์‹ฑ๊ณผ ํ•จ๊ป˜ HBase๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ์ตœ์ ํ™” ์ž‘์—… ์‹œ์ž‘์„ 5๋ถ„(30ํšŒ ์ œ๊ฑฐ ์ฃผ๊ธฐ) ์ง€์—ฐ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ์ฝ”๋“œ๋Š” Pull Request์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HBASE 23887 github์—์„œ.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ ์ด ํ•˜๋“œ์›จ์–ด์—์„œ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ดˆ๋‹น ์ฝ๊ธฐ ํšŸ์ˆ˜๋Š” 300๋งŒํšŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์‹ค HDFS๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ShortCircuitCache(์ดํ•˜ SSC๋ผ๊ณ  ํ•จ) ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ”ผํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋ง์— ๋”ฐ๋ฅด๋ฉด ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํฐ ์ด๋“์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด ์ž ๊ธˆ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š ์‹œ์ ์—์„œ๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์ด๋ฅผ ์‹คํ˜„ํ•œ ํ›„, ์šฐ๋ฆฌ๋Š” ๋…๋ฆฝ์ ์ธ SSC ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

private final ShortCircuitCache[] shortCircuitCache;
...
shortCircuitCache = new ShortCircuitCache[this.clientShortCircuitNum];
for (int i = 0; i < this.clientShortCircuitNum; i++)
  this.shortCircuitCache[i] = new ShortCircuitCache(โ€ฆ);

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งˆ์ง€๋ง‰ ์˜คํ”„์…‹ ์ˆซ์ž์—์„œ๋„ ๊ต์ฐจ์ ์„ ์ œ์™ธํ•˜๊ณ  ์ž‘์—…ํ•˜์‹ญ์‹œ์˜ค.

public ShortCircuitCache getShortCircuitCache(long idx) {
    return shortCircuitCache[(int) (idx % clientShortCircuitNum)];
}

์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ HDFS์—์„œ ํŒŒ์ผ์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

conf.set("dfs.client.read.shortcircuit", "true");
conf.set("dfs.client.read.shortcircuit.buffer.size", "65536"); // ะฟะพ ะดะตั„ะพะปั‚ัƒ = 1 ะœะ‘ ะธ ัั‚ะพ ัะธะปัŒะฝะพ ะทะฐะผะตะดะปัะตั‚ ั‡ั‚ะตะฝะธะต, ะฟะพัั‚ะพะผัƒ ะปัƒั‡ัˆะต ะฟั€ะธะฒะตัั‚ะธ ะฒ ัะพะพั‚ะฒะตั‚ัั‚ะฒะธะต ะบ ั€ะตะฐะปัŒะฝั‹ะผ ะฝัƒะถะดะฐะผ
conf.set("dfs.client.short.circuit.num", num); // ะพั‚ 1 ะดะพ 10

๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ์„ ์ฝ์œผ์„ธ์š”:

FSDataInputStream in = fileSystem.open(path);
for (int i = 0; i < count; i++) {
    position += 65536;
    if (position > 900000000)
        position = 0L;
    int res = in.read(position, byteBuffer, 0, 65536);
}

์ด ์ฝ”๋“œ๋Š” ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ๋™์‹œ์— ์ฝ๋Š” ํŒŒ์ผ ์ˆ˜(10์—์„œ 200 - ๊ฐ€๋กœ ์ถ•)์™€ ์บ์‹œ ์ˆ˜(1์—์„œ 10 - ๊ทธ๋ž˜ํ”ฝ)๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ์„ธ๋กœ์ถ•์€ ์บ์‹œ๊ฐ€ XNUMX๊ฐœ์ธ ๊ฒฝ์šฐ์— ๋น„ํ•ด SSC๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์†๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•: ํ•˜๋‚˜์˜ ์บ์‹œ๋กœ 100KB ๋ธ”๋ก์—์„œ 64๋งŒ ์ฝ๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ 78์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์บ์‹œ๊ฐ€ 5๊ฐœ์ด๋ฉด 16์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ~5๋ฐฐ์˜ ๊ฐ€์†๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ณ‘๋ ฌ ์ฝ๊ธฐ ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ๋Š” ํšจ๊ณผ๊ฐ€ ํฌ๊ฒŒ ๋ˆˆ์— ๋„์ง€ ์•Š์ง€๋งŒ ์Šค๋ ˆ๋“œ ์ฝ๊ธฐ๊ฐ€ 50๊ฐœ ์ด์ƒ์ผ ๋•Œ ๋ˆˆ์— ๋„๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  1: ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ๋งค์šฐ ๋ถˆ์•ˆ์ •ํ•˜๋ฏ€๋กœ(์•„๋ž˜ ์ฐธ์กฐ) 3๋ฒˆ์˜ ์‹คํ–‰์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ ๊ฐ’์„ ํ‰๊ท ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  2: ์ž„์˜ ์•ก์„ธ์Šค ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ๋™์ผํ•˜์ง€๋งŒ ์•ก์„ธ์Šค ์ž์ฒด๋Š” ์•ฝ๊ฐ„ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ HBase์˜ ๊ฒฝ์šฐ์™€ ๋‹ฌ๋ฆฌ ์ด๋Ÿฌํ•œ ๊ฐ€์†์ด ํ•ญ์ƒ ๋ฌด๋ฃŒ๋Š” ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ž ๊ธˆ์— ๋งค๋‹ฌ๋ฆฌ๋Š” ๋Œ€์‹  ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” CPU ๊ธฐ๋Šฅ์„ "์ž ๊ธˆ ํ•ด์ œ"ํ•ฉ๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์—ฌ๊ธฐ์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด CPU ์‚ฌ์šฉ๋ฅ ์ด ๋Œ€๋žต ๋น„๋ก€ํ•˜์—ฌ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฝ๊ฐ„ ๋” ๋งŽ์€ ์Šน๋ฆฌ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด SSC = 3 ์„ค์ •์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฒ”์œ„์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ์•ฝ 3.3๋ฐฐ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์„ธ ๊ฐ€์ง€ ๊ฐœ๋ณ„ ์‹คํ–‰์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

CPU ์†Œ๋น„๋Š” ์•ฝ 2.8๋ฐฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ฐจ์ด๋Š” ๊ทธ๋ฆฌ ํฌ์ง€ ์•Š์ง€๋งŒ ์–ด๋ฆฐ ๊ทธ๋ ˆํƒ€๋Š” ์ด๋ฏธ ํ–‰๋ณตํ•ดํ•˜๋ฉฐ ํ•™๊ต์— ๋‹ค๋‹ˆ๊ณ  ์ˆ˜์—…์„ ๋ฐ›์„ ์‹œ๊ฐ„์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋ณ๊ณ (์ฆ‰, ํ”Œ๋Ÿฌ๊ทธ๊ฐ€ HDFS ํด๋ผ์ด์–ธํŠธ ์ธก์— ์žˆ์Œ) ๋ฌด๋ฃŒ CPU ์„ฑ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ HDFS์— ๋Œ€ํ•œ ๋Œ€๋Ÿ‰ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ(์˜ˆ: Spark ๋“ฑ)์— ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด BlockCache ์ตœ์ ํ™”์™€ SSC ํŠœ๋‹์„ ๊ฒฐํ•ฉํ•˜์—ฌ HBase์—์„œ ์ฝ๊ธฐ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ๋Š” ๊ฐœ์„ ๋œ ํ…Œ์ŠคํŠธ(์ฒ˜๋ฆฌ ์—†์ด ์ฝ๊ธฐ)๋งŒํผ ํšจ๊ณผ๊ฐ€ ํฌ์ง€ ์•Š์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์ถ”๊ฐ€๋กœ 80K๋ฅผ ์งœ๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ตœ์ ํ™”๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ๋Œ€ 4๋ฐฐ์˜ ์†๋„ ํ–ฅ์ƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ์ตœ์ ํ™”์— ๋Œ€ํ•œ PR๋„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. [HDFS-15202]๊ฐ€ ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฉฐ ์ด ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ณต๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์œ ์‚ฌํ•œ ์™€์ด๋“œ ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ Cassandra์™€ HBase์˜ ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋‘ ํ˜ธ์ŠคํŠธ(์ด 800๊ฐœ ์Šค๋ ˆ๋“œ)์—์„œ ํ‘œ์ค€ YCSB ๋กœ๋“œ ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธก - 4๊ฐœ์˜ ํ˜ธ์ŠคํŠธ์— ์žˆ๋Š” 4๊ฐœ์˜ RegionServer ๋ฐ Cassandra ์ธ์Šคํ„ด์Šค(ํด๋ผ์ด์–ธํŠธ์˜ ์˜ํ–ฅ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹˜). ํŒ๋…๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฌ๊ธฐ์˜ ํ‘œ์—์„œ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

HBase โ€“ HDFS์—์„œ 300GB(100GB ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ)

Cassandra - 250GB(๋ณต์ œ ์ธ์ž = 3)

์ €๊ฒƒ๋“ค. ๋ณผ๋ฅจ์€ ๊ฑฐ์˜ ๋™์ผํ–ˆ์Šต๋‹ˆ๋‹ค(HBase์—์„œ๋Š” ์กฐ๊ธˆ ๋” ๋†’์Œ).

HBase ๋งค๊ฐœ๋ณ€์ˆ˜:

dfs.client.short.circuit.num = 5 (HDFS ํด๋ผ์ด์–ธํŠธ ์ตœ์ ํ™”)

hbase.lru.cache.heavy.eviction.count.limit = 30 - ์ด๋Š” 30๋ฒˆ์˜ ์ œ๊ฑฐ(~5๋ถ„) ํ›„์— ํŒจ์น˜๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

hbase.lru.cache.heavy.eviction.mb.size.limit = 300 โ€” ์บ์‹ฑ ๋ฐ ์ œ๊ฑฐ์˜ ๋ชฉํ‘œ ๋ณผ๋ฅจ

YCSB ๋กœ๊ทธ๋Š” ๊ตฌ๋ฌธ ๋ถ„์„๋˜์–ด Excel ๊ทธ๋ž˜ํ”„๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

HBase์—์„œ ์ตœ๋Œ€ 3๋ฐฐ, HDFS์—์„œ ์ตœ๋Œ€ 5๋ฐฐ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๊ณ  ์ดˆ๋‹น 450๋งŒ ๊ฑด์˜ ์ฝ๊ธฐ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ์ •๋ณด๊ฐ€ ์ƒ์‚ฐ์„ฑ์„ ์œ„ํ•ด ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€