【问题标题】:Error in library(functional) : there is no package called ‘functional’ - While running MR using rmr2库中的错误(功能):没有名为“功能”的包 - 使用 rmr2 运行 MR 时
【发布时间】:2013-10-16 15:28:07
【问题描述】:

我正在尝试在单节点 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

更新:我可以在不使用here 中提到的 rmr2 和 rhdfs 库的情况下运行从 STDIO 读取和写入的 R MR 作业。所以,目前我的猜测是问题与 rmr2 和 rhdfs 包有关。

如何解决这个问题?

【问题讨论】:

  • 您升级 R 并以sudo ...(以 root 身份)安装所有软件包了吗?也许您遇到了用户与系统上下文问题。在 hadoop 中运行的 R 脚本所看到的环境可能与从用户的交互式 R 命令行看到的环境不同,这似乎是您正在运行 sessionInfo() 的位置。你可以在脚本中运行sessionInfo() 吗?
  • 感谢 Stuart,我已经使用 sudo apt-get ... 命令安装了 R 并将 R 包升级到私有库。我能够使用vm4learning 用户成功运行 MR 程序(Java 和 Streaming)和简单的 R 程序。他们两个的用户都是相同的,所以似乎没有上下文问题。问题是使用 rmr 包作为 vm4learning 用户运行 R MR 程序。

标签: r hadoop mapreduce hadoop-streaming revolution-r


【解决方案1】:

在系统目录而不是自定义目录 (~/R/x86_64-pc-linux-gnu-library/3.0) 中安装 rmr2/rhdfs 的依赖项。这可以通过将 R 作为 sudo 运行,然后安装依赖项来完成。感谢 Antonio 在 RHadoop 论坛中的帮助。

【讨论】:

  • 我知道这是一个非常古老的线程。我也陷入了类似的问题。我在集群中只有一个节点,其中 R 包安装在 ~/R/x86_64-pc-linux-gnu-library/3.2 中。你能指导我如何更改包目录吗?
  • 我终于成功了。感谢您提出修复。
【解决方案2】:

此类问题最常见的解决方案是重新安装,因为在 sesssionInfo() 你得到了

**functional_0.4** 

当我执行 sessionInfo() 时,我得到了

functional_0.4

我猜你可能缺少一些依赖项,所以请从你的 R 控制台使用

install.packages("functional",dependencies="TRUE") 

解决由于任何其他软件包引起的任何问题。

P.S:从可用镜像中选择 cloud-0 镜像。

如果仍然没有帮助,我建议您使用 r-base-dev 作为您的 R 版本,尽管我没有理由使用 http://cran.r-project.org/bin/linux/ubuntu/README 来证明这一点

sudo apt-get install r-base-dev

谢谢

【讨论】:

  • 已经尝试过上述解决方案,但都没有奏效。 r-base 依赖于 r-base-dev,所以它已经安装好了。已经重装过几次了。
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2018-06-23
  • 1970-01-01
相关资源
最近更新 更多