gpt4 book ai didi

hadoop - 无法使用大象鸟查询 hive 中的示例AddressBook protobuf数据

转载 作者:行者123 更新时间:2023-12-02 19:34:18 26 4
gpt4 key购买 nike

我正在尝试使用象鸟来查询一些示例原生数据。我使用的是AddressBook示例,我将一些假的AddressBook序列化为文件,然后将它们放在/ user / foo / data / elephant-bird / addressbooks /下的hdfs中。该查询未返回任何结果

我像这样设置表并查询:

添加jar /home/foo/downloads/elephant-bird/hadoop-compat/target/elephant-bird-hadoop-compat-4.6-SNAPSHOT.jar;
添加jar /home/foo/downloads/elephant-bird/core/target/elephant-bird-core-4.6-SNAPSHOT.jar;
添加jar /home/foo/downloads/elephant-bird/hive/target/elephant-bird-hive-4.6-SNAPSHOT.jar;

创建外部表地址
行格式serde“com.twitter.elephantbird.hive.serde.ProtobufDeserializer”
具有serdeproperties(
“serialization.class” =“com.twitter.data.proto.tutorial.AddressBookProtos $ AddressBook”)
储存为
-Elephant-Bird提供了与Hive一起使用的输入格式
INPUTFORMAT“com.twitter.elephantbird.mapred.input.DeprecatedRawMultiInputFormat”
-占位符,因为我们将不会写入此表
输出格式“org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat”
位置'/ user / foo / data / elephant-bird / addressbooks /';

描述格式化的地址;


#col_name data_type注释

人数组{struct {名称:字符串,id:int,电子邮件:字符串,电话:数组{struct {number:字符串,类型:字符串}}}}}
来自反序列化器的byteData二进制

#详细表格信息
数据库:默认
所有者:foo
CreateTime:PDT 2014年10月28日星期二13:49:53
LastAccessTime:未知
保护模式:无
保留:0
位置:hdfs:// foo:8020 / user / foo / data / elephant-bird / addressbooks
表格类型:EXTERNAL_TABLE
表参数:
外部真实
transient_lastDdlTime 1414529393

#存储信息
SerDe库:com.twitter.elephantbird.hive.serde.ProtobufDeserializer
InputFormat:com.twitter.elephantbird.mapred.input.DeprecatedRawMultiInputFormat
OutputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
压缩:否
数量桶:-1
斗列:[]
排序列:[]
存储描述参数:
serialization.class com.twitter.data.proto.tutorial.AddressBookProtos $ AddressBook
序列化格式1
花费时间:0.421秒,获取:29行

当我尝试选择数据时,它不返回任何结果(似乎不读取行):

从地址中选择count(*);

MapReduce作业总数= 1
启动工作1之1
编译时确定的reduce任务数:1
为了更改 reducer 的平均负载(以字节为单位):
设置hive.exec.reducers.bytes.per.reducer =
为了限制 reducer 的最大数量:
设置hive.exec.reducers.max =
为了设置恒定数量的 reducer :
设置mapred.reduce.tasks =
开始的工作= job_1413311929339_0061,跟踪URL = http:// foo:8088 / proxy / application_1413311929339_0061 /
杀死命令= / usr / lib / hadoop / bin / hadoop job -kill job_1413311929339_0061
第1阶段的Hadoop作业信息:映射器数量:0; reducer 数量:1
2014-10-28 13:50:37,674第1阶段的 map = 0%,减少= 0%
2014-10-28 13:50:51,055第1阶段映射= 0%,减少= 100%,累计CPU 2.14秒
2014-10-28 13:50:52,152 Stage-1映射= 0%,减少= 100%,累积CPU 2.14秒
MapReduce累计CPU总时间:2秒140毫秒
结束的工作= job_1413311929339_0061
MapReduce作业启动:
作业0:减少:1累积CPU:2.14秒HDFS读取:0 HDFS写入:2成功
MapReduce花费的总CPU时间:2秒140毫秒

0
花费时间:37.519秒,已获取:1行

如果创建一个非外部表或将数据显式导入到外部表中,我会看到同一件事。

我的设置的版本信息:

节俭0.7
protobuf:libprotoc 2.5.0
hadoop:
Hadoop 2.5.0-cdh5.2.0
颠覆http://github.com/cloudera/hadoop -r e1f20a08bde76a33b79df026d00a0c91b2298387
jenkins于2014-10-11T21:00Z编译
与协议(protocol)2.5.0一起编译
来自带有校验和的源309bccd135b199bdfdd6df5f3f4153d

更新:

我在日志中看到此错误。我在HDFS中的数据只是原始protobuf(无压缩)。我想弄清楚这是否是问题所在,以及是否可以读取原始的二进制protobuf。

错误:java.io.IOException:java.lang.reflect.InvocationTargetException
在org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
在org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
在org.apache.hadoop.hive.shims.HadoopShimsSecure $ CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:346)处
在org.apache.hadoop.hive.shims.HadoopShimsSecure $ CombineFileRecordReader。(HadoopShimsSecure.java:293)
在org.apache.hadoop.hive.shims.HadoopShimsSecure $ CombineFileInputFormatShim.getRecordReader(HadoopShimsSecure.java:407)
在org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:560)
在org.apache.hadoop.mapred.MapTask $ TrackedRecordReader(MapTask.java:168)
在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:409)
在org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:167)
在java.security.AccessController.doPrivileged(本机方法)
在javax.security.auth.Subject.doAs(Subject.java:415)
在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554)
在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
造成原因:java.lang.reflect.InvocationTargetException
在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处
在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在java.lang.reflect.Constructor.newInstance(Constructor.java:526)
在org.apache.hadoop.hive.shims.HadoopShimsSecure $ CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:332)处
...另外11个
引起原因:java.io.IOException:找不到文件hdfs:// foo:8020 / user / foo / data / elephantbird / addressbooks / 1000AddressBooks-1684394246.bin的编解码器
在com.twitter.elephantbird.mapreduce.input.MultiInputFormat.determineFileFormat(MultiInputFormat.java:176)
在com.twitter.elephantbird.mapreduce.input.MultiInputFormat.createRecordReader(MultiInputFormat.java:88)
在com.twitter.elephantbird.mapreduce.input.RawMultiInputFormat.createRecordReader(RawMultiInputFormat.java:36)
在com.twitter.elephantbird.mapred.input.DeprecatedInputFormatWrapper $ RecordReaderWrapper处(DeprecatedInputFormatWrapper.java:256)
在com.twitter.elephantbird.mapred.input.DeprecatedInputFormatWrapper.getRecordReader(DeprecatedInputFormatWrapper.java:121)
在com.twitter.elephantbird.mapred.input.DeprecatedFileInputFormatWrapper.getRecordReader(DeprecatedFileInputFormatWrapper.java:55)
在org.apache.hadoop.hive.ql.io.CombineHiveRecordReader。(CombineHiveRecordReader.java:65)
...另外16个

最佳答案

你喜欢这个问题了吗?

正如您所描述的,我遇到了同样的问题。

是的,您是对的,我发现无法直接读取原始的二进制protobuf。

这是我所问的问题。
Use elephant-bird with hive to read protobuf data

希望能帮助到你

最好的祝福

关于hadoop - 无法使用大象鸟查询 hive 中的示例AddressBook protobuf数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com