Hive 协议缓冲区 - 在 Hive 中创建 table 时出现 NullPointerException
Hive Protocol Bufferer - NullPointerException while creating table in Hive
提前致谢。
目前我们正在尝试使用 Protocol Buffers 字节数据创建 Hive table。我们已经遵循了使用 Protocol buffer 创建 Hive table 的所有可能步骤,但是在创建 Hive table 时得到 NullPointerException
。以下是所有必需的详细信息。
版本 -
1.协议 3.0.0
2.象鸟 - 4.14
3. Hortornworks Sandbox Hive 版本 - 1.2.1
4. Protobuf-java3.0.0
使用的原型文件是
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 class
protoc.exe -I=input-proto --java_out=java-output input-proto\BankProto.proto
以上命令为输入协议缓冲区文件生成 Java class。
在此之后,我们将此协议缓冲区 java 文件复制到 Maven java 项目,然后创建 JAR 文件。我们将 JAR 文件复制到配置单元库路径,即“/usr/hdp/current/hive-client/lib”。
下面是创建table命令
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)
感谢任何与此相关的帮助。
再次感谢。
Avinash Deshmukh
我们能够解决这个问题。问题是关于 protobuf 版本的正确兼容版本。我们发现当前版本的 elephant-bird (4.14) 依赖于 protobuf 版本 2.6.0
提前致谢。
目前我们正在尝试使用 Protocol Buffers 字节数据创建 Hive table。我们已经遵循了使用 Protocol buffer 创建 Hive table 的所有可能步骤,但是在创建 Hive table 时得到 NullPointerException
。以下是所有必需的详细信息。
版本 -
1.协议 3.0.0
2.象鸟 - 4.14
3. Hortornworks Sandbox Hive 版本 - 1.2.1
4. Protobuf-java3.0.0
使用的原型文件是
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 class
protoc.exe -I=input-proto --java_out=java-output input-proto\BankProto.proto
以上命令为输入协议缓冲区文件生成 Java class。
在此之后,我们将此协议缓冲区 java 文件复制到 Maven java 项目,然后创建 JAR 文件。我们将 JAR 文件复制到配置单元库路径,即“/usr/hdp/current/hive-client/lib”。
下面是创建table命令
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)
感谢任何与此相关的帮助。
再次感谢。
Avinash Deshmukh
我们能够解决这个问题。问题是关于 protobuf 版本的正确兼容版本。我们发现当前版本的 elephant-bird (4.14) 依赖于 protobuf 版本 2.6.0