Spark序列化这块网上讲的比较少,自己还没来得及看这块代码,今天编程的时候遇到一个Hadoop的Writerable实现在Spark无法序列化的问题。我的代码如下:

object EntryApp extends App{val conf = new SparkConf().setAppName("cgbdata").setMaster("local")val sc = new SparkContext(conf)val hadoopConfig = new Configuration()hadoopConfig.set("sequoiadb.input.url","master:11810,slave1:11810,slave2:11810")hadoopConfig.set("sequoiadb.in.collectionspace","default")hadoopConfig.set("sequoiadb.in.collection","bar")val sdbRDD = sc.newAPIHadoopRDD[Object,BSONWritable,SequoiadbInputFormat](hadoopConfig,classOf[SequoiadbInputFormat],classOf[Object], classOf[BSONWritable])sdbRDD.map(_._2.getBson).collect.map(println)sc.stop()
}

这块代码执行报了如下错误。

Serialization stack:- object not serializable (class: org.bson.BasicBSONObject, value: { "_id" : { "$oid" : "55fe4caa4bb0b32e0e000000"} , "name" : "gaoxing"})- element of array (index: 0)- array (class [Lorg.bson.BSONObject;, size 2)at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1273)at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1264)at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1263)at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1263)at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:730)at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:730)at scala.Option.foreach(Option.scala:236)at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:730)at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1457)at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1418)at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)

因为Spark默认使用Java的序列化,而Writeable没有实现序列化接口,导致整个问题的发生。通过google找到解决方式了。

val conf = new SparkConf().setAppName("cgbdata").setMaster("local").registerKryoClasses(Array(classOf[BSONWritable]))

查看相关代码:

  def registerKryoClasses(classes: Array[Class[_]]): SparkConf = {val allClassNames = new LinkedHashSet[String]()allClassNames ++= get("spark.kryo.classesToRegister", "").split(',').filter(!_.isEmpty)allClassNames ++= classes.map(_.getName)set("spark.kryo.classesToRegister", allClassNames.mkString(","))set("spark.serializer", classOf[KryoSerializer].getName)this}

调用registerKryoClasses这个方法,spark的序列化框架换成Kryo, 这个时候不需要实现Serializer接口了。当然里面具体怎么搞得不是太清楚。

转载于:https://www.cnblogs.com/gaoxing/p/4904447.html

Hadoop的Writerable在Spark无法序列化的问题相关推荐

  1. 与 Hadoop 对比,如何看待 Spark 技术

    http://www.zhihu.com/question/26568496 与 Hadoop 对比,如何看待 Spark 技术? 最近公司邀请来王家林老师来做培训,其浮夸的授课方式略接受不了.其强烈 ...

  2. 与 Hadoop 对比,如何看待 Spark 技术?

    转自:https://www.zhihu.com/question/26568496 与 Hadoop 对比,如何看待 Spark 技术? 75 个回答 用心阁 软件工程师 Hadoop 首先看一下H ...

  3. 记录hiveonspark:Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask

    问题描述: 在部署hive on spark,测试时报错,执行建表操作成功,但是插入insert出现以下错误: Failed to execute spark task, with exception ...

  4. 基于Hadoop集群的Spark集群搭建

    基于Hadoop集群的Spark集群搭建 注:Spark需要依赖scala,因此需要先安装scala 一. 简单叙述一下scala的安装 (1)下载scala软件安装包,上传到集群 (2)建立一个用于 ...

  5. Windows PC上创建大数据职业技能竞赛实验环境之五--hadoop、hive和spark编程

    前述,我们在Windows WSL上,通过Docker容器技术实现了Hadoop集群环境,现在看看利用现有集群环境进行编程开发. 1 设置容器开启时自运行SSH服务 参照docker中安装Ubuntu ...

  6. 高可用(HA)Hadoop搭建Hive on Spark

    高可用(HA)Hadoop搭建Hive on Spark 本文只介绍hive on spark搭建,Hadoop高可用(HA)请自行操作, 安装HIVE 1. 解压hive tar -zxvf apa ...

  7. Hadoop系列 (六):Spark搭建

    文章目录 Hadoop系列文章 Spark简介 Spark搭建 Scala安装 Spark安装 Spark启动 Spark界面 Spark简单使用 Spark Shell PySpark Shell ...

  8. 如何用形象的比喻大数据的技术生态Hadoop、Hive、Spark 之间是什么关系?

    最近我的同学给我发了一篇特别有意思的关于大数据的技术生态Hadoop.Hive.Spark 关系的解读文章.个人觉得非常有意思,通俗易懂,我转载到这里,希望大家一起学习. Luis 大数据 255 人 ...

  9. 【大数据】如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?

    1 Hadoop只是一套工具的总称,它包含三部分:HDFS,Yarn,MapReduce,功能分别是分布式文件存储.资源调度和计算. 按理来说,这就足够了,就可以完成大数据分析了. 但第一个问题就是麻 ...

  10. WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

    文章目录 0. 常规解压安装,并添加环境变量 1. 下载并覆盖 bin 文件夹 2. 使VERSION文件的clusterID一致 3. 贴下单机配置 4. 测试 Hadoop 5. 安装Spark ...

最新文章

  1. 迈吉客科技继A+轮后获母基金追投
  2. 客户端连接不到服务器上MySQL数据库 解决方法
  3. 程序员们的启蒙老师,终于拿图灵奖了
  4. python可视化文本分析(2)—snownlp jieba分析QQ群成员发言情况
  5. 【ArcGIS微课1000例】0007:基于数字高程模型DEM生成剖面线、剖面图
  6. mysql8安装版安装教程_MySQL8.0版本安装教程
  7. 风控的这些工作机会看起来挺没用
  8. 你知道“借鸡生蛋”吗?学会这个方法,没钱没人脉你也可以创业
  9. python数据展示的模块_python中使用mock模块返回数据
  10. 【转】oracle order by 处理NULL 值
  11. JVisualVM监控
  12. 函数数列极限求法总结
  13. Xcode debug时如何看crash的call stack
  14. 美味冰皮月饼的做法 月饼的做法
  15. ES6(ECMASript 相关介绍,ECMASript 6 新特性---let,const关键字,变量的解析赋值,模板字符串,箭头函数,rest参数,spread扩展运算符,Symbol)
  16. 考研数学 每日一题 第一题
  17. Springboot + Easyexcel读取写入数据,多头行数,多sheet,复杂表头简单实现
  18. JAVA实现网络多线程编程小游戏开发
  19. MSN_MSN下载_MSN官方下载_MSN下载2010最新版
  20. 以小见大——那些基于 protobuf 的五花八门的 RPC(1)

热门文章

  1. 不懂开发的运维,未来该如何发展?
  2. 以产品思维去做微信公众号
  3. 电脑下载python3.5.2教程_Win10系统如何搭建Python 3.5.2开发环境
  4. mysql基础之mariadb集群主从架构半同步复制
  5. MySQL数据库操作(3)表结构操作
  6. android中webview的实现
  7. php的json_encode函数问题
  8. 在信号处理函数中调用longjmp
  9. 教学思路SQL之入门习题《学员成绩》 二、基础单表查询
  10. iOS xcode Bundle identifier is missing. NotificationServiceTest doesn't have *****