作者Wush978 (拒看低质媒体)
看板R_Language
标题Re: [问题] 透过R使用Rhdfs package读取超大CSV档
时间Thu Aug 28 00:33:45 2014
最近自己在玩hadoop-2.2.0的hdfs,
发现已经有C client。
试了一下,发现可以用Rcpp简单包到R中。
我自己测试的读取效能约50MB/s (可能和网路有关),
和command line的hadoop差不多。
※ 引述《dppman (*^o^*)》之铭言:
: ※ 引述《Wush978 (拒看低质媒体)》之铭言:
: : 建议你先测量一下throughput
: : ```r
: : start.time <- Sys.time()
: : repeat {
: : m = hdfs.read(f)
: : duration <- as.numeric(difftime(Sys.time(), start.time, unit = "secs"))
: : print(length(m) / duration) # 每秒的bytes数
: : start.time <- Sys.time()
: : }
: : ```
: : 先看一下hdfs.read的效能,如果throughput是1MB / s的速度的话
: : 20G 需要 20*2^30 / 2^20 秒,大约是5.6小时
: : ---
: : 也建议你另外量测一下hdfs fs -put 的频宽,
: : 拿来和你在R 里面的测到的throughput做比较。
: : 两者的差距是你可以在R 里面优化的程度。
: : 所以如果两者差不多快的话,其实你R 怎麽改也是这样。
: : FYI
: 测试了一下throughput:
: 在同要的主机(安装RStudio Server的主机):
: Part I:
: [root@CDH-RWeb01 ~]# time hadoop fs -put /tmp/201303.csv /tmp/
: real 3m5.876s
: user 0m32.257s
: sys 0m14.262s
: [root@CDH-RStudio ~]# ls -al /tmp/201303.csv
: -rw-r--r-- 1 root root 8596758123 2014-05-23 09:54 /tmp/201303.csv
: 结果:大约在64086KB /sec
: Part II:
: 用下列这段测试
: start.time <- Sys.time()
: repeat {
: m = hdfs.read(f)
: duration <- as.numeric(difftime(Sys.time(), start.time, unit = "secs"))
: print(length(m) / duration) # 每秒的bytes数
: start.time <- Sys.time()
: }
: 结果:450KB/sec ~ 465KB/sec
: [1] 464816.2
: [1] 465376.1
: [1] 464151.4
: [1] 457809.4
: [1] 456209.6
: [1] 453534.4
: [1] 454532.2
: [1] 450441.2
: 差距很大@@@@
: 该怎麽优化呢?
: Thanks in advance.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.24.242.21
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1409157227.A.872.html
※ 编辑: Wush978 (114.24.242.21), 08/28/2014 00:34:31