- A+
为了满足用R语言处理pb量级数据的需求,我们需要把它和Hadoop联合起来使用。本文的目的就是阐述实现二者联合作业的不同技术。
方法一:利用Streaming APIs
Hadoop支持一些 Streaming API来将R语言中的函数传入,并在MapReduce模式下运行这些函数。这些Streaming API可以将任意能在map-reduce模式下访问和操作标准I/O接口的R脚本传入Hadoop中。因此,你不需要额外开启一些客户端之类的东西。如下是一个例子:
- $ ${HADOOP_HOME}/bin/Hadoop jar
- ${HADOOP_HOME}/contrib/streaming/*.jar \
- -inputformat
- org.apache.hadoop.mapred.TextInputFormat \
- -input input_data.txt \
- -output output \
- -mapper /home/tst/src/map.R \
- -reducer /home/tst/src/reduce.R \
- -file /home/tst/src/map.R \
- -file /home/tst/src/reduce.R
方法二:使用Rhipe包
Rhipe包允许用户在R中使用MapReduce。在使用这一方法前,要做相应的前期准备工作。R需要被安装在Hadoop集群中的每一个数据节点上,此外每个节点还要安装Protocol Buffers(更多资料请参考 http://wiki.apache.org/hadoop/ProtocolBuffers),Rhipe也需要在每个节点上都可以被使用。
下面是在R中利用Rhipe应用MapReduce框架的范例:
- library(Rhipe)
- rhinit(TRUE, TRUE);
- map<-expression ( {lapply (map.values, function(mapper)…)})
- reduce<-expression(
- pre = {…},
- reduce = {…},
- post = {…},
- )
- x <- rhmr(map=map, reduce=reduce,
- ifolder=inputPath,
- ofolder=outputPath,
- inout=c('text', 'text'),
- jobname='test name'))
- rhex(x)
方法三:使用RHadoop
RHadoop是Recolution Analytics下的一个开源库,与Rhipe类似,它的功能也是在MapReduce模式下执行R函数。后续列举的都是该库中的一些包。plyrmr包可以在Hadoop中对大数据集进行一些常用的数据整理操作。rmr包提供了一些让R和Hadoop联合作业的函数。rdfs包提供了一些函数来连接R和分布式文件系统(HDFS)。rhbase包中的函数则能连接R和HBase。
下面这个例子中,我们会演示如何使用rmr包中的一些函数来让R与Hadoop联合作业。
- library(rmr)
- maplogic<-function(k,v) { …}
- reducelogic<-function(k,vv) { …}
- mapreduce( input ="data.txt",
- output="output",
- textinputformat =rawtextinputformat,
- map = maplogic,
- reduce=reducelogic
- )
方法总结
总的说来,上述三种方法都能很容易地实现R与Hadoop的联合作业,这样一来R就拥有了在分布式文件系统(HDFS)上处理大数据的能力。但同时,这三种方法也各有利弊。
关键结论
1、使用Streaming APIs最为简单,它的安装和设置都很方便。Rhipe和RHadoop都需要对R进行一些设置,并且也需要Hadoop集群上一些包的支持。但在执行函数方面,Streaming APIs 需要将函数依次map和reduce,而Rhipe和RHadoop允许开发者在R函数中定义并调用MapReduce函数。
2、与Rhipe和RHadoop不同,使用Streamings APIs也不需要客户端。
3、除此之外,我们也可以使用Apache Mahout,Apache Hive,Segue框架与其他来自Revolution Analytics的商业版R来实现大规模机器学习。
关于这一主题的更多细节请参阅我最新出版的机器学习书籍。
翻译:钱亦欣
原文:Integrating R with Apache Hadoop
作者 :Sunila Gollapudi。
翻译链接:http://www.xueqing.tv/cms/article/217
支付宝打赏
微信打赏
赏