尝试使用 LzoPigStorage 和大象鸟加载索引 LZO 文件

Posted

技术标签:

【中文标题】尝试使用 LzoPigStorage 和大象鸟加载索引 LZO 文件【英文标题】:Trying to load indexed LZO file using LzoPigStorage and elephant-bird 【发布时间】:2013-07-31 21:34:45 【问题描述】:

我有一个默认 LZO 压缩的日志文件和一个使用 Hadoop-LZO 生成的 .index 文件,但是当我运行一个简单的 Pig 文件以使用 LzoPigStorage 检索前 100 条记录时,我得到以下异常:

Message: Unexpected System Error Occured: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:130)
    at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:191)
    at java.lang.Thread.run(Thread.java:724)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:257)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128)
    ... 3 more
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
    at com.twitter.elephantbird.mapreduce.input.LzoInputFormat.listStatus(LzoInputFormat.java:55)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:269)
    at com.twitter.elephantbird.mapreduce.input.LzoInputFormat.getSplits(LzoInputFormat.java:111)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:274)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:452)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:469)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:366)
    at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1269)
    at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1266)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1266)
    at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:336)

我正在运行 Hadoop 2.0、Pig 0.11 和大象鸟 2.2.3

【问题讨论】:

【参考方案1】:

我不使用大象鸟,所以我不完全确定这是问题所在。

但是看看他们的build for v2.2.3,它是针对 hadoop-0.20.2 和 pig-0.9.2 编译的。当在比 UDF 编译所针对的新版本上运行时,我发现 Pig 中的 UDF 存在问题。

您能否将大象鸟升级到较新的版本或针对正确的库重新编译?

【讨论】:

我所做的是将构建好的elephant-bird-2.2.3.jar 复制到我的测试文件夹中。如何检查它是针对哪个版本的 Hadoop 和 Pig 构建的?它是在尝试使用它的同一台机器上构建的。 这现在可能已经很过时了...但是您似乎只是在使用非常旧的大象鸟版本...我建议升级到更新的版本。

以上是关于尝试使用 LzoPigStorage 和大象鸟加载索引 LZO 文件的主要内容,如果未能解决你的问题,请参考以下文章

用大象鸟加载嵌套的json后如何查询它

在猪 0.16 中加载 json 数据时,大象鸟不存在错误

当未设置可选字段时,大象鸟库生成字段的默认值而不是 null

为啥大象鸟猪 JsonLoader 只处理我的文件的一部分?

使用大象鸟罐子的猪 JsonLoader() 处理 twitter 的复杂 json 对象时出错

使用带蜂巢的大象鸟来读取 protobuf 数据