【发布时间】:2016-03-09 17:11:16
【问题描述】:
类似于my question here,但这次是 Java,而不是 Python,给我带来了问题。
我已遵循建议的步骤(据我所知)here,但由于我使用的是 hadoop-2.6.1,我认为我应该使用旧 API,而不是例子。
我正在开发 Ubuntu,我拥有的各种组件版本是
- Spark spark-1.5.1-bin-hadoop2.6
- Hadoop hadoop-2.6.1
- 蒙古 3.0.8
- Mongo-Hadoop 连接器 通过 Maven 包含的 jars
- Java 1.8.0_66
- Maven 3.0.5
我的 Java 程序是基本的
import org.apache.spark.api.java.*;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;
import com.mongodb.hadoop.MongoInputFormat;
import org.apache.hadoop.conf.Configuration;
import org.bson.BSONObject;
public class SimpleApp {
public static void main(String[] args) {
Configuration mongodbConfig = new Configuration();
mongodbConfig.set("mongo.job.input.format", "com.mongodb.hadoop.MongoInputFormat");
mongodbConfig.set("mongo.input.uri", "mongodb://localhost:27017/db.collection");
SparkConf conf = new SparkConf().setAppName("Simple Application");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaPairRDD<Object, BSONObject> documents = sc.newAPIHadoopRDD(
mongodbConfig, // Configuration
MongoInputFormat.class, // InputFormat: read from a live cluster.
Object.class, // Key class
BSONObject.class // Value class
);
}
}
使用 Maven (mvn package) 和以下 pom 文件构建良好
<project>
<groupId>edu.berkeley</groupId>
<artifactId>simple-project</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Simple Project</name>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.mongodb.mongo-hadoop</groupId>
<artifactId>mongo-hadoop-core</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
然后我提交 jar
/usr/local/share/spark-1.5.1-bin-hadoop2.6/bin/spark-submit --class "SimpleApp" --master local[4] target/simple-project-1.0.jar
并得到以下错误
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/hadoop/MongoInputFormat
at SimpleApp.main(SimpleApp.java:18)
通知
我在 12 月 18 日编辑了这个问题,因为它变得过于混乱和冗长。以前的 cmets 可能看起来无关紧要。但是,问题的上下文是相同的。
【问题讨论】:
-
找到具有“SampleSparkMongoProgram.java”类的项目并使用“全新安装”Maven 命令构建该项目。然后更新项目(Alt+F5)并选择所有项目。
标签: java mongodb maven hadoop apache-spark