我正在尝试在单节点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
更新:我可以在不使用上面提到的rmr2和rhdfs库here的情况下,从STDIO运行R MR作业读写。所以,现在我的猜测是问题被隔离到rmr2和rhdfs包。
如何解决这个问题?
答案 0 :(得分:5)
在系统目录而不是自定义目录(〜/ R / x86_64-pc-linux-gnu-library / 3.0)中安装rmr2 / rhdfs的依赖项。这可以通过运行R作为sudo然后安装依赖项来完成。感谢Antonio在RHadoop论坛中的帮助。
答案 1 :(得分:1)
这种问题最常见的解决方案是重新安装,因为在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
由于