Spark:java.lang.NoClassDefFoundError:com/mongodb/hadoop/MongoInputFormat
我正在尝试使用Spark:java.lang.NoClassDefFoundError:com/mongodb/hadoop/MongoInputFormat,java,maven,hadoop,apache-spark,spark-streaming,Java,Maven,Hadoop,Apache Spark,Spark Streaming,我正在尝试使用mongohadoopconnector使用spark从mongodb读取数据 我尝试了不同版本的hadoop mongo连接器jar,但仍然出现了这个错误 编译期间没有错误 我能做些什么来解决这个问题 提前谢谢 Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/hadoop/MongoInputFormat at com.geekcap.javaworld.wordcount.Mo
mongohadoop
connector使用spark从mongodb
读取数据
我尝试了不同版本的hadoop mongo连接器jar,但仍然出现了这个错误
编译期间没有错误
我能做些什么来解决这个问题
提前谢谢
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/hadoop/MongoInputFormat
at com.geekcap.javaworld.wordcount.Mongo.main(Mongo.java:47)
Caused by: java.lang.ClassNotFoundException: com.mongodb.hadoop.MongoInputFormat
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
我的代码
import com.mongodb.hadoop.BSONFileOutputFormat;
import com.mongodb.hadoop.MongoInputFormat;
import com.mongodb.hadoop.MongoOutputFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import org.apache.hadoop.conf.Configuration;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.bson.BSONObject;
public class MongoTest {
// Set configuration options for the MongoDB Hadoop Connector.
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("App1");
JavaSparkContext sc = new JavaSparkContext(conf);
Configuration mongodbConfig;
mongodbConfig = new Configuration();
mongodbConfig.set("mongo.job.input.format", "com.mongodb.hadoop.MongoInputFormat");
mongodbConfig.set("mongo.input.uri","mongodb://localhost:27017/MyCollectionName.collection");
JavaPairRDD<Object, BSONObject> documents = sc.newAPIHadoopRDD(
mongodbConfig, // Configuration
MongoInputFormat.class, // InputFormat: read from a live cluster.
Object.class, // Key class
BSONObject.class // Value class
);
documents.saveAsTextFile("b.txt");
}
}
import com.mongodb.hadoop.BSONFileOutputFormat;
导入com.mongodb.hadoop.MongoInputFormat;
导入com.mongodb.hadoop.MongoOutputFormat;
导入java.util.array;
导入java.util.Collections;
导入java.util.LinkedList;
导入java.util.Queue;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.javapairdd;
导入org.apache.spark.api.java.JavaRDD;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.api.java.function.FlatMapFunction;
导入org.bson.BSONObject;
公共类MongoTest{
//设置MongoDB Hadoop连接器的配置选项。
公共静态void main(字符串[]args){
SparkConf conf=new SparkConf().setMaster(“本地”).setAppName(“App1”);
JavaSparkContext sc=新的JavaSparkContext(conf);
配置mongodbConfig;
mongodbConfig=新配置();
mongodbConfig.set(“mongo.job.input.format”、“com.mongodb.hadoop.MongoInputFormat”);
mongodbConfig.set(“mongo.input.uri”mongodb://localhost:27017/MyCollectionName.collection");
javapairdd documents=sc.newAPIHadoopRDD(
mongodbConfig,//配置
MongoInputFormat.class,//InputFormat:从活动群集读取。
Object.class,//键类
BSONObject.class//值类
);
documents.saveAsTextFile(“b.txt”);
}
}
pom.xml依赖项:
<!-- Import Spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>hadoopCom</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>/home/sys6002/NetBeansProjects/WordCount/lib/hadoop-common-2.7.1.jar</systemPath>
</dependency>
<dependency>
<groupId>hadoopCon1</groupId>
<artifactId>com.sample1</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>/home/sys6002/Downloads/mongo-hadoop-core-1.3.0.jar</systemPath>
</dependency>
</dependencies>
org.apache.spark
spark-core_2.11
1.4.0
朱尼特
朱尼特
4.11
测试
org.mongodb
mongodb驱动程序
3.0.4
hadoopCom
com.sample
1
系统
/home/sys6002/NetBeansProjects/WordCount/lib/hadoop-common-2.7.1.jar
hadoopCon1
com.sample1
1
系统
/home/sys6002/Downloads/mongo-hadoop-core-1.3.0.jar
经过几次尝试和更改后,这项功能得以实现
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.mongodb.mongo-hadoop</groupId>
<artifactId>mongo-hadoop-core</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>
org.apache.spark
spark-sql_2.11
1.5.1
org.apache.spark
spark-core_2.11
1.5.1
log4j
log4j
1.2.14
org.mongodb.mongo-hadoop
mongo hadoop内核
1.4.1
Java代码
Configuration conf = new Configuration();
conf.set("mongo.job.input.format", "com.mongodb.hadoop.MongoInputFormat");
conf.set("mongo.input.uri", "mongodb://localhost:27017/databasename.collectionname");
SparkConf sconf = new SparkConf().setMaster("local").setAppName("Spark UM Jar");
JavaRDD<User> UserMaster = sc.newAPIHadoopRDD(conf, MongoInputFormat.class, Object.class, BSONObject.class)
.map(new Function<Tuple2<Object, BSONObject>, User>() {
@Override
public User call(Tuple2<Object, BSONObject> v1) throws Exception {
//return User
}
}
Configuration conf=new Configuration();
conf.set(“mongo.job.input.format”、“com.mongodb.hadoop.MongoInputFormat”);
conf.set(“mongo.input.uri”mongodb://localhost:27017/databasename.collectionname");
SparkConf sconf=new SparkConf().setMaster(“本地”).setAppName(“Spark UM Jar”);
JavaRDD UserMaster=sc.newAPIHadoopRDD(conf,MongoInputFormat.class,Object.class,BSONObject.class)
.map(新函数(){
@凌驾
公共用户调用(tuple2v1)引发异常{
//返回用户
}
}
您是如何运行该代码的?@kucing\u terbang,使用netbeans,您可以在运行代码时显式设置类路径以包含这两个jar。由于系统的作用域类似于@kucing\u terbang提供的作用域,我如何在maven项目中设置它?我知道在使用NBean的普通java项目中这样做,但不知道w到maven。请帮助我做这件事,就像你在普通java项目上做的那样。只需在run
选项卡上添加jar,然后再次尝试运行。你可以检查此链接