hadoop - 在 pig 中读取二进制 avro

标签 hadoop apache-pig hdfs flume avro

我正在将一个二进制对象发送到 HDFS,并且有我的水槽代理和接收器设置如下所示

a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /user/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute

a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.serializer = avro_event
a1.sinks.k1.hdfs.serializer.syncIntervalBytes = 4096000
a1.sinks.k1.hdfs.serializer.compressionCodec = snappy
a1.sinks.k1.hdfs.serializer.appendNewline = false
a1.sinks.k1.hdfs.fileSuffix=.avro
a1.sinks.k1.hdfs.writeFormat=TEXT

现在我正在尝试使用这个从 HDFS 读取这个文件(something.avro)

data = LOAD 'something.avro'
      USING org.apache.pig.piggybank.storage.avro.AvroStorage();
dump data;

我一直收到这个异常,想知道为什么我会收到那个异常,或者是否有另一种方法可以在不提供 avro 模式的情况下读取 pig 脚本中的二进制 avro 对象

Caused by: java.io.IOException: Not a data file.
at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:105)
at org.apache.avro.file.DataFileStream.<init>(DataFileStream.java:84)
at org.apache.pig.piggybank.storage.avro.AvroStorageUtils.getSchema(AvroStorageUtils.java:718)
at org.apache.pig.piggybank.storage.avro.AvroStorage.getSchema(AvroStorage.java:349)
at org.apache.pig.piggybank.storage.avro.AvroStorage.getAvroSchema(AvroStorage.java:277)
at org.apache.pig.piggybank.storage.avro.AvroStorage.getAvroSchema(AvroStorage.java:248)
at org.apache.pig.piggybank.storage.avro.AvroStorage.setInputAvroSchema(AvroStorage.java:226)
at org.apache.pig.piggybank.storage.avro.AvroStorage.getSchema(AvroStorage.java:434)
at org.apache.pig.newplan.logical.relational.LOLoad.getSchemaFromMetaData(LOLoad.java:175)

最佳答案

这里有同样的问题,我认为是因为我们正在读取 avro 二进制数据,它与 AVRO 文件不同。

您可以尝试使用 fragtojson 使用 avro-tools 读取文件

java -jar avro-tools-1.7.7.jar fragtojson part0.avro --schema-file schema.avsc

看看效果如何!如果您设法阅读 PIG,请发布任何发现。

关于hadoop - 在 pig 中读取二进制 avro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831326/

相关文章:

hadoop - 获取 Apache Pig 中每 N 个元组的平均值

java - Mapreduce Mapper创建2个键用于化简器计算

hadoop - PIG Cassandra错误2118无法获得输入分割

java - 足够用于Hadoop的Java

hadoop - 如何将.dat文件加载到配置单元或hdfs?

java - 使用org.apache.hadoop DistributedFileSystem时,线程 “main” java.lang.NullPointerException中的异常

java - Hadoop datanode 启动失败 org.apache.hadoop.hdfs.server.common.Storage : Cannot lock storage

unix - 我们可以使用EXPORT命令将hadoop数据复制到AWS S3吗?

hadoop - 如何在Hive CLI中检查设置?

scala - Hive:读取超时异常