Pig Java Udfの概要
3452 ワード
pigを使う過程で、いつも自分でudfを書く必要があります.一般的にjavaのudfを書いて、mavenのプロジェクトを構成して管理します.基本的なpig java udfのmavenプロジェクトのpom定義は以下の通りです.
このdependencyはpig javaのインタフェースから来ています.
次にmavenのrepositoryを構成し、コマンドを実行します.
tagetディレクトリの下にjarパッケージが表示されます.仮にudfという名前のCalcMetric()を書いてmyudf-jar-with-dependencies.jarをコンパイルしたとします.
この時pigがあるとします
ではpigを実行します
Pigのregister文は、使用するjarパケットを示し、その後にjarパケットのパスが続く.これはHDFSパスではなくlocalパスである.pig scriptにjarパッケージ名のみを書き、コマンドラインにclasspathを指定することもできます.
-cp $your_path
または
-Dpig.additional.jars='your_jar_path'
このjava udfなどの他のデータファイルにアクセスする必要がある場合は、ローカルファイルに依存して初期化します.Java udfはhadoop grid nodeでも一度初期化するのでgrid nodeでもこの問題があることを保証しなければならないので、この場合はhadoopのDistributedCacheを使う必要があります.このコマンドを使用できます.
-Dtmpfiles='$your_file'
または、pig scriptに次のように書きます.
set mapred.cache.files 'your_file'
4.0.0
com.x
PigUdf
0.0.1-SNAPSHOT
com.google.protobuf
protobuf-java
2.5.0
provided
com.x
commons-protobuf
0.1.1
system
${basedir}/jars/commons-protobuf.jar
org.apache.hadoop
hadoop-common
2.2.0
org.apache.pig
pig
0.13.0
provided
${project.artifactId}
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.6
1.6
1.6
maven-assembly-plugin
jar-with-dependencies
config
package
single
このdependencyはpig javaのインタフェースから来ています.
org.apache.pig
pig
0.13.0
provided
次にmavenのrepositoryを構成し、コマンドを実行します.
mvn clean package
tagetディレクトリの下にjarパッケージが表示されます.仮にudfという名前のCalcMetric()を書いてmyudf-jar-with-dependencies.jarをコンパイルしたとします.
この時pigがあるとします
register PigUdf.jar;
DEFINE CalcMetric com.x.pig.udf.CalcMetric();
raw_data = load '$input' using PigStorage('\u0001') as (val:long);
metrics_data = foreach raw_data generate CalcMetric(val) as metric;
store metrics_data into '$output' using PigStorage('\0001', '-schema');
ではpigを実行します
pig -f mypig.pig -param input=/user/tom/test/input_data -param output=/user/tom/test/output_data
Pigのregister文は、使用するjarパケットを示し、その後にjarパケットのパスが続く.これはHDFSパスではなくlocalパスである.pig scriptにjarパッケージ名のみを書き、コマンドラインにclasspathを指定することもできます.
-cp $your_path
または
-Dpig.additional.jars='your_jar_path'
このjava udfなどの他のデータファイルにアクセスする必要がある場合は、ローカルファイルに依存して初期化します.Java udfはhadoop grid nodeでも一度初期化するのでgrid nodeでもこの問題があることを保証しなければならないので、この場合はhadoopのDistributedCacheを使う必要があります.このコマンドを使用できます.
-Dtmpfiles='$your_file'
または、pig scriptに次のように書きます.
set mapred.cache.files 'your_file'