3

Hadoop ストリーミング スクリプトでElephant Birdの入力形式を使用しようとしています。特に、LzoInputFormat を使用し、最終的には LzoJsonInputFormat (ここでは Twitter データを操作します) を使用したいと考えています。しかし、これを実行しようとすると、Elephant Bird 形式が InputFormat クラスの有効なインスタンスではないことを示すエラーが表示され続けます。

これは、ストリーミング コマンドを実行する方法です。

hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-streaming-0.20.2-cdh3u5.jar \                                                                                                          
    -libjars /project/hanna/src/elephant-bird/build/elephant-bird-2.2.0.jar \                                                                                                              
    -D stream.map.output.field.separator=\t \                                                                                                                                              
    -D stream.num.map.output.key.fields=2 \                                                                                                                                                
    -D map.output.key.field.separator=\t \                                                                                                                                                 
    -D mapred.text.key.partitioner.options=-k1,2 \                                                                                                                                         
    -file /home/a/ahanna/sandbox/hadoop-textual-analysis/streaming/filter/filterMap.py \                                                                                                   
    -file /home/a/ahanna/sandbox/hadoop-textual-analysis/streaming/filter/filterReduce.py \                                                                                                
    -file /home/a/ahanna/sandbox/hadoop-textual-analysis/streaming/data/latinKeywords.txt \                                                                                                
    -inputformat com.twitter.elephantbird.mapreduce.input.LzoTextInputFormat \                                                                                                             
    -input /user/ahanna/lzotest \                                                                                                                                                          
    -output /user/ahanna/output \                                                                                                                                                          
    -mapper filterMap.py \                                                                                                                                                                 
    -reducer filterReduce.py \                                                                                                                                                             
    -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner    

そして、これは私が得るエラーです:

Exception in thread "main" java.lang.RuntimeException: class com.hadoop.mapreduce.LzoTextInputFormat not org.apache.hadoop.mapred.InputFormat
    at org.apache.hadoop.conf.Configuration.setClass(Configuration.java:1078)
at org.apache.hadoop.mapred.JobConf.setInputFormat(JobConf.java:633)
at org.apache.hadoop.streaming.StreamJob.setJobConf(StreamJob.java:707)
at org.apache.hadoop.streaming.StreamJob.run(StreamJob.java:122)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
at org.apache.hadoop.streaming.HadoopStreaming.main(HadoopStreaming.java:50)
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:616)
at org.apache.hadoop.util.RunJar.main(RunJar.java:197)
4

2 に答える 2

4

Hadoop 2.4 では、次のコマンドで実行できました。

-D org.apache.hadoop.mapreduce.lib.input.FileInputFormat=your.package.path.FileInputFormat

標準の代わりに-inputformat

于 2014-07-30T11:53:30.037 に答える
2

互換性のために、Hadoop は Java で map/reduce タスクを記述する 2 つの方法をサポートしています。パッケージのインターフェースを介した「古い」方法org.apache.hadoop.mapredと、パッケージの抽象クラスを介した「新しい」方法org.apache.hadoop.mapreduceです。

ストリーミング自体は古いアプローチを使用して記述されているため、ストリーミング API を使用している場合でも、これを知っておく必要があります。そのため、外部ライブラリを使用してストリーミング メカニズムの内部を変更する場合は、このライブラリがあまりにも古い学校の方法を使用して書かれています。

これはまさにあなたに起こったことです。通常はラッパーを作成しますが、幸いなことにElephant Birdには古いスタイルの が用意されているため、InputFormat必要なのは に置き換えるだけです。com.twitter.elephantbird.mapreduce.input.LzoTextInputFormatcom.twitter.elephantbird.mapred.input.DeprecatedLzoTextInputFormat

于 2012-10-17T20:25:46.503 に答える