我正在尝试在单节点Hadoop群集中使用rmr2运行一个简单的MR程序。这是设置的环境

Ubuntu 12.04(32位)
R(Ubuntu随附2.14.1,因此更新为3.0.2)
here安装了最新的rmr2和rhdfs以及相应的依赖项
Hadoop 1.2.1

现在我正在尝试运行一个简单的MR程序

Sys.setenv(HADOOP_HOME="/home/training/Installations/hadoop-1.2.1")
Sys.setenv(HADOOP_CMD="/home/training/Installations/hadoop-1.2.1/bin/hadoop")

library(rmr2)
library(rhdfs)

ints = to.dfs(1:100)
calc = mapreduce(input = ints, map = function(k, v) cbind(v, 2*v))
from.dfs(calc)

mapreduce作业失败,并在 hadoop-1.2.1 / logs / userlogs / job_201310091055_0001 / attempt_201310091055_0001_m_000000_0 / stderr 中显示以下错误消息
Error in library(functional) : there is no package called ‘functional’
Execution halted
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:576)

但是,sessionInfo()显示功能包已加载
> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: i686-pc-linux-gnu (32-bit)

>locale:
 [1] LC_CTYPE=en_IN       LC_NUMERIC=C         LC_TIME=en_IN
 [4] LC_COLLATE=en_IN     LC_MONETARY=en_IN    LC_MESSAGES=en_IN
 [7] LC_PAPER=en_IN       LC_NAME=C            LC_ADDRESS=C
[10] LC_TELEPHONE=C       LC_MEASUREMENT=en_IN LC_IDENTIFICATION=C

>attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

>other attached packages:
 [1] rhdfs_1.0.6    rJava_0.9-4    rmr2_2.3.0     reshape2_1.2.2 plyr_1.8
 [6] stringr_0.6.2  **functional_0.4** digest_0.6.3   bitops_1.0-6   RJSONIO_1.0-3
[11] Rcpp_0.10.5

更新:我能够从STDIO读取和写入R MR作业,而无需使用here提到的rmr2和rhdfs库。因此,现在我的猜测是问题出在rmr2和rhdfs软件包中。

如何解决这个问题?

最佳答案

在系统目录而不是自定义目录(〜/ R / x86_64-pc-linux-gnu-library / 3.0)中安装rmr2 / rhdfs的依赖项。可以以sudo的身份运行R,然后安装依赖项。感谢Antonio在RHadoop论坛中提供的帮助。

关于r - 库中的错误(功能性):没有名为 ‘functional’的软件包-使用rmr2运行MR时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19269192/

10-10 16:51