使用 Elephant-bird-pig 中的 JsonLoader 时出错

Posted

技术标签:

【中文标题】使用 Elephant-bird-pig 中的 JsonLoader 时出错【英文标题】:Error while using JsonLoader from elephant-bird-pig 【发布时间】:2014-09-30 14:23:25 【问题描述】:

我正在尝试使用 JSonLoader 形式的大象-鸟-猪包。 我的脚本很简单:

register elephant-bird-pig-4.5.jar
register elephant-bird-hadoop-compat-4.5.jar

A = load '1_record_2.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');

DUMP A

我得到一个错误:

2014-09-30 16:15:32,439 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
2014-09-30 16:15:32,447 [main] INFO  org.apache.pig.tools.pigstats.ScriptState - Pig features used in the script: UNKNOWN
2014-09-30 16:15:32,448 [main] INFO  org.apache.pig.newplan.logical.optimizer.LogicalPlanOptimizer - RULES_ENABLED=[AddForEach, ColumnMapKeyPrune, GroupByConstParallelSetter, LimitOptimizer, LoadTypeCastInserter, MergeFilter, MergeForEach, NewPartitionFilterOptimizer, PartitionFilterOptimizer, PushDownForEachFlatten, PushUpFilter, SplitFilter, StreamTypeCastInserter], RULES_DISABLED=[FilterLogicExpressionSimplifier]
2014-09-30 16:15:32,449 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler - File concatenation threshold: 100 optimistic? false
2014-09-30 16:15:32,450 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - MR plan size before optimization: 1
2014-09-30 16:15:32,450 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - MR plan size after optimization: 1
2014-09-30 16:15:32,464 [main] INFO  org.apache.hadoop.yarn.client.RMProxy - Connecting to ResourceManager at hadoop1/10.242.8.131:8050
2014-09-30 16:15:32,466 [main] INFO  org.apache.pig.tools.pigstats.ScriptState - Pig script settings are added to the job
2014-09-30 16:15:32,466 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - mapred.job.reduce.markreset.buffer.percent is not set, set to default 0.3
2014-09-30 16:15:32,467 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. com/twitter/elephantbird/util/HadoopCompat
Details at logfile: pig_1412081068149.log

我不知道缺少什么。你能建议点什么吗?

文件 pig_1412081068149.log 包含:

Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. com/twitter/elephantbird/util/HadoopCompat

java.lang.NoClassDefFoundError: com/twitter/elephantbird/util/HadoopCompat
    at com.twitter.elephantbird.pig.load.LzoBaseLoadFunc.setLocation(LzoBaseLoadFunc.java:93)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler.getJob(JobControlCompiler.java:477)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler.compile(JobControlCompiler.java:298)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:191)
    at org.apache.pig.PigServer.launchPlan(PigServer.java:1324)
    at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1309)
    at org.apache.pig.PigServer.storeEx(PigServer.java:980)
    at org.apache.pig.PigServer.store(PigServer.java:944)
    at org.apache.pig.PigServer.openIterator(PigServer.java:857)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:774) etc...

缺少什么类 (java.lang.NoClassDefFoundError) ?我应该添加哪些库?

谢谢 帕维尔

【问题讨论】:

NoClassDefFoundError 通常意味着您的 JAR 文件不兼容。 【参考方案1】:

我已检查是否存在已注册的库以及类是否在库中。 一切看起来都很好,但我仍然收到此错误。 所以我离开了猪壳,再次打开它——同样的脚本运行良好。

【讨论】:

【参考方案2】:

您错过了两个需要注册的重要 jar。 注册大象鸟核心4.5.jar 注册json-simple-1.1.1.jar

将这两个添加到您的猪脚本中,一切都会正常。

【讨论】:

以上是关于使用 Elephant-bird-pig 中的 JsonLoader 时出错的主要内容,如果未能解决你的问题,请参考以下文章

J 中的术语“monadic”是不是与它的 Haskell 使用有关?

坚持使用 PHP 中的数字模式打印

Matlab中的冒号

如何使用 loc[i,j] 根据索引值访问数据框中的特定值

使用积分图像有效地对矩阵行中的元素求和

使用 data.table 加速 j 中的顺序任务的 for 循环