楼主: 北方Smile
1992 4

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

  • 0关注
  • 3粉丝

硕士生

15%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
883 点
帖子
84
精华
0
在线时间
16 小时
注册时间
2016-3-28
最后登录
2016-4-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


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

介绍

大数据时代,我们常常面对海量数据而头疼。作为学统计出身的人,我们想折腾大数据但又不想学习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步骤三:配置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 sparkrstudioCONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O               BLOCK I/Osparkrstudio        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) # 初始化RRDsc <- sparkR.init(master = "local")sqlContext <- sparkRSQL.init(sc)# 创建DataFramemtcarsDF <- createDataFrame(sqlContext, mtcars)head(mtcarsDF)mpg cyl disp  hp drat    wt  qsec vs am gear carb1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    42 21.0   6  160 110 3.90 2.875 17.02  0  1    4    43 22.8   4  108  93 3.85 2.320 18.61  1  1    4    14 21.4   6  258 110 3.08 3.215 19.44  1  0    3    15 18.7   8  360 175 3.15 3.440 17.02  0  0    3    26 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 prediction1  0 0.580069452  0 0.640607093  1 0.724687184  1 0.478038425  0 0.060709726  1 0.54994276模型评估# error变量: 观测值和预测值的差值modelPrediction$error <- abs(modelPrediction$vs - modelPrediction$prediction) # modelPrediction 现在对 SQLContext 是可见的registerTempTable(modelPrediction, "modelPrediction") num_errors <- sql(sqlContext, "SELECT count(error) FROM modelPrediction WHERE error = 1")total_errors <- sql(sqlContext, "SELECT count(error) FROM modelPrediction") # 模型错误率training_acc <- collect(num_errors) / collect(total_errors)training_acc _c01   0

转载地址:https://segmentfault.com/a/1190000004656388



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Spark 机器学习 海纳百川 Park SPAR 航空母舰 核动力 战斗机 frame filter

回帖推荐

bailihongchen 发表于3楼  查看完整内容

thanks for sharing
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Limdep + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

沙发
albertwishedu 发表于 2016-4-8 08:45:07 |只看作者 |坛友微信交流群

使用道具

藤椅
bailihongchen 发表于 2016-4-8 08:57:38 |只看作者 |坛友微信交流群
thanks for sharing

使用道具

板凳
houyunhuang 发表于 2016-4-11 15:02:38 |只看作者 |坛友微信交流群

使用道具

报纸
soccy 发表于 2016-4-14 07:34:50 |只看作者 |坛友微信交流群
不错不错

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-1 18:20