求助:远程连接Spark on Yarn读取Mongodb数据报错

jknn5046 2019-01-29 08:23:24
我是使用IDEA进行开发,让IDEA远程连接集群上的Spark on Yarn,并将Mongodb中的数据作为输入,程序如下:
SparkSession spark = SparkSession.builder()
.master("yarn")
.appName("MongoSparkConnectorIntro")
.config("spark.mongodb.input.uri", "mongodb://***:***@192.168.***.***:27017/database.collection?authSource=admin")
.config("spark.mongodb.input.partitioner", "MongoSplitVectorPartitioner")
.config("spark.mongodb.input.partitionerOptions.partitionSizeMB", 128)
.getOrCreate();

JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
JavaRDD<Document> mongodata=MongoSpark.load(jsc);
List<Document> result=mongodata.collect();
for(Document r:result){
System.out.println(r.toString());
}
jsc.close();
但是程序总会报错:
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, *****.localdomain, executor 2): java.lang.ClassNotFoundException: com.mongodb.spark.rdd.partitioner.MongoPartition
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)
at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Driver stacktrace:
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1887)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1875)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1874)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1874)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:926)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:926)
at scala.Option.foreach(Option.scala:257)
at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:926)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:2108)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2057)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2046)
at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)
at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:737)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2061)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2082)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2101)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2126)
at org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:945)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:363)
at org.apache.spark.rdd.RDD.collect(RDD.scala:944)
at org.apache.spark.api.java.JavaRDDLike$class.collect(JavaRDDLike.scala:361)
at org.apache.spark.api.java.AbstractJavaRDDLike.collect(JavaRDDLike.scala:45)
at Spark_on_Yarn_test.Spark_Mongo_test.main(Spark_Mongo_test.java:24)
Caused by: java.lang.ClassNotFoundException: com.mongodb.spark.rdd.partitioner.MongoPartition
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)
at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
在网上找了很久的解决方案,也没有找到相关的内容,不知道有没有做过相关开发的大神能指点一下我的问题在哪,谢谢
...全文
63 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
数据与人工智能-fy 大数据与人工智能-fy 1. 1Hadoop目前最新的版本是 [单选题] A.1.0 B.2.0 C.3.0(正确答案) D.4.0 2. 2以下哪个系统可以为计算机CPU分配资源 [单选题] A.分布式文件存储系统(HDFS) B.分布式计算框架(MapReduce) C.分布式资源调度系统(Yarn)(正确答案) D.数据处理方法(DPW) 3. 以下哪个组成不属于Yarn [单选题] A.ResourceManager B.NodeManager C.ApplicationManager D.Spark(正确答案) 4. Hive针对内部表和外部表的区别是 [单选题] A.创建内部表的同时,会将数据挪到数据仓库指定的位置(正确答案) B.删除内部表时只删除源数据 C.创建内部表时,只记录数据指定的路径 D.删除外部表时删除表中数据和源数据数据与人工智能-fy全文共22页,当前为第1页。 大数据与人工智能-fy全文共22页,当前为第1页。 5. 以下属于引入ZooKeeper的理由是 [单选题] A.分布式系统需要统一管理(正确答案) B.MapReduce代码开发效率低下 C.使用SQL进行数据分析效率更高 D.大数据50%为报表类业务,需要仓库类大数据工具 6. 下列关于ZooKeeper集群原理的介绍,不正确的是 [单选题] A.由多个ZooKeeper SEVER组成的集群环境 B.包含一个Leader和多个Follower C.每个sever保存一个数据副本、全局数据一致 D.不采用分布式读写机制(正确答案) 7. 以下关于Hbase的说法正确的是 [单选题] A.Hbase是分布式场景中可以实时读写数据的分布式数据库(正确答案) B.包含一个Leader和多个Follower C.创建内部表时,只记录数据指定的路径 D.比较适合存储视频文件 8. 关于Redis说法不正确的是 [单选题] A.Redis没有字段的概念,所以在数据查询上功能比较弱,支持的特性比较简单。这点是不如MongoDB的 B.Redis单个value的最大容量可达1GB,不支持单个Value比较大的情况 C.内存依赖比较高。由于Redis本质上是一个内存数据库,所以内存硬件的容量大小直接决定了Redis可用的数据库空间 D.比较适合存储视频文件(正确答案) 大数据与人工智能-fy全文共22页,当前为第2页。9. 关于Redis说法不正确的是 [单选题] 大数据与人工智能-fy全文共22页,当前为第2页。 A.使用C语言编写(正确答案) B.比较适用于计数场景 C.所有数据都在内存中,高速读写 D.支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 答案解析:使用开源C语言编写 10. 以下哪个不属于Redis三大架构 [单选题] A.主从复制架构 B.Sentinel架构 C.集群架构 D.实时数据计算架构(正确答案) 11. 关于HDFS的说法不正确的是 [单选题] A.是JAVA实现的、分布式的、可横向扩展的文件系统 B.支持数据切块,目的是提升文件的读取效率 C.数据切块后默认大小为256M(正确答案) D.有副本机制 答案解析:为128M 12. Yarn是从Hadoop的哪个版本出现的 [单选题] A.1.0 B.2.0(正确答案) C.3.0 D.4.0 大数据与人工智能-fy全文共22页,当前为第3页。13. 下列哪项不属于引入Hive的原因 [单选题] 大数据与人工智能-fy全文共22页,当前为第3页。 A.MapReduce代码开发效率低下 B.使用SQL进行数据分析效率更高 C.大数据50%为报表类业务,需要仓库类大数据工具 D.Hive更简单(正确答案) 14. 关于Hive和RDBMS说法不正确的是 [单选题] A.Hive使用HQL查询语言 B.Hive使用HDFS进行数据存储 C.RDBS数据规模较大(正确答案) D.Hive硬件配置要求一般,RDBMS要求较高 答案解析:规模较小 15. 关于ZooKeeper的说法不正确是 [单选题] A.采用层次化的数据结构 B.采用类似于LINUX命令进行数据访问 C.具备临时节点和永久节点 D.永久节点会随客户端会话的结束而结束其生命周期(正确答案) 答案解析:临时节点 16. 关于Hbase说法不正确的是 [单选题] A.Table中包含多个region B.region会随着数据的增大而分裂 C.region分裂时,数据不能访问 D.行的一次读写不是原子操作(正确答案) 答案解析:是原子操作 大数据与人工智能-fy全文共22

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧