Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Hbase问题|反序列化扫描字符串时google protobuf标签不匹配错误

Hbase问题|反序列化扫描字符串时google protobuf标签不匹配错误
EN

Stack Overflow用户
提问于 2015-05-28 13:35:02
回答 1查看 313关注 0票数 0

上下文:我正在将我在HBase上的MR作业从cdh2.0.0-cdh4.5.0 (Hadoop1)迁移到HDP 2.2.0.0-2041 (YARN)。在做了一些小改动之后,针对HDP 2.2.0.0-2041编译了代码。

问题:我正在尝试运行一个oozie工作流,在HBase上创建扫描后执行一系列MR作业。扫描是以编程方式创建的,然后序列化-反序列化,然后将其交给映射器从HBase获取批处理。

问题:当TableInputFormat内部尝试反序列化扫描字符串时,它抛出一个错误,表明在幕后谷歌协议无法反序列化字符串。堆栈跟踪如下所示。

线程"main“组中出现异常: com.google.protobuf.InvalidProtocolBufferException: java.io.IOException消息结束组标记与预期标记不匹配。在com.flipkart.yarn.test.TestScanSerialiseDeserialise.main(TestScanSerialiseDeserialise.java:25)的com.flipkart.yarn.test.TestScanSerialiseDeserialise.convertStringToScan(TestScanSerialiseDeserialise.java:37),原因是:......

可重现:我能够在我粘贴的示例代码中重现这一点

示例代码:

代码语言:javascript
代码运行次数:0
复制
Scan scan1 = constructScanObjectForUsers("A");
String json = scan1.toJSON();
Scan scan2 = convertStringToScan(Base64.encodeBytes(json.getBytes()));

.......

private static Scan convertStringToScan(String base64) throws IOException {
    byte[] decoded = Base64.decode(base64);
    // System.out.println(new String(decoded));
    ClientProtos.Scan scan;
    try {
        scan = ClientProtos.Scan.parseFrom(decoded);
    } catch (InvalidProtocolBufferException ipbe) {
        throw new IOException(ipbe);
    }

    return ProtobufUtil.toScan(scan);
}

可能的原因:我怀疑我错过了提供一些依赖项,或者在底层jars中有一些依赖项不匹配。

在解决这个问题上有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-29 18:22:03

代码语言:javascript
代码运行次数:0
复制
Scan scan1 = constructScanObjectForUsers("A");
String json = scan1.toJSON();
Scan scan2 = convertStringToScan(Base64.encodeBytes(json.getBytes()));

在这里,您似乎正在将消息编码为JSON。然后将base64应用于JSON文本。通常base64只适用于二进制,但JSON是文本。

代码语言:javascript
代码运行次数:0
复制
byte[] decoded = Base64.decode(base64);
// System.out.println(new String(decoded));
ClientProtos.Scan scan;
try {
    scan = ClientProtos.Scan.parseFrom(decoded);

在这里,您可以取消一些文本的Base64,然后将其解码为一个协议缓冲区。这是来自上面的相同数据吗?因为如果是这样的话,这将不起作用: JSON和Protobuf是不同的格式。如果你想解码为Protobuf,你需要编码为Protobuf,而不是JSON。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30508130

复制
相关文章
Hive SQL突然抛出一条异常……
客户端的报错信息,并没有完全展现问题背后的全貌。我们进入 hiveserver2 所在节点查看hiveserver2的日志,可以看到如下相关信息:
数据社
2021/09/23
1.9K0
Hive SQL突然抛出一条异常……
【Kotlin】空安全 ⑤ ( 异常处理 | 捕获并处理异常 | 抛出自定义异常 )
如果变量为空 , 则直接抛出 kotlin.KotlinNullPointerException 异常 ;
韩曙亮
2023/03/30
8490
【Kotlin】空安全 ⑤ ( 异常处理 | 捕获并处理异常 | 抛出自定义异常 )
添加引用方式抛出和捕获干净的WebService异常
说明:【干净】指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message就是WS方法中抛出的异常消息,不含任何“杂质”。
跟着阿笨一起玩NET
2018/09/20
8210
添加引用方式抛出和捕获干净的WebService异常
WPF 已知问题 清空 CollectionView 的 SortDescriptions 可能抛出空异常
本文记录一个 WPF 的已知问题,在通过 CollectionViewSource 获取到 CollectionView 之后,如果 CollectionViewSource 对象已被 GC 回收,将可能在调用 CollectionView 的 SortDescriptions 属性进行清空或者移除项时,也就是使用 SortDescriptionCollection 类型的清空或者移除项时,在 WPF 框架里面抛出空异常
林德熙
2023/04/07
6610
dotnet 6 已知问题 ManualResetEventSlim 的 Set 方法抛出空异常
本文记录一个 dotnet 6 已知问题,此问题预计是在 .NET Framework 4.5 时就引入的,我没有考古在 .NET Framework 4.5 之前是否还存在此问题。当前这个问题在 .NET 7 修复
林德熙
2023/07/01
1550
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.5K0
贴心 | Visual Studio 2019 空引用异常的改进
空引用异常是最常见的程序错误之一。微软昨天发布的VS2019对此有了非常贴心的改进,我们来看看吧!
Edi Wang
2019/07/09
1.3K0
贴心 | Visual Studio 2019 空引用异常的改进
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.3K0
如何在Java和Swift中避免空引用异常?
您最近在代码中遇到过NullPointerException(空指针异常)吗? 如果没有,那你一定是一个很细心的程序员。在Java应用程序中最常见的异常类型之一就是NullPointerExcepti
程序你好
2018/08/01
2.7K0
如何在Java和Swift中避免空引用异常?
【C#】添加引用方式抛出和捕获干净的WebService异常
说明:【干净】指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message就是WS方法中抛出的异常消息,不含任何“杂质”。
AhDung
2018/09/13
1.1K0
【C#】添加引用方式抛出和捕获干净的WebService异常
android 抛出FileNotFoundException异常
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.6K0
.net remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2018/09/19
1.4K0
.net remoting 抛出异常
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2019/09/27
1.4K0
dotnet remoting 抛出异常
python抛出异常和捕获异常_在try块中可以抛出异常吗
2.解析 关键字try 以及except是 使用Python 解释器主动抛出异常的关键, Python解释器从上向下执行 当运行try中的某行代码出错,会直接进入except中执行下方代码 try中错行下方的代码不会被运行 except…as… 是固定的语法格式 打印traceback信息 finally 后的代码不管是否抛出异常都会执行 except 的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始 注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量)
全栈程序员站长
2022/11/02
4.5K0
python抛出异常会终止程序吗_catch里面抛出异常
如果没有 try 和 except 语句覆盖抛出异常的 raise 语句,该程序就会崩溃,并显示异常的出错信息。通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常常会看到 raise 语句在一个函数中,try 和 except 语句在调用该函数的代码中。
全栈程序员站长
2022/11/19
2.2K0
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2022/08/04
1K0
python抛出异常和捕获异常_Python异常
class Widget: def __init__(self,size=(40,40)): self._size=size def getSize(self): return self._size def resize(self,width,height): if width<0 or height<0:
全栈程序员站长
2022/11/02
2.9K0
应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
2018-02-04 13:25
walterlv
2018/09/18
1.7K0
c++构造函数是否可以抛出异常_什么叫抛出异常
从语法上来说,构造函数可以抛出异常。但从逻辑上和风险控制上,构造函数中尽量不要抛出异常。万不得已,一定要注意防止内存泄露。
全栈程序员站长
2022/09/22
1.7K1
python抛出异常会终止程序吗_python抛出异常的作用
当python执行无效的代码时,就会抛出异常。用 try 和 catch 语句可以处理异常,以避免程序的崩溃。我们也可以在代码中抛出自己的异常,抛出异常意味着 停止运行这个函数中的代码,将程序执行转到except语句
全栈程序员站长
2022/11/02
1.8K0

相似问题

如何从收音机中选择选项并显示它?

22

如果选择选项,则显示类别中的所有页面,选择所有类别

10

如果选择了所有选项,则选择所有选项

21

如果选择了所有多个选项,则显示div。

41

如果没有选择选项,则显示所有结果

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文