Hive 协议缓冲区 - 在 Hive 中创建表时出现 NullPointerException

Posted

技术标签:

【中文标题】Hive 协议缓冲区 - 在 Hive 中创建表时出现 NullPointerException【英文标题】:Hive Protocol Bufferer - NullPointerException while creating table in Hive 【发布时间】:2016-10-14 02:48:17 【问题描述】:

提前致谢。

目前我们正在尝试使用 Protocol Buffers 字节数据创建 Hive 表。我们已经遵循了使用协议缓冲区创建 Hive 表的所有可能步骤,但是在创建 Hive 表时获取NullPointerException。以下是所有必需的详细信息。

版本 - 1. 协议 3.0.0 2. 象鸟 - 4.14 3. Hortornworks Sandbox Hive 版本 - 1.2.1 4. Protobuf-java 3.0.0

使用的proto文件是

package tutorial; 
option java_package = "com.mycom.hive.protobuf.serialized";
option java_outer_classname = "BankProtoTest";
message BankClass
    required string bankAmount= 1;
    required string bankLocation= 2;
    optional string bankName= 3;

message BankInfo 
   repeated BankClass bankClass = 1;

我们正在使用以下命令创建 Java 类

protoc.exe -I=input-proto --java_out=java-output input-proto\BankProto.proto

以上命令为输入协议缓冲区文件生成Java类。

在此之后,我们将此协议缓冲区 java 文件复制到 maven java 项目,然后创建 JAR 文件。我们将 JAR 文件复制到 hive lib 路径中,即“/usr/hdp/current/hive-client/lib”。

下面是建表命令

create external table bankproto 
   row format serde "com.twitter.elephantbird.hive.serde.ProtobufDeserializer"     
with serdeproperties 
   ("serialization.class"="com.mycom.hive.protobuf.serialized.BankProtoTest$BankInfo")
stored as  
   inputformat "org.apache.hadoop.mapred.SequenceFileInputFormat" 
   outputformat "org.apache.hadoop.mapred.SequenceFileOutputFormat" 
location '/user/root/protobuf-input/';

该位置中存在的输入文件作为序列文件存储在 HDFS 中。 执行此命令后出现异常。

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException java.lang.NullPointerException)

感谢任何与此相关的帮助。

再次感谢。

阿维纳什·德什穆赫

【问题讨论】:

【参考方案1】:

我们能够解决这个问题。问题是关于 protobuf 版本的正确兼容版本。我们发现大象鸟的当前版本(4.14)依赖于 protobuf 版本 2.6.0

【讨论】:

以上是关于Hive 协议缓冲区 - 在 Hive 中创建表时出现 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

无法在 HIVE 中创建表

Hive建表时,使用Array和Map类型以及数据导入

hive建表语句

无法在 Hive 中创建表

hive建表时partitioned分区字段类型只能用string吗?可以用其他的字段类型吗?

Hive 中 MetaStore 的主要用途?