Data.table: SHM ํฌ๊ธฐ ์ดˆ๊ณผ ์˜ค๋ฅ˜

์— ๋งŒ๋“  2017๋…„ 07์›” 14์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Rdatatable/data.table

๊ธฐ๋Šฅ ์š”์ฒญ, /dev/shm์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜์—ฌ mmap ํฌ๊ธฐ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ R์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ  /dev/shm์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ๋Š” 64M์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ํŒŒ์ดํ”„ ์ŠคํŠธ๋ฆผ์—์„œ mmap์„ ์ˆ˜ํ–‰ํ•  ๋•Œ(์˜ˆ: hadoop fs -cat /myfile.csv) ํŒŒ์ดํ”„์—์„œ mmap์œผ๋กœ shm ํฌ๊ธฐ ๋ฐ”์ดํŠธ๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค. ์ •์ƒ์œผ๋กœ ์˜์‹ฌ๋˜๋Š” C API๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ fread๊ฐ€ ํŒŒ์ผ ํ˜•์‹์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ์ด์œ ๋ฅผ ๋””๋ฒ„๊น…ํ•œ ๊ฒฐ๊ณผ data.table์˜ R ๋ฐ C ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ๋œ ์˜ค๋ฅ˜(๋‚ด ํŒŒ์ดํ”„๊ฐ€ ๋Š์–ด์ง„ ์œ„์น˜์— ๊ธฐ๋ฐ˜ํ•œ ์ž„์˜์˜ ๋ฉ”์‹œ์ง€):

 (ERROR):Expected sep (',') but ' ' ends field 0 when detecting types from point 10: 14183667

์ด๊ฒƒ์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • /dev/shm๋ณด๋‹ค ~5๋ฉ”๊ฐ€ ํฐ ํŒŒ์ผ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • /dev/shm์„ 64M๊ณผ ๊ฐ™์ด ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค(Docker ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ๊ฐ’์ž„).
  • "cat ~/myfile.csv"์—์„œ fread ์‹คํ–‰ <-- cat์€ ํŒŒ์ดํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋„์ปค V1.12+
  • ๋„์ปค ํ—ˆ๋ธŒ์˜ Centos ์ตœ์‹  ์ด๋ฏธ์ง€
  • R-์˜คํ”ˆ v3.4.0(๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ)

์ฝ”๋“œ์—์„œ: https://github.com/Rdatatable/data.table/blob/master/src/fread.c
788ํ–‰ ์ฃผ๋ณ€์—์„œ ์•„๋งˆ๋„ /dev/shm์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์€ ํŒŒ์ผ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค์˜ ๊ฒฝ์šฐ ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 > dat.df3<-fread("/opt/cloudera/parcels/CDH/bin/hadoop fs -cat /user/tcederquist/tim_pop_comm_14_5 | head -3668850" ,sep=",", header=TRUE, verbose=TRUE)
 Input contains no \n. Taking this to be a filename to open
 File opened, filesize is 0.062500 GB.
 Memory mapping ... ok
 ....basic output
 Type codes (point  8): 1111
 Type codes (point  9): 1111
 (ERROR):Expected sep (',') but ' ' ends field 0 when detecting types from point 10: 14183667

์˜ˆ์ƒ ๊ฒฐ๊ณผ:

 File opened, filesize is 0.373524 GB.

๋˜ํ•œ ์‹คํŒจํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ผ์ธ # ๋ฐ ์‹คํŒจ ์‹œ ๊ธฐํƒ€ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅํ™ฉํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์ „์— ์†์œผ๋กœ ๊ฐ’์„ 0์œผ๋กœ ๋งž์ถฐ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ํ–‰ #์ด ํ‘œ์‹œ๋˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. vebose=T๋Š” ์ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์™€ ๊ฐ™์€ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์œ„์น˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์‹œ ์œ ์šฉํ•œ ์ถœ๋ ฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํŒŒ์ผ์— 20M ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์—).

 Count of eol: 3668839 (including 0 at the end)
 nrow = MIN( nsep [11006514] / (ncol [4] -1), neol [3668839] - endblanks [0] ) = 3668838

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๋Ÿฌ๋ถ„, ์ œ๊ฐ€ zUMIS/19 ์‹ ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ dev 1.10.5๋ฅผ ์‹œ๋„ํ–ˆ๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ํ–ˆ์–ด ์–˜๋“ค์•„!

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ /dev/shm์ด ๋„ˆ๋ฌด ์ž‘์€ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” OS์˜ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ๋‹จ๊ธฐ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ตœ์‹  OS๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ 50%๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚ด 64G amazon ec2 ์ธ์Šคํ„ด์Šค์—์„œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 docker run --shm-size="30g" ... other stuff ...

๋™์˜. ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค.
dev์˜ ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๋ช…๋ น ์ž…๋ ฅ์˜ ์ถœ๋ ฅ์— ๋žจ ๋””์Šคํฌ(/dev/shm)๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•  ๋•Œ๋Š” ๋” ๋น ๋ฅด์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ์žฅ์น˜ ๊ฐ€๋“ ์ฐธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: #1139 ๋ฐ zUMI/19. ๋ณด๊ณ ํ•ด ์ฃผ์‹  Kyle Chung์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด์ œ ํ‘œ์ค€ tempdir()์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋žจ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด TEMPDIR์„ /dev/shm์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ?tempdir์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

dev 1.10.5๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ๋ถ„, ์ œ๊ฐ€ zUMIS/19 ์‹ ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ dev 1.10.5๋ฅผ ์‹œ๋„ํ–ˆ๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ž˜ํ–ˆ์–ด ์–˜๋“ค์•„!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰