2016-02-04 39 views
0

我试图让亨利马乌火花壳牌对Cloudera的快速启动虚拟机上运行亨利马乌0.11.1火花壳牌的NoClassDefFoundError

Mahout: Version 0.11.1 

Spark: Version 1.5.0-cdh5.5.1 

Java: 1.7.0_67 

的.bashrc设置为

export MAHOUT_HOME=/home/cloudera/Desktop/Mahout_0_11_1 
export MAHOUT_LOCAL=true 
export SPARK_HOME=/usr/lib/spark 
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera 

当我运行Mahout Spark-Shell我收到以下错误消息。然后

java.lang.NoClassDefFoundError: com/sun/jersey/spi/container/servlet/ServletContainer 
    at org.apache.spark.status.api.v1.ApiRootResource$.getServletHandler(ApiRootResource.scala:187) 
    at org.apache.spark.ui.SparkUI.initialize(SparkUI.scala:68) 
    at org.apache.spark.ui.SparkUI.<init>(SparkUI.scala:74) 
    at org.apache.spark.ui.SparkUI$.create(SparkUI.scala:190) 
    at org.apache.spark.ui.SparkUI$.createLiveUI(SparkUI.scala:141) 
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:466) 
    at org.apache.mahout.sparkbindings.package$.mahoutSparkContext(package.scala:91) 
    at org.apache.mahout.sparkbindings.shell.MahoutSparkILoop.createSparkContext(MahoutSparkILoop.scala:89) 
... 

其次是:

Mahout distributed context is available as "implicit val sdc". 
java.lang.NullPointerException 
    at org.apache.spark.sql.execution.ui.SQLListener.<init>(SQLListener.scala:34) 
    at org.apache.spark.sql.SQLContext.<init>(SQLContext.scala:77) 
    at org.apache.spark.repl.SparkILoop.createSQLContext(SparkILoop.scala:1033) 
    at $iwC$$iwC.<init>(<console>:11) 
    at $iwC.<init>(<console>:19) 

回答

2
在spark-env.sh

添加

出口SPARK_DIST_CLASSPATH = $(/路径/到/ Hadoop的/ bin中/ hadoop classpath)

并确保jersey-servlet-1.9.jar位于类路径中。

检查所有* -env.sh脚本,并尽可能明确地设置环境变量,检查每个环境变量,然后检查日志以查找错误。

cd/ 找到。 -name新泽西州的servlet-1.9.jar 并确保在那里找到文件的路径是在classpath

编辑: 添加球衣服务器-1.9.jar到$ MAHOUT_HOME/lib /目录。

+1

根据https://github.com/apache/spark/blob/master/pom.xml中的spark分支1.5 pom.xml,应该有三个Jersey Jars。 jersey-server-1.9.jar,jersey-core-1.9.jar和jersey-json-1.9.jar。没有找到的类在泽西服务器jar中。你可以从Maven中心下载罐子。或者,它们可能已被复制到服务器上的另一个目录中。 cd /然后找到。 -name jersey-server * .jar并查看是否可以找到它。如果你这样做,将它复制到hadoop库。 – fcnorman

+0

我已经添加该文件,它似乎仍然没有工作。 Mahout说,当我启动shell时“无法为您的平台加载native-hadoop库......在适用的情况下使用内置java类”(如果这是相关的)。 spark-env.sh(https://gist.github.com/anonymous/442a91fd1c808b1f9224)我在/ usr/lib/hadoop/lib目录下有文件(https://gist.github.com/anonymous/817f4859958a833e053a) – Ryan

+1

['jersey-sevlet'](http://mvnrepository.com/artifact/com.sun.jersey/jersey-servlet)直到1.10才被引入。 Spark使用1.9。在1.9版本中包含了'ServletContainer',但是在1.10版本中,它被放入不同包装的'jersey-servlet'工件中。所以为了兼容,我会使用1.9版本,如果这是Spark使用的。 –