题图为美国尼米兹核动力航空母舰

介绍

大数据时代,我们常常面对海量数据而头疼。作为学统计出身的人,我们想折腾大数据但又不想学习Hadoop或者Java,我们更倾向于把精力放在建模和算法设计上,SparkR和Docker的完美结合,让R的计算直接从一架战斗机的当兵作战华丽转变为一个航空母舰战斗群!不仅仅简化了分布式计算的操作,还简化了安装部署的环节,我们只几乎不需要做什么改动就可以直接运用R中的data frame进行分布式的计算。

什么是SparkR

参考前文 打造大数据产品:Shiny的Spark之旅,我们可以知道,SparkR是一个为R提供了轻量级的Spark前端的R包。 SparkR提供了一个分布式的data frame数据结构,解决了 R中的data frame只能在单机中使用的瓶颈,它和R中的data frame 一样支持许多操作,比如select,filter,aggregate等等。(类似dplyr包中的功能)这很好的解决了R的大数据级瓶颈问题。 SparkR也支持分布式的机器学习算法,比如使用MLib机器学习库。

什么是Docker

参考前文 打造数据产品的快速原型:Shiny的Docker之旅,我们也可以知道,Docker是一种类似于虚拟机的技术,主要解决标准化快速部署的问题,在Docker中安装的软件和主机中的软件可以完全隔离,并通过Daocloud或者hub.docker.com等云服务快速建立Docker仓库,快速复用Docker镜像。Docker已经不仅仅是DevOps人员手中的神器了,每一个开发者都应该学会如何使用Docker。

为什么要结合SparkR和Docker

SparkR的精髓在于分布式计算,而Docker的精髓在于标准容器的拓展性,SparkR和Docker的组合充分结合了二者各自的优点,将分布式应用底层化繁为简,为高层计算直接暴露接口,给科学计算节省了大量时间。

部署

本文将通过Docker讲解如何快速部署SparkR-RStudio容器,并通过一些简单的机器学习例子展示如何使用这个航母级别的组合拳。

步骤一:安装Docker和Daocloud

由于国内的镜像质量不够高,国外的镜像下载速度比较慢,出于试验的考虑,建议大家可以尝试使用Daocloud的镜像加速服务。

首先,我们需要在Daocloud注册一个账号,然后选择镜像加速,根据指示选择主机并安装Docker和Daocloud加速器。

步骤二:安装Spark-RStudio

感谢 vinicius85 在GitHub上的开源贡献,为我们已经做好了 Spark1.6+R+RStduio的镜像,我们利用daocloud加速拉取镜像。

dao pull vinicius85/spark-rstudio

以daemon形式运行容器,暴露Rstudio-server默认的8787端口, 并持久化docker内的/srv目录下的所有文件作为通讯。

docker run -d -v /home/docker:/srv -p 8787:8787 --name sparkrstudio vinicius85/sparkr-rstudio

或者通过下面最新的方式安装

docker run -d -p 8787:8787 --name financer index.tenxcloud.com/7harryprince/sparkr-rstudio​

步骤三:配置RStudio登陆账号

参考前文 R语言工程化实践:RStudio Server环境快速配置教程

docker exec -d sparkrstudio bash命令表示以daemon形式执行容器中的shell脚本

我们设置一下RStudio-Server的账号密码

docker exec -d sparkrstudio bash adduser harryzhu # 设置新用户名
docker exec -d sparkrstudio bash passwd harryzhu # 设置该用户的密码

步骤四:登陆RStudio

ifconfig命令可以查看到Docker当前的IP地址,透过这个IP,我们可以访问到RStudio-Server。

比如:

查看资源占用情况

docker stats sparkrstudio
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O               BLOCK I/O
sparkrstudio        4.50%               481.3 MB / 5.039 GB   9.55%               133.6 kB / 117.4 kB   3.252 MB / 135.2 kB

机器学习示例:

出于演示的考虑,这里引用并稍微改进了 tcosta 完成的一个逻辑回归的例子:

初始化

使用SparkR之前,我们需要确定,我们的容器内存要在2G以上,如果用AWS的乞丐版套装,马上就会报内存不足的错误。

Error in sparkR.init(master = "local") :JVM is not ready after 10 seconds

如果内存不足,可以退出docker并且在虚拟机中重新提高docker的内存和cpu的配置。

# 配置环境变量
Sys.setenv(SPARK_HOME="/opt/spark-1.6.0-bin-hadoop2.6").libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))Sys.setenv(JAVA_HOME="/usr/lib/jvm/java-8-oracle/")# 加载 SparkR包
library(SparkR)# 初始化RRD
#sc <- sparkR.init(master = "local")
#sqlContext <- sparkRSQL.init(sc)
# spark 2.0 后改为
sc <- sparkR.session(master = "local")# 创建DataFrame
#mtcarsDF <- createDataFrame(sqlContext, mtcars)
mtcarsDF <- createDataFrame( mtcars)
head(mtcarsDF)
mpg cyl disp  hp drat    wt  qsec vs am gear carb
1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

逻辑回归

model <- glm(vs ~ mpg + disp + hp + wt , data = mtcarsDF, family = "binomial")# 逻辑回归
# model <- glm(vs ~ mpg + disp + hp + wt , data = mtcarsDF, family = "gaussian")# 线性回归
predictions <- predict(model, newData = mtcarsDF )
modelPrediction <- select(predictions, "vs", "prediction")
head(modelPrediction)
 vs prediction
1  0 0.58006945
2  0 0.64060709
3  1 0.72468718
4  1 0.47803842
5  0 0.06070972
6  1 0.54994276

模型评估

# error变量: 观测值和预测值的差值
modelPrediction$error <- abs(modelPrediction$vs - modelPrediction$prediction)# modelPrediction 现在对 SQLContext 是可见的
# registerTempTable(modelPrediction, "modelPrediction")
# Spark 2.0 之后api改为
createTempTable(modelPrediction, "modelPrediction")#num_errors <- sql(sqlContext, "SELECT count(error) FROM modelPrediction WHERE error = 1")
#total_errors <- sql(sqlContext, "SELECT count(error) FROM modelPrediction")num_errors <- sql( "SELECT count(error) FROM modelPrediction WHERE error = 1")
total_errors <- sql( "SELECT count(error) FROM modelPrediction")# 模型错误率
training_acc <- collect(num_errors) / collect(total_errors)
training_acc
 _c0
1   0

参考资料

  • 打造数据产品的快速原型:Shiny的Docker之旅

  • R语言工程化实践:RStudio Server环境快速配置教程

  • 打造大数据产品:Shiny的Spark之旅

  • Tiago Vinícius: SparkR 1.5 MLlib Logistic Regression Example

  • SparkR: Distributed data frames with Spark and R

  • SparkR R frontend for Spark

  • 刘志强, et al. "基于 SparkR 的分类算法并行化研究." Journal of Frontiers of Computer Science and Technology 9.11 (2015): 1281-1294.

  • 用Parallel和foreach包玩转并行计算

  • Zeppelin跟SparkR使用spark 1.5+的分析平台建置

  • Fast learn scala

  • Spark在美团的实践

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。

[原]海纳百川 有容乃大:SparkR与Docker的机器学习实战相关推荐

  1. 海纳百川 有容乃大, 壁立千仞 无欲则刚

    可以想象,人生好比一趟旅行,一趟在海与山环绕的世界里旅行,地球上的海远比山多,这注定你开始旅行得造一艘结实的船. 我们学习的技术,就是在给自己造船的技术,这一般会占据我们人生时间中的三分之一,剩下的三 ...

  2. 海纳百川 有容乃大――采用JSI封装、集成第三方类库

    Java的成功,离不开它那个庞大的类库,不单是sun的类库,很多细节的实现都取自第三方(如xml解析采用Apache的实现). 如前言所述,我们暂时不大算编写丰富的公共API,但是我们可以集成其他成熟 ...

  3. 如何升华“海纳百川,有容乃大”——我们是高级生命

    看事物,抓本质. 地球上的生物都在围绕一个事情展开,那就是生存.如人类--价值观的不同,对生存的意义也就不同.不管是传宗接代,还是权力至上,更或者是杀戮征服,一切都是在有限生命里做自己认为有意义的事情 ...

  4. 龙蜥开发者说:海纳百川,有容乃大,我在龙蜥社区的升级之旅 | 第 11 期

    「龙蜥开发者说」第 11 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得.实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量.本期故事,我们邀请了龙蜥社区 ...

  5. 川大计算机学院夏令营感谢,【学长学姐经验分享】海纳百川,有容乃大—四川大学夏令营经验分享...

    一.个人情况 专业:三流师范类211院校人力资源管理 排名情况:2/31(参加夏令营与九推时都为此排名) 科研:大创项目A类一项.B类一项 英语:四级563,六级464 荣誉:国家励志奖学金两次 二. ...

  6. 痛苦的时候,不妨默读“有容乃大”

    --转载自简书用户 马石头 文/马石头 生而为人,活在这个世界上,谁都有可能遭遇意想不到事情,谁都会难免遇到一些排解不了的痛苦.有些事,可以通过我们的努力化解掉:有些事,任凭我们多么努力,也是无法避免 ...

  7. web返回的数据集格式_200G倾斜数据无插件web端预览!兼容三端,有容乃大—MapGIS M3D数据格式...

    "有容乃大"最早见之于明代兵部尚书太子太保袁可立在河南睢州自己"弗过堂"中所著的自勉联.二百年后又有清末民族英雄林则徐题于书室的八字联:"海纳百川,有 ...

  8. 有容乃大的技术世界观

    本文转载自:www.zhangxinxu.com/life/?p=811 对于刚工作不久,或者即将参与工作的技术人员,看一些关于技术人文,价值取向,以及技术世界观方面的文章要比单纯学一两个技术要重要的 ...

  9. 深圳市云海麒麟计算机系统,有容乃大 云海麒麟川大建平台解决方案

    原标题:有容乃大 云海麒麟川大建平台解决方案 近年来,高性能计算的崛起不仅仅在企业广泛应用,在学术教育领域的需求也日渐增多.云海麒麟在业内领先的技术也得到了知名学府四川大学的青睐.在云海麒麟的帮助下, ...

  10. AWS:云里乾坤,有容乃大

    作者|康翔 编辑|阿冒   设计|沐由 每年年底的AWS re:Invent,是每一位云计算从业者梦寐以求的舞台,这样说真的是毫不夸张. 每次,当我穿行于拉斯,要在三四天的时间里,从多达数百个论坛里找 ...

最新文章

  1. hdu2159 FATE
  2. B+树比B树更适合索引
  3. CSS display overflow 属性 cursor光标类型
  4. angr学习笔记(8)(文件内容符号化)
  5. 【AI初识境】深度学习中常用的损失函数有哪些?
  6. #linux进阶#wget
  7. 前端—每天5道面试题(5)
  8. python做自动化界面_使用Python进行自动化测试如何切换窗口
  9. 麦克纳姆轮全向移动机器人运动效率分析
  10. 最近,前端开发把我恶心着了,为了甩锅,我写了个牛逼的日志切面!
  11. 计算机控制技术数据存储器有,计算机控制技术复习资料.doc
  12. 平面直角坐标系中的旋转公式_难点解析丨空间直线、平面平行的判定及其性质...
  13. 淘宝定时任务 tbschedule实战
  14. 百旺如何看是否清卡_百旺开票系统每月清卡怎么操作?
  15. 两个方法告诉你如何将qlv格式的腾讯视频转换为mp4格式
  16. CVTE 后端开发面经
  17. vscode开发中绝对让你惊艳的插件!!!(个人在用) 持续更新。。。。
  18. 公告丨Dex.top(大力士)上线Opengram (GRAM)
  19. 1367: [蓝桥杯2018初赛]付账问题
  20. 装饰模式--小美的生日蛋糕

热门文章

  1. pytorch保存模型pth_详解Pytorch中的网络构造,模型save和load,.pth权重文件解析
  2. 计算机鼠标左键不起作用,电脑鼠标左键突然不好用了 右键没问题
  3. 异形与铁血战士关系 时间线
  4. jar脱壳_Android app 脱壳
  5. linux系统修改启动logo的步骤
  6. Android实战——一步一步实现流动的炫彩边框
  7. 『市场基础变量计算』
  8. 职场沟通10个小技巧 让你迅速融入团队
  9. 骑士cms最新全局SQL注入(官方奇葩修复案例)
  10. Photoshop安装