2014-04-11 39 views
0

我在Debian 7上安装了CDH5。我在单节点伪分布式模式下使用Hadoop和MapReduce1。R 2.15.1; Rhipe 0.73; CDH 5 - java.io.IOException:No FileSystem for scheme:hdfs

我想运行Rhipe内R.下载我已经安装了它之后:

sudo R CMD INSTALL Rhipe_0.73.1.tar.gz 

然后我出口环境变量:

> library(Rhipe) 
------------------------------------------------ 
| Please call rhinit() else RHIPE will not run | 
------------------------------------------------ 
> rhinit() 
Rhipe: Using Rhipe.jar file 
Initializing Rhipe v0.73 
14/04/11 12:21:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
java.io.IOException: No FileSystem for scheme: hdfs 
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2385) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2392) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89) 
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2431) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2413) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:368) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:167) 
    at org.godhuli.rhipe.PersonalServer.run(PersonalServer.java:321) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at RJavaTools.invokeMethod(RJavaTools.java:386) 
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : 
    java.lang.NullPointerException 
> 

export HADOOP_CONF_DIR="/etc/hadoop/conf" 
export HADOOP="/usr/lib/hadoop" 
export HADOOP_BIN=/usr/lib/hadoop/bin 
export HADOOP_HOME=/usr/lib/hadoop 

运行后R

我错过了什么?

爪哇系统中使用:

There are 2 choices for the alternative java (providing /usr/bin/java). 

    Selection Path           Priority Status 
------------------------------------------------------------ 
    0   /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061  auto mode 
* 1   /usr/lib/jvm/j2sdk1.7-oracle/jre/bin/java  317  manual mode 
    2   /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061  manual mode 
+0

你可以运行命令'hadoop class path'并查看结果是否包含hadoop-hdfs - *。jar文件。 – donut

+0

@donut'damian @ cdh5-singleOldMR:〜$ hadoop class path',结果:'错误:无法找到或加载主类class'。 –

+0

对不起,我的错误命令是'hadoop classpath' – donut

回答

1

的rhinit()函数试图加载hadoop的罐子存在于在HADOOP_HOME variable.Since指定目录该功能只加载HADOOP_HOME那些罐子到类你必须将所有hadoop特定的jar包保存在该目录中。

如果您在rhipe包中查看zzz.R文件,可以理解这一点。

+0

我用'sudo ln -s/usr创建了符号链接/lib/hadoop-hdfs/hadoop-hdfs.jar/usr/lib/hadoop/hadoop-hdfs.jar',我目前有其他错误:'java.lang.NoClassDefFoundError:org/apache/hadoop/mapreduce/lib/output/FileOutputFormat'。它看起来像不同类型的错误:/ –

+0

你可以在hadoop-core * .jar和'hadoop classpath'命令中加入所有其他jar的链接 – donut

+0

好的,我做了:'sudo ln -s/usr/lib/hadoop- hdfs/*/usr/lib/hadoop'和'sudo ln -s /usr/lib/hadoop-0.20-mapreduce/*/usr/lib/hadoop'。现在看起来hadoop/java没有错误,但是使用协议缓冲区,尽管我从Debian repos获得了2.4.1版本:'.jcall(“RJavaTools”,“Ljava/lang/Object;”,“invokeMethod”, cl,: java.lang.UnsupportedOperationException:这应该被子类覆盖。' –