一、使用并行计算加倍提升性能
1、数据并行 VS 任务并行
实现数据并行的算法
scoket 并行性
注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串行执行的部分,包括并行性带来的开销
在非windows系统中,parallel支持分叉集群(交叉法),新的work进程会从父R进程分叉出来,并拷贝数据。好处是不需要显示的创建和销毁集群
实现任务并行的算法

2、计算机集群并行执行多个任务
只有基于socket的集群可以做到这一点,因为进程不可能被分叉到另外一台机器。由于计算机集群必须通过网络通信,所以网络的带宽和延迟对整个集群的性能
非常重要。所以在多个物理机的情况下 ,应该把所有节点部署在同一个网段内更合理

3、共享内存并行性 VS 分布式内存并行性
分布式内存并行性中 每个进程都有自己堵路的内存空间,换句话说,每个进程都要有自己的数据拷贝,即使这些进程处理的是相同的数据。
这样的话在单个计算机的多个进程运行并行代码,这会导致极大的冗余。交叉集群没这个问题,socker集群,创建了新的R实例,所以每个worker都有数据拷贝。

共享内存并行性 所有的worker进程共享单份数据拷贝。虽然parallel 包不支持共享内存并行性,但是可以通过调整数据结构来支持,bigmemory中的big.matrix对象的cran包
一定要注意避免竞争条件,即worker进程读写相同内存位置,由于协调不当导致冲突和程序错误。

4、优化并行的可能
主要障碍就是master和worker之间的数据传递和拷贝。
1、就是使用共享内存并行性
2、数据压缩 
3、将数据保存在每个worker节点,只保留中间节点的数据通信 类似于MR

二、将数据处理交给数据库系统
一个很大的数据集存储在数据库中,将所有的数据抽取到R里面是不现实的
1、将数据抽取到R VS 在数据库中处理数据
从关系型数据库中使用sql进行数据预处理
dplyr 和 pivotalR 可以将R表达式转化为SQL
2、在数据库中运行统计和机器学习算法
madlib 想postgresql 添加了高级统计功能,不支持windows,只需一个简单的数据库规则,即可在数据库端计算,将计算结果加载到windows
3、使用列式数据库提升性能
这种方式目前并不太适合我们的业务
4、使用数据库阵列最大化科学计算的性能
针对多维模型是运用

三、展开联想,R和大数据
HDFS 存储数据,按块存储(128M),默认3个副本,保证了高度可用性
MR 数据并行的方式处理hdfs上的数据,和第八点很像,但是MR的优势是数据已经存储在worker节点上而不需要每次运行任务的时候分发
但是,每次读取需要从硬盘获取数据,然后在写回磁盘。所以完成计算时间超过了读写数据的开销以及运行hadoop集群的开销。
具体不在细说,因为大数据的生态体系已经很大了,不是一个人一两天可以说清楚的。

使用Rhadoop分析HDFS数据
使用rmr2函数读取文件make.input.format(),还可以读取原生文本,json,hadoop序列化文件,hbase我,hive,pig。
除了rhdfs和rmr2外,还有
plyrmr:mr上的plyr功能
rhbase:提供处理rhbase数据的函数
ravro:读写avro格式的数据

到这里已经全部介绍完了高性能编程的核心知识。

关于海量数据,在R无论如何优化也R满足不了的情况,比如针对我们的业务  高考单卷种500W 考生 单科目 * 100个小题   5亿离线数据量  ,再加上历次共有几十亿数据量。

这时个人觉得再用R优化,增加硬件性能也是指标不治本的情况,上大数据吧,我们应该形成自己的数据仓库,存放历史数据,形成产品,这样才能做大,做强!

PS:当时选用R就是为了解决像DIF、信度、测量标准误差、相关系数等方面的算法问题,抛弃R,如何解决算法问题呢。在算法不能拆分的情况下,如何分布式计算相关系数?

sparkR? 还有别的什么办法吗?

R语言高性能编程(三)的更多相关文章

  1. R语言高性能编程,优化(一)

    这段时间学习了<R高性能编程>这本书,基于这段时间做的项目实践,总结了一些自己的体会,和大家分享 一.为什么R程序有时候会很慢?1.计算性能的三个限制条件 cpu ram io R代码本身 ...

  2. R语言高性能编程(二)

    接着上一篇 一.减少内存使用的简单方法1.重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,一般来说只要向量没有被其他对象引用,就可 ...

  3. R语言实战(三)基本图形与基本统计分析

    本文对应<R语言实战>第6章:基本图形:第7章:基本统计分析 =============================================================== ...

  4. R语言学习 第三篇:数据框

    数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同.数据框的每列 ...

  5. R语言面向对象编程:S3和R6

    一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+met ...

  6. R语言数据管理(三):数据读入

    R的数据读入非常灵活,即可以在R软件中直接输入,也可以读入外部数据. 一.直接输入数据 ①c()函数 ②scan()函数 其功能类似c()函数,scan()实际上是一种键盘输入数据函数.当输入scan ...

  7. R语言实战(三) 图形初阶

    3.1 使用图形 plot:基础绘图 abline:添加回归直线 hist:绘制直方图 boxplot:绘制箱线图 dev.new():returns the return value of the ...

  8. R语言实战(三)——模拟随机游走数据

    一.模拟随机游走数据示例 x <- matrix(0,1000,1) for(i in 1:1000){ x[i+1] <- x[i]+rnorm(1) } plot(x,type=&qu ...

  9. [读书笔记] R语言实战 (三) 图形初阶

    创建图形,保存图形,修改特征:标题,坐标轴,标签,颜色,线条,符号,文本标注. 1. 一个简单的例子 #输出到图形到pdf文件 pdf("mygrapg.pdf") attach( ...

随机推荐

  1. Python实战之用类的静态方法实现登录验证

    #!usr/bin/env Python3 # -*-coding:utf-8-*- __author__="William" #define a class,just to le ...

  2. Python自学笔记-生成器(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 生成器 通过列 ...

  3. ch4-计算属性(表达式计算 computed methods watchers)

    1 计算属性 1.1 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算. 在模板中放入太多的逻辑会让模板过重且难以维护. <div id="test1"> { ...

  4. ctp交易平台转java接口转换

    首先感谢倪材@csdn的博客,给了我很大帮助. http://blog.csdn.net/pjjing/article/details/53186394 http://blog.csdn.net/pj ...

  5. 数据收集利器 cAdvisor - 每天5分钟玩转 Docker 容器技术(82)

    cAdvisor 是 google 开发的容器监控工具,我们来看看 cAdvisor 有什么能耐. 在 host 中运行 cAdvisor 容器. docker run \ --volume=/:/r ...

  6. canvas图表详解系列(4):动态散点图

    本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...

  7. MySql入门(1)

    MySql入门(1) 安装 检查系统中是否已经安装了MySQL sudo netstat -tap | grep mysql 若没有显示已安装结果,则没有安装.否则表示已经安装. sudo apt-g ...

  8. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  9. Httpd2.2常见配置及功能

    Httpd 2.2常见配置 要配置http服务的配置文件,先备份一下,养成良好习惯,如果误操作导致http服务起不来,就可以将备份的主配置文件重新覆盖一下 httpd配置文件的组成:有三大部分组成,其 ...

  10. Java IO(IO流)-2

    IO流 第一部分 (OutputStreamWriter BufferOutputStream) 转换流 超类为Reader和Writer 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...