0

S3ドルに保存されているログファイルを読み取り、ElasticMapReduceを使用して解析しようとするアプリケーションを開発しています。現在のログファイルの形式は次のとおりです

------------------------------- 
COLOR=Black 
Date=1349719200 
PID=23898 
Program=Java 
EOE 
------------------------------- 
COLOR=White 
Date=1349719234 
PID=23828 
Program=Python 
EOE 

そのため、ファイルをPigスクリプトにロードしようとしましたが、組み込みのPig Loaderがデータをロードできないようであるため、独自のUDFを作成する必要があります。私はPigとHadoopにかなり慣れていないので、UDFがどのように機能するかを知るために、自分で作成する前に他の人が作成したスクリプトを試してみたいと思います。ここhttp://pig.apache.org/docs/r0.10.0/udf.htmlから1つを見つけました。SimpleTextLoaderがあります。このSimpleTextLoaderをコンパイルするには、次のようにいくつかのインポートを追加する必要があります。

import java.io.IOException; 
import java.util.ArrayList;
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
import org.apache.hadoop.mapreduce.InputFormat; 
import org.apache.hadoop.mapreduce.RecordReader; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit; 
import org.apache.pig.backend.executionengine.ExecException; 
import org.apache.pig.data.Tuple; 
import org.apache.pig.data.TupleFactory;
import org.apache.pig.data.DataByteArray; 
import org.apache.pig.PigException; 
import org.apache.pig.LoadFunc;

次に、このファイルをコンパイルする必要があることがわかりました。svnとpigrunningをダウンロードする必要があります

sudo apt-get install subversion 
svn co http://svn.apache.org/repos/asf/pig/trunk 
ant

これでpig.jarファイルができたので、このファイルをコンパイルしようとします。

javac -cp ./trunk/pig.jar SimpleTextLoader.java 
jar -cf SimpleTextLoader.jar SimpleTextLoader.class 

コンパイルは成功し、Pigと入力してgruntに入り、gruntでファイルをロードしようとします。

grunt> register file:/home/hadoop/myudfs.jar
grunt> raw = LOAD 's3://mys3bucket/samplelogs/applog.log' USING myudfs.SimpleTextLoader('=') AS (key:chararray, value:chararray); 

2012-12-05 00:08:26,737 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. org/apache/pig/LoadFunc Details at logfile: /home/hadoop/pig_1354666051892.log

pig_1354666051892.log内には、

Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. org/apache/pig/LoadFunc

java.lang.NoClassDefFoundError: org/apache/pig/LoadFunc

また、 http: //wiki.apache.org/pig/UDFManualから別のUDF(UPPER.java)を使用しようとしましたが、UPPERメソッドを使用しようとしても同じエラーが発生します。手伝ってくれませんか、ここで何が問題なのですか?どうもありがとう!

更新:/home/hadoop/lib/pig/pig.jarにあるEMRビルトインPig.jarを試しましたが、同じ問題が発生しました。

4

2 に答える 2

0

UDF jar を /home/hadoop/lib/pig ディレクトリに配置するか、 pig-*-amzn.jar ファイルを /home/hadoop/lib にコピーすると、機能します。

これらのいずれかを実行するには、おそらくブートストラップ アクションを使用します。

于 2013-03-08T14:24:45.407 に答える
0

pig や hive などの Hadoop エコシステム ツールのほとんどは、環境変数について $HADOOP_HOME/conf/hadoop-env.sh を検索します。

pig-0.13.0-h1.jar (UDF に必要なすべてのクラスが含まれています) を HADOOP_CLASSPATH に追加することで、この問題を解決できました。

export HADOOP_CLASSPATH=/home/hadoop/pig-0.13.0/pig-0.13.0-h1.jar:$HADOOP_CLASSPATH

pig-0.13.0-h1.jar は Pig ホーム ディレクトリにあります。

于 2015-05-10T11:57:28.140 に答える