场景:在使用自定义对象序列化时,报错:
<2015-09-29 14:59:15,578> <INFO > <org.apache.hadoop.mapreduce.Job> - Task Id : attempt_1441852661551_0672_r_000002_2, Status : FAILED(Job.java:printTaskEvents:1462)
Error: java.lang.NullPointerException
at com.wbkit.cobub.models.UserActionDay.readFields(UserActionDay.java:86)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:71)
at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:42)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKeyValue(ReduceContextImpl.java:146)
at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKey(ReduceContextImpl.java:121)
at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.nextKey(WrappedReducer.java:307)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:170)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
自定义对象序列化应用分析:
所有的Writable实现都必须有一个默认的构造函数,以便MapReduce框架可以对它们进行实例化,然后再调用readFields()函数查看(填充)各个字段的值。
解决办法:
在自定义序列化对象中,即使在默认构造中也对对象的成员变量进行初始化。
参考:
详细请参见 Hadoop权威指南(第三版) 4.3.3小节;
相关推荐
实现接⼝的 3 个⽅法 write:序列化属性值为⼆进制 readFields:从⼆进制反序列化属性值 compareTo:⾃定义⼤⼩⽐较规则 4. 使⽤⾃定义 key 作为 map 输出的 key 类型 ⽅案⼆:⾃定义排序规则 1. ⾃定义类继承 ...
TextPair.java重写了write()和readFields()2个函数 TextPair2.java重写的函数较多 extract_mac 主要包括1个java文件和1个txt文件,extractMac.java和log.txt,主要功能是:提取出输入文件的1,2,7个字段并输出 flow_...
在 java 中,要实现类的大小比较可以实现 Comparable 接口并通 过重写 compareTo 方法来实现。 在 Mapreduce 中,如果需要自定义类的排序规则,需要让类实现 Writable 的子接口 WritableComparable,重写里面的 ...
Lan仿朋友圈系统开源,可用于表白墙等微商相册,商品图册等.rarLan仿朋友圈系统开源,可用于表白墙等微商相册,商品图册等.rar
比如异步进行-Thread,安全句柄-CHandle,资源守卫-Guard,XML解析-rapidxml,以及其他注册表、文件基础操作。用于更加高效、安全的进行C++开发。温馨提示:至少需要支持C++0x标准的编译器。
集团企业IT技术架构规划方案qy.pptx
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR进程状态,确保其在预设时间内成功启动。本脚本提供了灵活的配置和错误处理机制,为Java应用的运维管理带来了便捷与可靠性。
基于价值认同的需求侧电能共享分布式交易策略matlab源码+项目说明+详细注释.zip # Supports_for_EPC 电力建设论文《基于价值认同的需求侧电能共享分布式交易策略》的支撑文件 ————————————学术交流———————————————————— 本论文提出了一种电能共享市场交易机制,利用一致性协议实现产消者之间关于价值的认同,实现了社会福利的最大化。 main_CA.m:针对10个产消者之间的电能共享,利用一致性算法完成市场的分布式出清 Pareto_analysis.m:通过两个产消者分析了电能共享市场的广义纳什均衡与市场效率。 运行环境: MATLAB R2014a YALMIP GUROBI 需要注意的是:若程序运行错误,请认真检查是否安装了YALMIP和GUROBI求解器。 ......
2024-2030全球及中国太阳能直流冰柜行业研究及十五五规划分析报告
springcodespringcodespringcodespringcode
2023年前10大汽车用电流检测放大器企业占据全球86%的市场份额
在STM32单片机上调试CAN总线并与其上位机通信时,需要遵循一系列的步骤和策略,以确保通信的可靠性和效率。以下是一些关键步骤和考虑因素: 硬件配置:确保STM32的CAN接口引脚正确连接到CAN收发器,并且CAN总线上的每个节点都通过120Ω的终端电阻正确终止。 波特率设置:所有CAN网络节点必须使用相同的波特率进行通信。波特率可以通过STM32的CAN外设的位时序寄存器(CAN_BTR)来设置。 初始化CAN外设:使用STM32的HAL库或标准库函数初始化CAN外设,包括设置工作模式、位时序、过滤器等。 过滤器配置:配置CAN过滤器以确定哪些消息ID可以被接收或发送。 中断配置:为了处理接收到的消息,通常需要配置CAN接收中断,并在中断服务例程(ISR)中处理消息。 发送和接收消息:实现CAN发送和接收消息的函数,使用HAL_CAN_Transmit_IT和HAL_CAN_Receive_IT等函数进行异步通信。 错误处理:实现错误处理机制,以应对可能的通信错误,如消息冲突、总线错误等。 回环测试:在只有一个STM32板的情况下,可以使用CAN的回环模式进行测试,以
2024年中国克拉霉素混悬液行业研究报告
EasyAnimate生成
Thinkphp内核仿918国际导航简洁模板网址导航源码.rarThinkphp内核仿918国际导航简洁模板网址导航源码.rar
基于matlab实现潮流计算的程序,可以帮助学习潮流计算。使用matlab编程,程序简单。好好学习潮流计算.rar
视觉毫米波简单后融合方法 视觉目标检测 毫米波目标检测
基于Reactor模式,支持单线程、多线程Reactor,也支持UDP服务
机械设计螺旋输送机sw17非常好的设计图纸100%好用.zip
有30w条数据